summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/RegExp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /js/src/tests/test262/built-ins/RegExp
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/tests/test262/built-ins/RegExp')
-rw-r--r--js/src/tests/test262/built-ins/RegExp/15.10.2.15-6-1.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/15.10.2.5-3-1.js15
-rw-r--r--js/src/tests/test262/built-ins/RegExp/15.10.4.1-1.js15
-rw-r--r--js/src/tests/test262/built-ins/RegExp/15.10.4.1-2.js15
-rw-r--r--js/src/tests/test262/built-ins/RegExp/15.10.4.1-3.js15
-rw-r--r--js/src/tests/test262/built-ins/RegExp/15.10.4.1-4.js11
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-flags-u.js66
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier-flags-u.js66
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier.js66
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape.js66
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-flags-u.js67
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier-flags-u.js67
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier.js67
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape.js67
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-flags-u.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier-flags-u.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-flags-u.js71
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier-flags-u.js71
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier.js71
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape.js71
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-flags-u.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier-flags-u.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-flags-u.js68
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier-flags-u.js68
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier.js68
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape.js68
-rw-r--r--js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/shell.js115
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T1.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T10.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T11.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T12.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T13.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T14.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T15.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T16.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T2.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T3.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T4.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T5.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T6.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T7.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T8.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T9.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.1_T1.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.2_T1.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.3_T1.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.4_T1.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.5_T1.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A2.1_T1.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A2.1_T2.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A3.1_T1.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A3.1_T2.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A4.1_T1.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A4.1_T2.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A4.1_T3.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A5.1_T1.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T1.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T4.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T5.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T6.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T7.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T8.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T9.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.12_A3_T5.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.12_A4_T5.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T1.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T10.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T11.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T12.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T13.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T14.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T15.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T17.js17
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T2.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T3.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T4.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T5.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T6.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T7.js17
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T8.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T9.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T1.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T2.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T3.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T4.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T5.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T6.js17
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T7.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T8.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A3_T1.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A3_T2.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A3_T3.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A3_T4.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T1.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T10.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T11.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T12.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T13.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T14.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T15.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T16.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T17.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T18.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T19.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T2.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T20.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T21.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T22.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T23.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T24.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T25.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T26.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T27.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T28.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T29.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T3.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T30.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T31.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T32.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T33.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T34.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T35.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T36.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T37.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T38.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T39.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T4.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T40.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T41.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T5.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T6.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T7.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T8.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T9.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T1.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T10.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T11.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T12.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T13.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T14.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T15.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T16.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T17.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T2.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T3.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T4.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T5.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T6.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T7.js17
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T8.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T9.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T1.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T2.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T3.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T4.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T5.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T1.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T2.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T3.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T4.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T5.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T1.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T10.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T2.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T3.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T4.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T5.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T6.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T7.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T8.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T9.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T1.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T10.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T11.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T12.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T13.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T14.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T15.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T2.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T3.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T4.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T5.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T6.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T7.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T8.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T9.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T1.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T2.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T3.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T4.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T5.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T6.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T7.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T8.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A5_T1.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A5_T2.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A6_T1.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A6_T2.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A6_T3.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A6_T4.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T1.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T10.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T11.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T12.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T2.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T3.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T4.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T5.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T6.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T7.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T8.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T9.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A2_T1.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A2_T2.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A2_T3.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A2_T4.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T1.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T10.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T11.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T12.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T13.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T14.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T2.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T3.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T4.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T5.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T6.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T7.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T8.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T9.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T1.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T10.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T11.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T12.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T13.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T14.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T15.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T16.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T17.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T18.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T19.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T2.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T20.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T21.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T3.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T4.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T5.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T6.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T7.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T8.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T9.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T1.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T10.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T11.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T12.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T2.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T3.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T4.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T5.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T6.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T7.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T8.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T9.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T1.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T2.js17
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T3.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T4.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T5.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T6.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T1.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T2.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T3.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T4.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T5.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T1.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T10.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T11.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T2.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T3.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T4.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T5.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T6.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T7.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T8.js17
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T9.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T1.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T10.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T11.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T12.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T13.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T14.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T15.js64
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T16.js62
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T17.js57
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T18.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T19.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T2.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T20.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T21.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T22.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T23.js50
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T24.js50
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T25.js50
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T26.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T27.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T28.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T29.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T3.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T30.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T31.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T32.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T33.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T4.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T5.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T6.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T7.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T8.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T9.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T1.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T2.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T3.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T4.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T5.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T6.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T7.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T8.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T9.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A5_T1.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A5_T2.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.9_A1_T1.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.9_A1_T2.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.9_A1_T3.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2.9_A1_T5.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.2_A1_T1.js89
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T1.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T2.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T3.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T4.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T5.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A2_T1.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A2_T2.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A3_T1.js23
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A3_T2.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T1.js39
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T2.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T3.js39
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T4.js39
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T5.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A2_T1.js17
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A2_T2.js27
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T1.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T2.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T3.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T4.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T5.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T1.js17
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T2.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T3.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T4.js17
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T5.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T1.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T3.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T4.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T6.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T7.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T8.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T9.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A6_T1.js15
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A7_T1.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A7_T2.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T1.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T10.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T11.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T12.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T13.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T2.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T3.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T4.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T5.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T6.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T7.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T8.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T9.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A9_T1.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A9_T2.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A9_T3.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.5_A1.js11
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.5_A2_T1.js17
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.5_A2_T2.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.7_A1_T1.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.7_A1_T2.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.7_A2_T1.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.7_A2_T2.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.7_A3_T1.js23
-rw-r--r--js/src/tests/test262/built-ins/RegExp/S15.10.7_A3_T2.js23
-rw-r--r--js/src/tests/test262/built-ins/RegExp/Symbol.species/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/Symbol.species/length.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/Symbol.species/return-value.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/Symbol.species/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/Symbol.species/symbol-species-name.js27
-rw-r--r--js/src/tests/test262/built-ins/RegExp/Symbol.species/symbol-species.js23
-rw-r--r--js/src/tests/test262/built-ins/RegExp/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/call_with_non_regexp_same_constructor.js27
-rw-r--r--js/src/tests/test262/built-ins/RegExp/call_with_regexp_match_falsy.js25
-rw-r--r--js/src/tests/test262/built-ins/RegExp/call_with_regexp_not_same_constructor.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/character-class-escape-non-whitespace-u180e.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/character-class-escape-non-whitespace.js57
-rw-r--r--js/src/tests/test262/built-ins/RegExp/dotall/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/dotall/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/dotall/with-dotall-unicode.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/dotall/with-dotall.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/dotall/without-dotall-unicode.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/dotall/without-dotall.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/duplicate-flags.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/duplicate-named-capturing-groups-syntax.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/from-regexp-like-flag-override.js69
-rw-r--r--js/src/tests/test262/built-ins/RegExp/from-regexp-like-get-ctor-err.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/from-regexp-like-get-flags-err.js51
-rw-r--r--js/src/tests/test262/built-ins/RegExp/from-regexp-like-get-source-err.js55
-rw-r--r--js/src/tests/test262/built-ins/RegExp/from-regexp-like-short-circuit.js40
-rw-r--r--js/src/tests/test262/built-ins/RegExp/from-regexp-like.js58
-rw-r--r--js/src/tests/test262/built-ins/RegExp/is-a-constructor.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lastIndex.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/alternations.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/back-references-to-captures.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/back-references.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/captures-negative.js27
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/captures.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/do-not-backtrack.js27
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/greedy-loop.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/misc.js39
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/mutual-recursive.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/negative.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/nested-lookaround.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/simple-fixed-length.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/sliced-strings.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/start-of-line.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/sticky.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/variable-length.js27
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookBehind/word-boundary.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/lookahead-quantifier-match-groups.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/match-indices/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-element.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-matched.js40
-rw-r--r--js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-non-unicode-match.js81
-rw-r--r--js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-properties.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-unicode-match.js89
-rw-r--r--js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-unicode-property-names.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-unmatched.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/match-indices/indices-array.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/match-indices/indices-groups-object-undefined.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/match-indices/indices-groups-object-unmatched.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/match-indices/indices-groups-object.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/match-indices/indices-groups-properties.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/match-indices/indices-property.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/match-indices/no-indices-array.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/match-indices/shell.js329
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-exec.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-group-property-enumeration-order.js27
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-match-indices.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-match.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-matchall.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-replace.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-replaceall.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-search.js14
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-split.js15
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-test.js23
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/functional-replace-global.js58
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/functional-replace-non-global.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-subclass-sans.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-subclass.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-undefined.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-unmatched.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/groups-object.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/groups-properties.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/lookbehind.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-match.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-property-names-invalid.js57
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-property-names-valid.js96
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-property-names.js25
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-references.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/shell.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-escaped.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-get.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-missing.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-nocaptures.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-numbered.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-unclosed.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-undefined.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/unicode-match.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/unicode-property-names-invalid.js57
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/unicode-property-names-valid.js102
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/unicode-property-names.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/named-groups/unicode-references.js49
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prop-desc.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_F-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_F.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Invalid-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Invalid.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_N-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_N.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_No-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_No.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_T-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_T.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Y-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Y.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Yes-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Yes.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/character-class-range-end.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/character-class-range-no-dash-end.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/character-class-range-no-dash-start.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/character-class-range-start.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/character-class.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/ASCII.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/ASCII_Hex_Digit.js57
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Alphabetic.js1517
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Any.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Assigned.js1456
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Bidi_Control.js60
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Bidi_Mirrored.js281
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Case_Ignorable.js927
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Cased.js357
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Casefolded.js1297
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Casemapped.js315
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Lowercased.js1271
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_NFKC_Casefolded.js1731
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Titlecased.js1305
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Uppercased.js1307
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Dash.js88
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Default_Ignorable_Code_Point.js86
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Deprecated.js69
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Diacritic.js443
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji.js345
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji_Component.js72
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji_Modifier.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji_Modifier_Base.js133
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji_Presentation.js215
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Extended_Pictographic.js209
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Extender.js119
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Cased_Letter.js379
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Close_Punctuation.js245
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Connector_Punctuation.js104
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Control.js124
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Currency_Symbol.js134
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Dash_Punctuation.js130
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Decimal_Number.js249
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Enclosing_Mark.js103
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Final_Punctuation.js112
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Format.js135
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Initial_Punctuation.js115
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Letter.js1411
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Letter_Number.js116
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Line_Separator.js93
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Lowercase_Letter.js1409
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Mark.js743
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Math_Symbol.js221
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Modifier_Letter.js235
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Modifier_Symbol.js155
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Nonspacing_Mark.js785
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Number.js367
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Open_Punctuation.js250
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other.js1515
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Letter.js1113
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Number.js237
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Punctuation.js467
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Symbol.js461
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Paragraph_Separator.js93
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Private_Use.js96
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Punctuation.js505
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Separator.js108
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Space_Separator.js106
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Spacing_Mark.js457
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Surrogate.js92
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Symbol.js557
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Titlecase_Letter.js112
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Unassigned.js1506
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Uppercase_Letter.js1385
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Grapheme_Base.js1803
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Grapheme_Extend.js779
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Hex_Digit.js63
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/IDS_Binary_Operator.js55
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/IDS_Trinary_Operator.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/ID_Continue.js1589
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/ID_Start.js1371
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Ideographic.js92
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Join_Control.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Logical_Order_Exception.js67
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Lowercase.js1395
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Math.js319
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Noncharacter_Code_Point.js86
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Pattern_Syntax.js109
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Pattern_White_Space.js62
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Quotation_Mark.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Radical.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Regional_Indicator.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Adlam.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ahom.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Anatolian_Hieroglyphs.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Arabic.js189
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Armenian.js79
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Avestan.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Balinese.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bamum.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bassa_Vah.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Batak.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bengali.js101
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bhaiksuki.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bopomofo.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Brahmi.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Braille.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Buginese.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Buhid.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Canadian_Aboriginal.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Carian.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Caucasian_Albanian.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Chakma.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cham.js79
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cherokee.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Chorasmian.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Common.js418
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Coptic.js97
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cuneiform.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cypriot.js85
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cypro_Minoan.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cyrillic.js92
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Deseret.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Devanagari.js81
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Dives_Akuru.js89
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Dogra.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Duployan.js81
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Egyptian_Hieroglyphs.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Elbasan.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Elymaic.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ethiopic.js145
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Georgian.js93
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Glagolitic.js84
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Gothic.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Grantha.js103
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Greek.js145
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Gujarati.js101
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Gunjala_Gondi.js84
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Gurmukhi.js105
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Han.js115
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hangul.js99
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hanifi_Rohingya.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hanunoo.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hatran.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hebrew.js91
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hiragana.js84
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Imperial_Aramaic.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Inherited.js151
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Inscriptional_Pahlavi.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Inscriptional_Parthian.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Javanese.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kaithi.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kannada.js98
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Katakana.js101
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kawi.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kayah_Li.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kharoshthi.js88
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Khitan_Small_Script.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Khmer.js79
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Khojki.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Khudawadi.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lao.js95
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Latin.js151
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lepcha.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Limbu.js83
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Linear_A.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Linear_B.js86
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lisu.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lycian.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lydian.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mahajani.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Makasar.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Malayalam.js86
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mandaic.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Manichaean.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Marchen.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Masaram_Gondi.js87
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Medefaidrin.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Meetei_Mayek.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mende_Kikakui.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Meroitic_Cursive.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Meroitic_Hieroglyphs.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Miao.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Modi.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mongolian.js85
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mro.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Multani.js83
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Myanmar.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nabataean.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nag_Mundari.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nandinagari.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_New_Tai_Lue.js79
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Newa.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nko.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nushu.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nyiakeng_Puachue_Hmong.js79
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ogham.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ol_Chiki.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Hungarian.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Italic.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_North_Arabian.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Permic.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Persian.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Sogdian.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_South_Arabian.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Turkic.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Uyghur.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Oriya.js100
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Osage.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Osmanya.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Pahawh_Hmong.js82
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Palmyrene.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Pau_Cin_Hau.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Phags_Pa.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Phoenician.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Psalter_Pahlavi.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Rejang.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Runic.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Samaritan.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Saurashtra.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sharada.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Shavian.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Siddham.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_SignWriting.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sinhala.js99
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sogdian.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sora_Sompeng.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Soyombo.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sundanese.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Syloti_Nagri.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Syriac.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tagalog.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tagbanwa.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tai_Le.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tai_Tham.js82
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tai_Viet.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Takri.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tamil.js109
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tangsa.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tangut.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Telugu.js99
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Thaana.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Thai.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tibetan.js86
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tifinagh.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tirhuta.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Toto.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ugaritic.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Vai.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Vithkuqi.js88
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Wancho.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Warang_Citi.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Yezidi.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Yi.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Zanabazar_Square.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Adlam.js82
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ahom.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Anatolian_Hieroglyphs.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Arabic.js177
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Armenian.js79
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Avestan.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Balinese.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bamum.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bassa_Vah.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Batak.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bengali.js125
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bhaiksuki.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bopomofo.js97
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Brahmi.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Braille.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Buginese.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Buhid.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Canadian_Aboriginal.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Carian.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Caucasian_Albanian.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Chakma.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cham.js79
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cherokee.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Chorasmian.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Common.js366
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Coptic.js99
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cuneiform.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cypriot.js91
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cypro_Minoan.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cyrillic.js94
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Deseret.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Devanagari.js89
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Dives_Akuru.js89
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Dogra.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Duployan.js81
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Egyptian_Hieroglyphs.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Elbasan.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Elymaic.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ethiopic.js145
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Georgian.js91
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Glagolitic.js93
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gothic.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Grantha.js123
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Greek.js149
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gujarati.js107
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gunjala_Gondi.js86
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gurmukhi.js111
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Han.js149
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hangul.js115
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hanifi_Rohingya.js86
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hanunoo.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hatran.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hebrew.js91
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hiragana.js107
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Imperial_Aramaic.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inherited.js133
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inscriptional_Pahlavi.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inscriptional_Parthian.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Javanese.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kaithi.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kannada.js115
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Katakana.js113
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kawi.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kayah_Li.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kharoshthi.js88
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khitan_Small_Script.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khmer.js79
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khojki.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khudawadi.js79
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lao.js95
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Latin.js167
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lepcha.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Limbu.js85
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Linear_A.js79
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Linear_B.js92
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lisu.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lycian.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lydian.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mahajani.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Makasar.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Malayalam.js95
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mandaic.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Manichaean.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Marchen.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Masaram_Gondi.js89
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Medefaidrin.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meetei_Mayek.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mende_Kikakui.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meroitic_Cursive.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meroitic_Hieroglyphs.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Miao.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Modi.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mongolian.js82
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mro.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Multani.js85
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Myanmar.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nabataean.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nag_Mundari.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nandinagari.js90
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_New_Tai_Lue.js79
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Newa.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nko.js84
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nushu.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nyiakeng_Puachue_Hmong.js79
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ogham.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ol_Chiki.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Hungarian.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Italic.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_North_Arabian.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Permic.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Persian.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Sogdian.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_South_Arabian.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Turkic.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Uyghur.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Oriya.js109
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Osage.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Osmanya.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Pahawh_Hmong.js82
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Palmyrene.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Pau_Cin_Hau.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Phags_Pa.js79
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Phoenician.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Psalter_Pahlavi.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Rejang.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Runic.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Samaritan.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Saurashtra.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sharada.js85
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Shavian.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Siddham.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_SignWriting.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sinhala.js101
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sogdian.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sora_Sompeng.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Soyombo.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sundanese.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Syloti_Nagri.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Syriac.js97
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tagalog.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tagbanwa.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Le.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Tham.js82
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Viet.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Takri.js79
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tamil.js123
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tangsa.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tangut.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Telugu.js107
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Thaana.js86
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Thai.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tibetan.js86
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tifinagh.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tirhuta.js84
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Toto.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ugaritic.js77
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Vai.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Vithkuqi.js88
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Wancho.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Warang_Citi.js76
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Yezidi.js87
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Yi.js86
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Zanabazar_Square.js73
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Sentence_Terminal.js213
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Soft_Dotted.js121
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Terminal_Punctuation.js269
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Unified_Ideograph.js85
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Uppercase.js1355
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Variation_Selector.js61
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/White_Space.js72
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/XID_Continue.js1603
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/XID_Start.js1385
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/shell.js115
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-CharacterClass.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-P.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-u.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji.js1421
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence-negative-CharacterClass.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence-negative-P.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence-negative-u.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji-negative-CharacterClass.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji-negative-P.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji-negative-u.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji.js3704
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence-negative-CharacterClass.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence-negative-P.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence-negative-u.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence.js293
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence-negative-CharacterClass.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence-negative-P.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence-negative-u.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence.js690
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence-negative-CharacterClass.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence-negative-P.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence-negative-u.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence-negative-CharacterClass.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence-negative-P.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence-negative-u.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence.js1390
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Block-implicit-negated.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Block-implicit.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-implicit-negated.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-implicit.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-negated.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-Is-prefix-Script-negated.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-Is-prefix-Script.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-circumflex-negation-negated.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-circumflex-negation.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-empty-negated.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-empty.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-invalid-negated.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-invalid.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-no-braces-negated.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-no-braces-value-negated.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-no-braces-value.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-no-braces.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-and-value-only-negated.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-and-value-only.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-negated.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-only-negated.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-only.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-unclosed-negated.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-unclosed.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-unopened-negated.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-unopened.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-01-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-01.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-02-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-02.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-03-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-03.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-04-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-04.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-05-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-05.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-06-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-06.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-07-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-07.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-08-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-08.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-09-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-09.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-10-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-10.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-11-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-11.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-12-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-12.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-13-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-13.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-14-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-14.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-equals-negated.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-equals.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-negated.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-equals-negated.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-equals.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-negated.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-equals-negated.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-equals.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-negated.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-binary-property-negated.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-binary-property.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-and-value-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-and-value.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-existing-value-negated.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-existing-value.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-General_Category-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-Script-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-Script.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-Script_Extensions-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-Script_Extensions.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-general-category.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Composition_Exclusion-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Composition_Exclusion.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFC-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFC.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFD-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFD.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKC-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKC.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKD-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKD.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-FC_NFKC_Closure-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-FC_NFKC_Closure.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Full_Composition_Exclusion-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Full_Composition_Exclusion.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Grapheme_Link-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Grapheme_Link.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Hyphen-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Hyphen.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Alphabetic-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Alphabetic.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Default_Ignorable_Code_Point-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Default_Ignorable_Code_Point.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Grapheme_Extend-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Grapheme_Extend.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Continue-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Continue.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Start-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Start.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Lowercase-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Lowercase.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Math-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Math.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Uppercase-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Uppercase.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Prepended_Concatenation_Mark-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Prepended_Concatenation_Mark.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Block-with-value-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Block-with-value.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-FC_NFKC_Closure-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-FC_NFKC_Closure.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Line_Break-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Line_Break-with-value-negated.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Line_Break-with-value.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Line_Break.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/proto-from-ctor-realm.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/15.10.6.js13
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/S15.10.5.1_A1.js11
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/S15.10.5.1_A2.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/S15.10.5.1_A3.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/S15.10.5.1_A4.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/S15.10.6.1_A1_T1.js17
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/S15.10.6.1_A1_T2.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/S15.10.6_A1_T1.js17
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/S15.10.6_A1_T2.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-coerce-lastindex.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-g-set-lastindex-err.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-g-set-lastindex.js40
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-return-val.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-y-return-val.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-y-set-lastindex-err.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-y-set-lastindex.js40
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-infer-unicode.js40
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-g-set-lastindex-err.js54
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-g-set-lastindex.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-return-val-groups.js51
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-return-val.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-u-return-val-groups.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-y-set-lastindex-err.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-y-set-lastindex.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-y-coerce-lastindex-err.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/coerce-arg-err.js27
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/coerce-arg.js27
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/coerce-global.js87
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/exec-err.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/exec-invocation.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/exec-return-type-invalid.js58
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/exec-return-type-valid.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/flags-tostring-error.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-coerce-result-err.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-get-exec-err.js39
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-get-result-err.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-init-lastindex-err.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-init-lastindex.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-empty-advance-lastindex.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-empty-coerce-lastindex-err.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-empty-set-lastindex-err.js49
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-no-coerce-lastindex.js49
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-no-set-lastindex.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-success-return-val.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-zero-matches.js23
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/get-exec-err.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/get-flags-err.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/get-global-err.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/get-unicode-error.js39
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/length.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/name.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/prop-desc.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/this-val-non-obj.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/this-val-non-regexp.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/u-advance-after-empty.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-fail-global-return.js49
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-fail-lastindex-no-write.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-fail-lastindex.js39
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-fail-return.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-init-lastindex.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-set-lastindex.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/isregexp-called-once.js59
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/isregexp-this-throws.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/length.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/name.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/prop-desc.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/regexpcreate-this-throws.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/shell.js152
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-get-constructor-throws.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-get-species-throws.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-is-not-object-throws.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-is-undefined.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-species-is-not-constructor.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-species-is-null-or-undefined.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-species-throws.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-regexp-get-global-throws.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-regexp-get-unicode-throws.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/string-tostring-throws.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/string-tostring.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-get-flags-throws.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-get-flags.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-lastindex-cached.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-not-object-throws.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-tolength-lastindex-throws.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-tostring-flags-throws.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-tostring-flags.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/arg-1-coerce-err.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/arg-1-coerce.js27
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/arg-2-coerce-err.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/arg-2-coerce.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/coerce-global.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/coerce-lastindex-err.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/coerce-lastindex.js54
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/coerce-unicode.js50
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/exec-err.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/exec-invocation.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/flags-tostring-error.js49
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-coerce-replacement-err.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-coerce-replacement.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-err.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-invoke-args-empty-result.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-invoke-args.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-invoke-this-no-strict.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-invoke-this-strict-strict.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/g-init-lastindex-err.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/g-init-lastindex.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/g-pos-decrement.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/g-pos-increment.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/get-exec-err.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/get-flags-err.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/get-global-err.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/get-unicode-error.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/length.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/match-failure.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/name.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/named-groups-fn.js61
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/named-groups.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/poisoned-stdlib.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/prop-desc.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/replace-with-trailing.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/replace-without-trailing.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-capture-err.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-capture.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-groups-err.js40
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-groups-prop-err.js69
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-groups-prop.js72
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-groups.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-index-err.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-index-undefined.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-index.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-length-err.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-length.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-matched-err.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-matched-global.js55
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-matched.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-capture-err.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-groups-err.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-groups-prop-err.js64
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-index-err.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-length-err.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-matched-err.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-after.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-before.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-capture-idx-1.js39
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-capture-idx-2.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-dollar.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-matched.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/this-val-non-obj.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/u-advance-after-empty.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-fail-global-return.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-fail-lastindex-no-write.js40
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-fail-lastindex.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-fail-return.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-init-lastindex.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-set-lastindex.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/coerce-string-err.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/coerce-string.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/cstm-exec-return-index.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/cstm-exec-return-invalid.js58
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/failure-return-val.js15
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/get-lastindex-err.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/lastindex-no-restore.js67
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/length.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/match-err.js27
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/name.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/prop-desc.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-init-err.js54
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-init-samevalue.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-init.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-restore-err.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-restore-samevalue.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-restore.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/success-get-index-err.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/success-return-val.js17
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/this-val-non-obj.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/u-lastindex-advance.js25
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/y-fail-return.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-flags-err.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-flags.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-limit-err.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-limit.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-string-err.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-string.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/get-flags-err.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/last-index-exceeds-str-size.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/length.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/limit-0-bail.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/name.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/prop-desc.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-ctor-get-err.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-ctor-non-obj.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-ctor-undef.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-err.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-species-get-err.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-species-non-ctor.js59
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-species-undef.js50
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-y.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor.js50
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/splitter-proto-from-ctor-realm.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-adv-thru-empty-match.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-coerce-lastindex-err.js51
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-coerce-lastindex.js48
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-empty-match-err.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-empty-match.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-empty-no-match.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-get-lastindex-err.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-limit-capturing.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-limit.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-match-err.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-result-coerce-length-err.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-result-coerce-length.js54
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-result-get-capture-err.js51
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-result-get-length-err.js45
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-set-lastindex-err.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-set-lastindex-match.js51
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-set-lastindex-no-match.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-trailing-chars.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/this-val-non-obj.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/u-lastindex-adv-thru-failure.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/u-lastindex-adv-thru-match.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/dotAll/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/dotAll/cross-realm.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/dotAll/length.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/dotAll/name.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/dotAll/prop-desc.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/dotAll/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/dotAll/this-val-invalid-obj.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/dotAll/this-val-non-obj.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/dotAll/this-val-regexp-prototype.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/dotAll/this-val-regexp.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/15.10.6.2-9-e-1.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A10.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A11.js17
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A12.js15
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T1.js50
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T10.js50
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T11.js50
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T12.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T13.js50
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T14.js50
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T15.js50
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T16.js15
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T17.js50
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T18.js50
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T19.js50
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T2.js51
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T20.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T21.js50
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T3.js50
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T4.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T5.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T6.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T7.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T8.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T9.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T1.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T10.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T2.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T3.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T4.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T5.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T6.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T7.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T8.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T9.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T1.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T2.js153
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T3.js157
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T4.js159
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T5.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T6.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T7.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T1.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T10.js84
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T11.js60
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T12.js85
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T2.js82
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T3.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T4.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T5.js84
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T6.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T7.js82
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T8.js80
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T9.js82
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A5_T1.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A5_T2.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A5_T3.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A6.js15
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A7.js25
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A8.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A9.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/duplicate-named-groups-properties.js39
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/duplicate-named-indices-groups-properties.js39
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/failure-g-lastindex-reset.js54
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/failure-lastindex-access.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/failure-lastindex-set.js74
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/name.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/success-g-lastindex-no-access.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/success-lastindex-access.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/u-captured-value.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/u-lastindex-adv.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/u-lastindex-value.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/y-fail-lastindex-no-write.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/y-fail-lastindex.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/y-fail-return.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/y-init-lastindex.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/exec/y-set-lastindex.js27
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-dotall.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-global.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-hasIndices.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-ignoreCase.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-multiline.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-sticky.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-unicode.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/get-order.js51
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/length.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/name.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/prop-desc.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/rethrow.js79
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/return-order.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/this-val-non-obj.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/this-val-regexp-prototype.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/flags/this-val-regexp.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/global/15.10.7.2-2.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/global/S15.10.7.2_A10.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/global/S15.10.7.2_A8.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/global/S15.10.7.2_A9.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/global/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/global/cross-realm.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/global/length.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/global/name.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/global/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/global/this-val-invalid-obj.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/global/this-val-non-obj.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/global/this-val-regexp-prototype.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/cross-realm.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/length.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/name.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/prop-desc.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/this-val-invalid-obj.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/this-val-non-obj.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/this-val-regexp-prototype.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/this-val-regexp.js49
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/15.10.7.3-2.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/S15.10.7.3_A10.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/S15.10.7.3_A8.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/S15.10.7.3_A9.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/cross-realm.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/length.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/name.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/this-val-invalid-obj.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/this-val-non-obj.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/this-val-regexp-prototype.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/multiline/15.10.7.4-2.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/multiline/S15.10.7.4_A10.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/multiline/S15.10.7.4_A8.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/multiline/S15.10.7.4_A9.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/multiline/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/multiline/cross-realm.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/multiline/length.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/multiline/name.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/multiline/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/multiline/this-val-invalid-obj.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/multiline/this-val-non-obj.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/multiline/this-val-regexp-prototype.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/no-regexp-matcher.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/source/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/source/cross-realm.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/source/length.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/source/name.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/source/prop-desc.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/source/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/source/this-val-invalid-obj.js32
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/source/this-val-non-obj.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/source/this-val-regexp-prototype.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/source/value-empty.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/source/value-line-terminator.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/source/value-slash.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/source/value-u.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/source/value.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/sticky/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/sticky/cross-realm.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/sticky/length.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/sticky/name.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/sticky/prop-desc.js17
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/sticky/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/sticky/this-val-invalid-obj.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/sticky/this-val-non-obj.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/sticky/this-val-regexp-prototype.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/sticky/this-val-regexp.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A10.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A11.js17
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T1.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T10.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T11.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T12.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T13.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T14.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T15.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T16.js14
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T17.js14
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T18.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T19.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T2.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T20.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T21.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T22.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T3.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T4.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T5.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T6.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T7.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T8.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T9.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T1.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T10.js26
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T2.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T3.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T4.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T5.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T6.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T7.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T8.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T9.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A6.js15
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A7.js25
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A8.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A9.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/name.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/y-fail-lastindex-no-write.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/y-fail-lastindex.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/y-fail-return.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/y-init-lastindex.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/test/y-set-lastindex.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A10.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A11.js21
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A6.js23
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A7.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A8.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A9.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/toString/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/toString/called-as-function.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/toString/name.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/toString/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/toString/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicode/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicode/cross-realm.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicode/length.js30
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicode/name.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicode/prop-desc.js17
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicode/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicode/this-val-invalid-obj.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicode/this-val-non-obj.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicode/this-val-regexp-prototype.js19
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicode/this-val-regexp.js27
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-01.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-02.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-03.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-04.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-05.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-06.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-07.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-08.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-09.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-10.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-11.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-12.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-13.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-14.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-15.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-16.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-17.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-18.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-19.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-20.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-21.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-22.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-23.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-24.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-25.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-26.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-27.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-28.js20
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/cross-realm.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/length.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/name.js29
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/prop-desc.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/this-val-invalid-obj.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/this-val-non-obj.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/this-val-regexp-prototype.js23
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/this-val-regexp.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/uv-flags-constructor.js16
-rw-r--r--js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/uv-flags.js18
-rw-r--r--js/src/tests/test262/built-ins/RegExp/quantifier-integer-limit.js38
-rw-r--r--js/src/tests/test262/built-ins/RegExp/regexp-class-chars.js31
-rw-r--r--js/src/tests/test262/built-ins/RegExp/shell.js24
-rw-r--r--js/src/tests/test262/built-ins/RegExp/u180e.js28
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-class-escape.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-class.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-property-escape.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-property-of-strings-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-string-literal.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-class-escape.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-class.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-property-escape.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-property-of-strings-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-string-literal.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-class-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-class.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-property-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-property-of-strings-escape.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-string-literal.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-class-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-class.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-property-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-property-of-strings-escape.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-string-literal.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-class-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-class.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-property-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-property-of-strings-escape.js41
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-string-literal.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-class-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-class.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-property-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-property-of-strings-escape.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-string-literal.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-class-escape.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-class.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-property-escape.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-property-of-strings-escape.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-string-literal.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-class-escape.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-class.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-property-escape.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-property-of-strings-escape.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-string-literal.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-class-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-class.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-property-escape.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-property-of-strings-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-string-literal.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-class-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-class.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-property-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-property-of-strings-escape.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-string-literal.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-class-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-class.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-property-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character.js54
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-property-of-strings-escape.js63
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-string-literal.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-class-escape.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-class.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-property-escape.js54
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character.js34
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-property-of-strings-escape.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-string-literal.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-class-escape.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-class.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-property-escape.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-property-of-strings-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-string-literal.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-class-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-class.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-property-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-property-of-strings-escape.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-string-literal.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-class-escape.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-class.js52
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-property-escape.js63
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character.js44
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-property-of-strings-escape.js43
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-string-literal.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-13.1.js240
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-14.0.js135
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-15.0.js54
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-15.1.js141
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/shell.js115
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-class-escape.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-class.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-property-escape.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-property-of-strings-escape.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-string-literal.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-class-escape.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-class.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-property-escape.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character.js35
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-property-of-strings-escape.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-string-literal.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-class-escape.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-class.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-property-escape.js53
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character.js37
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-property-of-strings-escape.js46
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-string-literal.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicodeSets/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicode_character_class_backspace_escape.js22
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicode_full_case_folding.js27
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicode_identity_escape.js55
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicode_restricted_brackets.js33
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicode_restricted_character_class_escape.js75
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape.js67
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape_alpha.js102
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape_c.js47
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape_u.js78
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape_x.js36
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicode_restricted_incomplete_quantifier.js42
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicode_restricted_octal_escape.js150
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicode_restricted_quantifiable_assertion.js96
-rw-r--r--js/src/tests/test262/built-ins/RegExp/unicode_restricted_quantifier_without_atom.js54
-rw-r--r--js/src/tests/test262/built-ins/RegExp/valid-flags-y.js26
1757 files changed, 124342 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/RegExp/15.10.2.15-6-1.js b/js/src/tests/test262/built-ins/RegExp/15.10.2.15-6-1.js
new file mode 100644
index 0000000000..8ab41f3d98
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/15.10.2.15-6-1.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.10.2.15-6-1
+description: >
+ Pattern - SyntaxError was thrown when one character in CharSet 'A'
+ greater than one character in CharSet 'B' (15.10.2.15
+ CharacterRange step 6)
+---*/
+
+assert.throws(SyntaxError, function() {
+ var regExp = new RegExp("^[z-a]$");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/15.10.2.5-3-1.js b/js/src/tests/test262/built-ins/RegExp/15.10.2.5-3-1.js
new file mode 100644
index 0000000000..ed5e7426b8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/15.10.2.5-3-1.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.10.2.5-3-1
+description: >
+ Term - SyntaxError was thrown when max is finite and less than min
+ (15.10.2.5 step 3)
+---*/
+
+assert.throws(SyntaxError, function() {
+ var regExp = new RegExp("0{2,1}");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/15.10.4.1-1.js b/js/src/tests/test262/built-ins/RegExp/15.10.4.1-1.js
new file mode 100644
index 0000000000..2af70bb48d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/15.10.4.1-1.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.10.4.1-1
+description: >
+ RegExp - no TypeError is thrown when pattern is an object and
+ has a [[RegExpMatcher]] internal slot, and flags is not undefined
+---*/
+
+var regObj = new RegExp();
+var regExpObj = new RegExp(regObj, "g");
+assert(regExpObj.global);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/15.10.4.1-2.js b/js/src/tests/test262/built-ins/RegExp/15.10.4.1-2.js
new file mode 100644
index 0000000000..c8ed03fa98
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/15.10.4.1-2.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.10.4.1-2
+description: >
+ RegExp - the thrown error is SyntaxError instead of RegExpError
+ when the characters of 'P' do not have the syntactic form Pattern
+---*/
+
+assert.throws(SyntaxError, function() {
+ var regExpObj = new RegExp('\\');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/15.10.4.1-3.js b/js/src/tests/test262/built-ins/RegExp/15.10.4.1-3.js
new file mode 100644
index 0000000000..d50ca8bb1d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/15.10.4.1-3.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.10.4.1-3
+description: >
+ RegExp - the thrown error is SyntaxError instead of RegExpError
+ when 'F' contains any character other than 'g', 'i', or 'm'
+---*/
+
+assert.throws(SyntaxError, function() {
+ var regExpObj = new RegExp('abc', 'a');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/15.10.4.1-4.js b/js/src/tests/test262/built-ins/RegExp/15.10.4.1-4.js
new file mode 100644
index 0000000000..3a0ab84321
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/15.10.4.1-4.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.10.4.1-4
+description: RegExp - the SyntaxError is not thrown when flags is 'gim'
+---*/
+
+var regExpObj = new RegExp('abc', 'gim');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/browser.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-flags-u.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-flags-u.js
new file mode 100644
index 0000000000..20d13f9283
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-flags-u.js
@@ -0,0 +1,66 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for digit class escape \d with flags ug
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0030, 0x0039],
+ ],
+});
+
+const re = /\d/ug;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier-flags-u.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier-flags-u.js
new file mode 100644
index 0000000000..54cb356792
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier-flags-u.js
@@ -0,0 +1,66 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for digit class escape \d+ with flags ug
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0030, 0x0039],
+ ],
+});
+
+const re = /\d+/ug;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier.js
new file mode 100644
index 0000000000..aba4e33ca9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier.js
@@ -0,0 +1,66 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for digit class escape \d+ with flags g
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0030, 0x0039],
+ ],
+});
+
+const re = /\d+/g;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape.js
new file mode 100644
index 0000000000..e541572ba5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape.js
@@ -0,0 +1,66 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for digit class escape \d with flags g
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0030, 0x0039],
+ ],
+});
+
+const re = /\d/g;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-flags-u.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-flags-u.js
new file mode 100644
index 0000000000..8ab26f2945
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-flags-u.js
@@ -0,0 +1,67 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for non-digit class escape \D with flags ug
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000000, 0x00002F],
+ [0x00003A, 0x10FFFF],
+ ],
+});
+
+const re = /\D/ug;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier-flags-u.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier-flags-u.js
new file mode 100644
index 0000000000..411d71f4bf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier-flags-u.js
@@ -0,0 +1,67 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for non-digit class escape \D+ with flags ug
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000000, 0x00002F],
+ [0x00003A, 0x10FFFF],
+ ],
+});
+
+const re = /\D+/ug;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier.js
new file mode 100644
index 0000000000..f1a9cd7cc4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier.js
@@ -0,0 +1,67 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for non-digit class escape \D+ with flags g
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000000, 0x00002F],
+ [0x00003A, 0x00FFFF],
+ ],
+});
+
+const re = /\D+/g;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape.js
new file mode 100644
index 0000000000..0c1e438333
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape.js
@@ -0,0 +1,67 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for non-digit class escape \D with flags g
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000000, 0x00002F],
+ [0x00003A, 0x00FFFF],
+ ],
+});
+
+const re = /\D/g;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-flags-u.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-flags-u.js
new file mode 100644
index 0000000000..0a52b4f6a4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-flags-u.js
@@ -0,0 +1,78 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for non-whitespace class escape \S with flags ug
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000008],
+ [0x00000E, 0x00001F],
+ [0x000021, 0x00009F],
+ [0x0000A1, 0x00167F],
+ [0x001681, 0x001FFF],
+ [0x00200B, 0x002027],
+ [0x00202A, 0x00202E],
+ [0x002030, 0x00205E],
+ [0x002060, 0x002FFF],
+ [0x003001, 0x00DBFF],
+ [0x00E000, 0x00FEFE],
+ [0x00FF00, 0x10FFFF],
+ ],
+});
+
+const re = /\S/ug;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier-flags-u.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier-flags-u.js
new file mode 100644
index 0000000000..962888f885
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier-flags-u.js
@@ -0,0 +1,78 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for non-whitespace class escape \S+ with flags ug
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000008],
+ [0x00000E, 0x00001F],
+ [0x000021, 0x00009F],
+ [0x0000A1, 0x00167F],
+ [0x001681, 0x001FFF],
+ [0x00200B, 0x002027],
+ [0x00202A, 0x00202E],
+ [0x002030, 0x00205E],
+ [0x002060, 0x002FFF],
+ [0x003001, 0x00DBFF],
+ [0x00E000, 0x00FEFE],
+ [0x00FF00, 0x10FFFF],
+ ],
+});
+
+const re = /\S+/ug;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier.js
new file mode 100644
index 0000000000..af82575ec4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier.js
@@ -0,0 +1,78 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for non-whitespace class escape \S+ with flags g
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000008],
+ [0x00000E, 0x00001F],
+ [0x000021, 0x00009F],
+ [0x0000A1, 0x00167F],
+ [0x001681, 0x001FFF],
+ [0x00200B, 0x002027],
+ [0x00202A, 0x00202E],
+ [0x002030, 0x00205E],
+ [0x002060, 0x002FFF],
+ [0x003001, 0x00DBFF],
+ [0x00E000, 0x00FEFE],
+ [0x00FF00, 0x00FFFF],
+ ],
+});
+
+const re = /\S+/g;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape.js
new file mode 100644
index 0000000000..785b398eb6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape.js
@@ -0,0 +1,78 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for non-whitespace class escape \S with flags g
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000008],
+ [0x00000E, 0x00001F],
+ [0x000021, 0x00009F],
+ [0x0000A1, 0x00167F],
+ [0x001681, 0x001FFF],
+ [0x00200B, 0x002027],
+ [0x00202A, 0x00202E],
+ [0x002030, 0x00205E],
+ [0x002060, 0x002FFF],
+ [0x003001, 0x00DBFF],
+ [0x00E000, 0x00FEFE],
+ [0x00FF00, 0x00FFFF],
+ ],
+});
+
+const re = /\S/g;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-flags-u.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-flags-u.js
new file mode 100644
index 0000000000..93f822b3db
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-flags-u.js
@@ -0,0 +1,71 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for non-word class escape \W with flags ug
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [0x000060],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00002F],
+ [0x00003A, 0x000040],
+ [0x00005B, 0x00005E],
+ [0x00007B, 0x00DBFF],
+ [0x00E000, 0x10FFFF],
+ ],
+});
+
+const re = /\W/ug;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier-flags-u.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier-flags-u.js
new file mode 100644
index 0000000000..724df67ea3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier-flags-u.js
@@ -0,0 +1,71 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for non-word class escape \W+ with flags ug
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [0x000060],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00002F],
+ [0x00003A, 0x000040],
+ [0x00005B, 0x00005E],
+ [0x00007B, 0x00DBFF],
+ [0x00E000, 0x10FFFF],
+ ],
+});
+
+const re = /\W+/ug;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier.js
new file mode 100644
index 0000000000..2e69ad39ac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier.js
@@ -0,0 +1,71 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for non-word class escape \W+ with flags g
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [0x000060],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00002F],
+ [0x00003A, 0x000040],
+ [0x00005B, 0x00005E],
+ [0x00007B, 0x00DBFF],
+ [0x00E000, 0x00FFFF],
+ ],
+});
+
+const re = /\W+/g;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape.js
new file mode 100644
index 0000000000..a0d191b327
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape.js
@@ -0,0 +1,71 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for non-word class escape \W with flags g
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [0x000060],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00002F],
+ [0x00003A, 0x000040],
+ [0x00005B, 0x00005E],
+ [0x00007B, 0x00DBFF],
+ [0x00E000, 0x00FFFF],
+ ],
+});
+
+const re = /\W/g;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-flags-u.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-flags-u.js
new file mode 100644
index 0000000000..b5fee5f056
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-flags-u.js
@@ -0,0 +1,76 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for whitespace class escape \s with flags ug
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [
+ 0x000020,
+ 0x0000A0,
+ 0x001680,
+ 0x00202F,
+ 0x00205F,
+ 0x003000,
+ 0x00FEFF,
+ ],
+ ranges: [
+ [0x000009, 0x00000D],
+ [0x002000, 0x00200A],
+ [0x002028, 0x002029],
+ ],
+});
+
+const re = /\s/ug;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier-flags-u.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier-flags-u.js
new file mode 100644
index 0000000000..1ec1485039
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier-flags-u.js
@@ -0,0 +1,76 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for whitespace class escape \s+ with flags ug
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [
+ 0x000020,
+ 0x0000A0,
+ 0x001680,
+ 0x00202F,
+ 0x00205F,
+ 0x003000,
+ 0x00FEFF,
+ ],
+ ranges: [
+ [0x000009, 0x00000D],
+ [0x002000, 0x00200A],
+ [0x002028, 0x002029],
+ ],
+});
+
+const re = /\s+/ug;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier.js
new file mode 100644
index 0000000000..c83bb60dd4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier.js
@@ -0,0 +1,76 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for whitespace class escape \s+ with flags g
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [
+ 0x000020,
+ 0x0000A0,
+ 0x001680,
+ 0x00202F,
+ 0x00205F,
+ 0x003000,
+ 0x00FEFF,
+ ],
+ ranges: [
+ [0x000009, 0x00000D],
+ [0x002000, 0x00200A],
+ [0x002028, 0x002029],
+ ],
+});
+
+const re = /\s+/g;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape.js
new file mode 100644
index 0000000000..b63c03686c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape.js
@@ -0,0 +1,76 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for whitespace class escape \s with flags g
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [
+ 0x000020,
+ 0x0000A0,
+ 0x001680,
+ 0x00202F,
+ 0x00205F,
+ 0x003000,
+ 0x00FEFF,
+ ],
+ ranges: [
+ [0x000009, 0x00000D],
+ [0x002000, 0x00200A],
+ [0x002028, 0x002029],
+ ],
+});
+
+const re = /\s/g;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-flags-u.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-flags-u.js
new file mode 100644
index 0000000000..85f990bdd3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-flags-u.js
@@ -0,0 +1,68 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for word class escape \w with flags ug
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [0x00005F],
+ ranges: [
+ [0x000030, 0x000039],
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ ],
+});
+
+const re = /\w/ug;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier-flags-u.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier-flags-u.js
new file mode 100644
index 0000000000..27f667229a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier-flags-u.js
@@ -0,0 +1,68 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for word class escape \w+ with flags ug
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [0x00005F],
+ ranges: [
+ [0x000030, 0x000039],
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ ],
+});
+
+const re = /\w+/ug;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier.js
new file mode 100644
index 0000000000..092e9e6ea7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier.js
@@ -0,0 +1,68 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for word class escape \w+ with flags g
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [0x00005F],
+ ranges: [
+ [0x000030, 0x000039],
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ ],
+});
+
+const re = /\w+/g;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape.js
new file mode 100644
index 0000000000..35bea6ea4b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape.js
@@ -0,0 +1,68 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ Compare range for word class escape \w with flags g
+info: |
+ This is a generated test. Please check out
+ https://github.com/bocoup/test262-regexp-generator
+ for any changes.
+
+ CharacterClassEscape[U] ::
+ d
+ D
+ s
+ S
+ w
+ W
+
+ 21.2.2.12 CharacterClassEscape
+
+ The production CharacterClassEscape :: d evaluates as follows:
+ Return the ten-element set of characters containing the characters 0 through 9 inclusive.
+ The production CharacterClassEscape :: D evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: d.
+ The production CharacterClassEscape :: s evaluates as follows:
+ Return the set of characters containing the characters that are on the right-hand side of
+ the WhiteSpace or LineTerminator productions.
+ The production CharacterClassEscape :: S evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: s.
+ The production CharacterClassEscape :: w evaluates as follows:
+ Return the set of all characters returned by WordCharacters().
+ The production CharacterClassEscape :: W evaluates as follows:
+ Return the set of all characters not included in the set returned by CharacterClassEscape :: w.
+features: [String.fromCodePoint]
+includes: [regExpUtils.js]
+---*/
+
+const str = buildString({
+ loneCodePoints: [0x00005F],
+ ranges: [
+ [0x000030, 0x000039],
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ ],
+});
+
+const re = /\w/g;
+
+const errors = [];
+
+if (!re.test(str)) {
+ // Error, let's find out where
+ for (const char of str) {
+ if (!re.test(char)) {
+ errors.push('0x' + char.codePointAt(0).toString(16));
+ }
+ }
+}
+
+assert.sameValue(
+ errors.length,
+ 0,
+ 'Expected matching code points, but received: ' + errors.join(',')
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/shell.js b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/shell.js
new file mode 100644
index 0000000000..591d3924c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/CharacterClassEscapes/shell.js
@@ -0,0 +1,115 @@
+// GENERATED, DO NOT EDIT
+// file: regExpUtils.js
+// Copyright (C) 2017 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+ Collection of functions used to assert the correctness of RegExp objects.
+defines: [buildString, testPropertyEscapes, testPropertyOfStrings, testExtendedCharacterClass, matchValidator]
+---*/
+
+function buildString(args) {
+ // Use member expressions rather than destructuring `args` for improved
+ // compatibility with engines that only implement assignment patterns
+ // partially or not at all.
+ const loneCodePoints = args.loneCodePoints;
+ const ranges = args.ranges;
+ const CHUNK_SIZE = 10000;
+ let result = Reflect.apply(String.fromCodePoint, null, loneCodePoints);
+ for (let i = 0; i < ranges.length; i++) {
+ const range = ranges[i];
+ const start = range[0];
+ const end = range[1];
+ const codePoints = [];
+ for (let length = 0, codePoint = start; codePoint <= end; codePoint++) {
+ codePoints[length++] = codePoint;
+ if (length === CHUNK_SIZE) {
+ result += Reflect.apply(String.fromCodePoint, null, codePoints);
+ codePoints.length = length = 0;
+ }
+ }
+ result += Reflect.apply(String.fromCodePoint, null, codePoints);
+ }
+ return result;
+}
+
+function printCodePoint(codePoint) {
+ const hex = codePoint
+ .toString(16)
+ .toUpperCase()
+ .padStart(6, "0");
+ return `U+${hex}`;
+}
+
+function printStringCodePoints(string) {
+ const buf = [];
+ for (const symbol of string) {
+ const formatted = printCodePoint(symbol.codePointAt(0));
+ buf.push(formatted);
+ }
+ return buf.join(' ');
+}
+
+function testPropertyEscapes(regExp, string, expression) {
+ if (!regExp.test(string)) {
+ for (const symbol of string) {
+ const formatted = printCodePoint(symbol.codePointAt(0));
+ assert(
+ regExp.test(symbol),
+ `\`${ expression }\` should match ${ formatted } (\`${ symbol }\`)`
+ );
+ }
+ }
+}
+
+function testPropertyOfStrings(args) {
+ // Use member expressions rather than destructuring `args` for improved
+ // compatibility with engines that only implement assignment patterns
+ // partially or not at all.
+ const regExp = args.regExp;
+ const expression = args.expression;
+ const matchStrings = args.matchStrings;
+ const nonMatchStrings = args.nonMatchStrings;
+ const allStrings = matchStrings.join('');
+ if (!regExp.test(allStrings)) {
+ for (const string of matchStrings) {
+ assert(
+ regExp.test(string),
+ `\`${ expression }\` should match ${ string } (${ printStringCodePoints(string) })`
+ );
+ }
+ }
+
+ if (!nonMatchStrings) return;
+
+ const allNonMatchStrings = nonMatchStrings.join('');
+ if (regExp.test(allNonMatchStrings)) {
+ for (const string of nonMatchStrings) {
+ assert(
+ !regExp.test(string),
+ `\`${ expression }\` should not match ${ string } (${ printStringCodePoints(string) })`
+ );
+ }
+ }
+}
+
+// The exact same logic can be used to test extended character classes
+// as enabled through the RegExp `v` flag. This is useful to test not
+// just standalone properties of strings, but also string literals, and
+// set operations.
+const testExtendedCharacterClass = testPropertyOfStrings;
+
+// Returns a function that validates a RegExp match result.
+//
+// Example:
+//
+// var validate = matchValidator(['b'], 1, 'abc');
+// validate(/b/.exec('abc'));
+//
+function matchValidator(expectedEntries, expectedIndex, expectedInput) {
+ return function(match) {
+ assert.compareArray(match, expectedEntries, 'Match entries');
+ assert.sameValue(match.index, expectedIndex, 'Match index');
+ assert.sameValue(match.input, expectedInput, 'Match input');
+ }
+}
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T1.js
new file mode 100644
index 0000000000..e2f3444095
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp syntax errors must be caught when matcher(s) compiles
+es5id: 15.10.1_A1_T1
+description: Tested RegExp is "a**"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("a**") throw SyntaxError. Actual: ' + (new RegExp("a**")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T10.js b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T10.js
new file mode 100644
index 0000000000..646a0ef2d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T10.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp syntax errors must be caught when matcher(s) compiles
+es5id: 15.10.1_A1_T10
+description: Tested RegExp is "++a"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("++a") throw SyntaxError. Actual: ' + (new RegExp("++a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T11.js b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T11.js
new file mode 100644
index 0000000000..af48741fb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T11.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp syntax errors must be caught when matcher(s) compiles
+es5id: 15.10.1_A1_T11
+description: Tested RegExp is "?a"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("?a") throw SyntaxError. Actual: ' + (new RegExp("?a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T12.js b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T12.js
new file mode 100644
index 0000000000..2ed3c6942e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T12.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp syntax errors must be caught when matcher(s) compiles
+es5id: 15.10.1_A1_T12
+description: Tested RegExp is "??a"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("??a") throw SyntaxError. Actual: ' + (new RegExp("??a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T13.js b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T13.js
new file mode 100644
index 0000000000..5d2177b2fa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T13.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp syntax errors must be caught when matcher(s) compiles
+es5id: 15.10.1_A1_T13
+description: Tested RegExp is "x{1}{1,}"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("x{1}{1,}") throw SyntaxError. Actual: ' + (new RegExp("x{1}{1,}")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T14.js b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T14.js
new file mode 100644
index 0000000000..ca498b4c87
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T14.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp syntax errors must be caught when matcher(s) compiles
+es5id: 15.10.1_A1_T14
+description: Tested RegExp is "x{1,2}{1}"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("x{1,2}{1}") throw SyntaxError. Actual: ' + (new RegExp("x{1,2}{1}")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T15.js b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T15.js
new file mode 100644
index 0000000000..8146357734
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T15.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp syntax errors must be caught when matcher(s) compiles
+es5id: 15.10.1_A1_T15
+description: Tested RegExp is "x{1,}{1}"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("x{1,}{1}") throw SyntaxError. Actual: ' + (new RegExp("x{1,}{1}")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T16.js b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T16.js
new file mode 100644
index 0000000000..2c0e2b2623
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T16.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp syntax errors must be caught when matcher(s) compiles
+es5id: 15.10.1_A1_T16
+description: Tested RegExp is "x{0,1}{1,}"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("x{0,1}{1,}") throw SyntaxError. Actual: ' + (new RegExp("x{0,1}{1,}")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T2.js
new file mode 100644
index 0000000000..579e63f433
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp syntax errors must be caught when matcher(s) compiles
+es5id: 15.10.1_A1_T2
+description: Tested RegExp is "a***"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("a***") throw SyntaxError. Actual: ' + (new RegExp("a***")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T3.js
new file mode 100644
index 0000000000..a4d8955adb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp syntax errors must be caught when matcher(s) compiles
+es5id: 15.10.1_A1_T3
+description: Tested RegExp is "a++"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("a++") throw SyntaxError. Actual: ' + (new RegExp("a++")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T4.js
new file mode 100644
index 0000000000..6032464c56
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T4.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp syntax errors must be caught when matcher(s) compiles
+es5id: 15.10.1_A1_T4
+description: Tested RegExp is "a+++"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("a+++") throw SyntaxError. Actual: ' + (new RegExp("a+++")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T5.js
new file mode 100644
index 0000000000..ffe44746ba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T5.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp syntax errors must be caught when matcher(s) compiles
+es5id: 15.10.1_A1_T5
+description: Tested RegExp is "a???"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("a???") throw SyntaxError. Actual: ' + (new RegExp("a???")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T6.js
new file mode 100644
index 0000000000..d5f8dc4feb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T6.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp syntax errors must be caught when matcher(s) compiles
+es5id: 15.10.1_A1_T6
+description: Tested RegExp is "a????"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("a????") throw SyntaxError. Actual: ' + (new RegExp("a????")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T7.js
new file mode 100644
index 0000000000..25a7541cd4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T7.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp syntax errors must be caught when matcher(s) compiles
+es5id: 15.10.1_A1_T7
+description: Tested RegExp is "*a"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("*a") throw SyntaxError. Actual: ' + (new RegExp("*a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T8.js
new file mode 100644
index 0000000000..34897392e5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T8.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp syntax errors must be caught when matcher(s) compiles
+es5id: 15.10.1_A1_T8
+description: Tested RegExp is "**a"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("**a") throw SyntaxError. Actual: ' + (new RegExp("**a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T9.js b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T9.js
new file mode 100644
index 0000000000..f4b6e47fd8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.1_A1_T9.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp syntax errors must be caught when matcher(s) compiles
+es5id: 15.10.1_A1_T9
+description: Tested RegExp is "+a"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("+a") throw SyntaxError. Actual: ' + (new RegExp("+a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.1_T1.js
new file mode 100644
index 0000000000..18e2455db7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.1_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterEscape :: t evaluates by returning
+ the character \u0009
+es5id: 15.10.2.10_A1.1_T1
+description: Use \t in RegExp and \u0009 in tested string
+---*/
+
+var arr = /\t/.exec("\u0009");
+if ((arr === null) || (arr[0] !== "\u0009")) {
+ throw new Test262Error('#1: var arr = /\\t/.exec("\\u0009"); arr[0] === "\\u0009". Actual. ' + (arr && arr[0]));
+}
+
+var arr = /\t\t/.exec("a\u0009\u0009b");
+if ((arr === null) || (arr[0] !== "\u0009\u0009")) {
+ throw new Test262Error('#2: var arr = /\\t\\t/.exec("a\\u0009\\u0009b"); arr[0] === "\\u0009\\u0009". Actual. ' + (arr && arr[0]));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.2_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.2_T1.js
new file mode 100644
index 0000000000..0ca647f8ed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.2_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterEscape :: n evaluates by returning
+ the character \u000A
+es5id: 15.10.2.10_A1.2_T1
+description: Use \n in RegExp and \u000A in tested string
+---*/
+
+var arr = /\n/.exec("\u000A");
+if ((arr === null) || (arr[0] !== "\u000A")) {
+ throw new Test262Error('#1: var arr = /\\n/.exec("\\u000A"); arr[0] === "\\u000A". Actual. ' + (arr && arr[0]));
+}
+
+var arr = /\n\n/.exec("a\u000A\u000Ab");
+if ((arr === null) || (arr[0] !== "\u000A\u000A")) {
+ throw new Test262Error('#2: var arr = /\\n\\n/.exec("a\\u000A\\u000Ab"); arr[0] === "\\u000A\\u000A". Actual. ' + (arr && arr[0]));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.3_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.3_T1.js
new file mode 100644
index 0000000000..f27ebb19ef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.3_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterEscape :: v evaluates by returning
+ the character \u000B
+es5id: 15.10.2.10_A1.3_T1
+description: Use \v in RegExp and \u000B in tested string
+---*/
+
+var arr = /\v/.exec("\u000B");
+if ((arr === null) || (arr[0] !== "\u000B")) {
+ throw new Test262Error('#1: var arr = /\\v/.exec("\\u000B"); arr[0] === "\\u000B". Actual. ' + (arr && arr[0]));
+}
+
+var arr = /\v\v/.exec("a\u000B\u000Bb");
+if ((arr === null) || (arr[0] !== "\u000B\u000B")) {
+ throw new Test262Error('#2: var arr = /\\v\\v/.exec("a\\u000B\\u000Bb"); arr[0] === "\\u000B\\u000B". Actual. ' + (arr && arr[0]));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.4_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.4_T1.js
new file mode 100644
index 0000000000..27d31424ec
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.4_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterEscape :: f evaluates by returning
+ the character \u000C
+es5id: 15.10.2.10_A1.4_T1
+description: Use \f in RegExp and \u000C in tested string
+---*/
+
+var arr = /\f/.exec("\u000C");
+if ((arr === null) || (arr[0] !== "\u000C")) {
+ throw new Test262Error('#1: var arr = /\\f/.exec("\\u000C"); arr[0] === "\\u000C". Actual. ' + (arr && arr[0]));
+}
+
+var arr = /\f\f/.exec("a\u000C\u000Cb");
+if ((arr === null) || (arr[0] !== "\u000C\u000C")) {
+ throw new Test262Error('#2: var arr = /\\f\\f/.exec("a\\u000C\\u000Cb"); arr[0] === "\\u000C\\u000C". Actual. ' + (arr && arr[0]));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.5_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.5_T1.js
new file mode 100644
index 0000000000..86658679d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A1.5_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterEscape :: r evaluates by returning
+ the character \u000D
+es5id: 15.10.2.10_A1.5_T1
+description: Use \r in RegExp and \u000D in tested string
+---*/
+
+var arr = /\r/.exec("\u000D");
+if ((arr === null) || (arr[0] !== "\u000D")) {
+ throw new Test262Error('#1: var arr = /\\r/.exec("\\u000D"); arr[0] === "\\u000D". Actual. ' + (arr && arr[0]));
+}
+
+var arr = /\r\r/.exec("a\u000D\u000Db");
+if ((arr === null) || (arr[0] !== "\u000D\u000D")) {
+ throw new Test262Error('#2: var arr = /\\r\\r/.exec("a\\u000D\\u000Db"); arr[0] === "\\u000D\\u000D". Actual. ' + (arr && arr[0]));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A2.1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A2.1_T1.js
new file mode 100644
index 0000000000..5ccba14719
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A2.1_T1.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "CharacterEscape :: c ControlLetter"
+es5id: 15.10.2.10_A2.1_T1
+description: "ControlLetter :: A - Z"
+---*/
+
+var result = true;
+for (var alpha = 0x0041; alpha <= 0x005A; alpha++) {
+ var str = String.fromCharCode(alpha % 32);
+ var arr = (new RegExp("\\c" + String.fromCharCode(alpha))).exec(str);
+ if ((arr === null) || (arr[0] !== str)) {
+ result = false;
+ }
+}
+
+assert.sameValue(result, true, 'The value of result is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A2.1_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A2.1_T2.js
new file mode 100644
index 0000000000..a2506137ba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A2.1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "CharacterEscape :: c ControlLetter"
+es5id: 15.10.2.10_A2.1_T2
+description: "ControlLetter :: a - z"
+---*/
+
+var result = true;
+for (var alpha = 0x0061; alpha <= 0x007A; alpha++) {
+ var str = String.fromCharCode(alpha % 32);
+ var arr = (new RegExp("\\c" + String.fromCharCode(alpha))).exec(str);
+ if ((arr === null) || (arr[0] !== str)) {
+ result = false;
+ }
+}
+
+assert.sameValue(result, true, 'The value of result is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A3.1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A3.1_T1.js
new file mode 100644
index 0000000000..005de2849d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A3.1_T1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "CharacterEscape :: HexEscapeSequence :: x HexDigit HexDigit"
+es5id: 15.10.2.10_A3.1_T1
+description: Tested string include equal unicode symbols
+---*/
+
+var arr = /\x00/.exec("\u0000");
+if ((arr === null) || (arr[0] !== "\u0000")) {
+ throw new Test262Error('#0: var arr = /\\x00/.exec(\\u0000); arr[0] === "\\u0000". Actual. ' + (arr && arr[0]));
+}
+
+var arr = /\x01/.exec("\u0001");
+if ((arr === null) || (arr[0] !== "\u0001")) {
+ throw new Test262Error('#1: var arr = /\\x01/.exec(\\u0001); arr[0] === "\\u0001". Actual. ' + (arr && arr[0]));
+}
+
+var arr = /\x0A/.exec("\u000A");
+if ((arr === null) || (arr[0] !== "\u000A")) {
+ throw new Test262Error('#2: var arr = /\\x0A/.exec(\\u000A); arr[0] === "\\u000A". Actual. ' + (arr && arr[0]));
+}
+
+var arr = /\xFF/.exec("\u00FF");
+if ((arr === null) || (arr[0] !== "\u00FF")) {
+ throw new Test262Error('#3: var arr = /\\xFF/.exec(\\u00FF); arr[0] === "\\u00FF". Actual. ' + (arr && arr[0]));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A3.1_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A3.1_T2.js
new file mode 100644
index 0000000000..11b7ff7e40
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A3.1_T2.js
@@ -0,0 +1,34 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "CharacterEscape :: HexEscapeSequence :: x HexDigit HexDigit"
+es5id: 15.10.2.10_A3.1_T2
+description: Checking ENGLISH CAPITAL ALPHABET and english small alphabet
+---*/
+
+var hex = ["\\x41", "\\x42", "\\x43", "\\x44", "\\x45", "\\x46", "\\x47", "\\x48", "\\x49", "\\x4A", "\\x4B", "\\x4C", "\\x4D", "\\x4E", "\\x4F", "\\x50", "\\x51", "\\x52", "\\x53", "\\x54", "\\x55", "\\x56", "\\x57", "\\x58", "\\x59", "\\x5A"];
+var character = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
+var result = true;
+for (var index = 0; index < hex.length; index++) {
+ var arr = (new RegExp(hex[index])).exec(character[index]);
+ if ((arr === null) || (arr[0] !== character[index])) {
+ result = false;
+ }
+}
+
+assert.sameValue(result, true, 'The value of result is expected to be true');
+
+hex = ["\\x61", "\\x62", "\\x63", "\\x64", "\\x65", "\\x66", "\\x67", "\\x68", "\\x69", "\\x6A", "\\x6B", "\\x6C", "\\x6D", "\\x6E", "\\x6F", "\\x70", "\\x71", "\\x72", "\\x73", "\\x74", "\\x75", "\\x76", "\\x77", "\\x78", "\\x79", "\\x7A"];
+character = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
+var result = true;
+for (index = 0; index < hex.length; index++) {
+ arr = (new RegExp(hex[index])).exec(character[index]);
+ if ((arr === null) || (arr[0] !== character[index])) {
+ result = false;
+ }
+}
+
+assert.sameValue(result, true, 'The value of result is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A4.1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A4.1_T1.js
new file mode 100644
index 0000000000..e5c056a859
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A4.1_T1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ CharacterEscape :: UnicodeEscapeSequence :: u HexDigit HexDigit HexDigit
+ HexDigit
+es5id: 15.10.2.10_A4.1_T1
+description: RegExp and tested string include uncode symbols
+---*/
+
+var arr = /\u0000/.exec("\u0000");
+if ((arr === null) || (arr[0] !== "\u0000")) {
+ throw new Test262Error('#0: var arr = /\\u0000/.exec(\\u0000); arr[0] === "\\u0000". Actual. ' + (arr && arr[0]));
+}
+
+var arr = /\u0001/.exec("\u0001");
+if ((arr === null) || (arr[0] !== "\u0001")) {
+ throw new Test262Error('#1: var arr = /\\u0001/.exec(\\u0001); arr[0] === "\\u0001". Actual. ' + (arr && arr[0]));
+}
+
+var arr = /\u000A/.exec("\u000A");
+if ((arr === null) || (arr[0] !== "\u000A")) {
+ throw new Test262Error('#2: var arr = /\\u000A/.exec(\\u000A); arr[0] === "\\u000A". Actual. ' + (arr && arr[0]));
+}
+
+var arr = /\u00FF/.exec("\u00FF");
+if ((arr === null) || (arr[0] !== "\u00FF")) {
+ throw new Test262Error('#3: var arr = /\\u00FF/.exec(\\u00FF); arr[0] === "\\u00FF". Actual. ' + (arr && arr[0]));
+}
+
+var arr = /\u0FFF/.exec("\u0FFF");
+if ((arr === null) || (arr[0] !== "\u0FFF")) {
+ throw new Test262Error('#4: var arr = /\\u0FFF/.exec(\\u0FFF); arr[0] === "\\u0FFF". Actual. ' + (arr && arr[0]));
+}
+
+var arr = /\uFFFF/.exec("\uFFFF");
+if ((arr === null) || (arr[0] !== "\uFFFF")) {
+ throw new Test262Error('#5: var arr = /\\uFFFF/.exec(\\uFFFF); arr[0] === "\\uFFFF". Actual. ' + (arr && arr[0]));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A4.1_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A4.1_T2.js
new file mode 100644
index 0000000000..7cb62b2d52
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A4.1_T2.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ CharacterEscape :: UnicodeEscapeSequence :: u HexDigit HexDigit HexDigit
+ HexDigit
+es5id: 15.10.2.10_A4.1_T2
+description: >
+ Tested string include ENGLISH CAPITAL ALPHABET and english small
+ alphabet
+---*/
+
+var hex = ["\\u0041", "\\u0042", "\\u0043", "\\u0044", "\\u0045", "\\u0046", "\\u0047", "\\u0048", "\\u0049", "\\u004A", "\\u004B", "\\u004C", "\\u004D", "\\u004E", "\\u004F", "\\u0050", "\\u0051", "\\u0052", "\\u0053", "\\u0054", "\\u0055", "\\u0056", "\\u0057", "\\u0058", "\\u0059", "\\u005A"];
+var character = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
+var result = true;
+for (var index = 0; index < hex.length; index++) {
+ var arr = (new RegExp(hex[index])).exec(character[index]);
+ if ((arr === null) || (arr[0] !== character[index])) {
+ result = false;
+ }
+}
+
+assert.sameValue(result, true, 'The value of result is expected to be true');
+
+hex = ["\\u0061", "\\u0062", "\\u0063", "\\u0064", "\\u0065", "\\u0066", "\\u0067", "\\u0068", "\\u0069", "\\u006A", "\\u006B", "\\u006C", "\\u006D", "\\u006E", "\\u006F", "\\u0070", "\\u0071", "\\u0072", "\\u0073", "\\u0074", "\\u0075", "\\u0076", "\\u0077", "\\u0078", "\\u0079", "\\u007A"];
+character = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
+var result = true;
+for (index = 0; index < hex.length; index++) {
+ arr = (new RegExp(hex[index])).exec(character[index]);
+ if ((arr === null) || (arr[0] !== character[index])) {
+ result = false;
+ }
+}
+
+assert.sameValue(result, true, 'The value of result is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A4.1_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A4.1_T3.js
new file mode 100644
index 0000000000..e10f55ec27
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A4.1_T3.js
@@ -0,0 +1,38 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ CharacterEscape :: UnicodeEscapeSequence :: u HexDigit HexDigit HexDigit
+ HexDigit
+es5id: 15.10.2.10_A4.1_T3
+description: >
+ Tested string include RUSSIAN CAPITAL ALPHABET and russian small
+ alphabet in unicode notation
+---*/
+
+var hex = ["\\u0410", "\\u0411", "\\u0412", "\\u0413", "\\u0414", "\\u0415", "\\u0416", "\\u0417", "\\u0418", "\\u0419", "\\u041A", "\\u041B", "\\u041C", "\\u041D", "\\u041E", "\\u041F", "\\u0420", "\\u0421", "\\u0422", "\\u0423", "\\u0424", "\\u0425", "\\u0426", "\\u0427", "\\u0428", "\\u0429", "\\u042A", "\\u042B", "\\u042C", "\\u042D", "\\u042E", "\\u042F", "\\u0401"];
+var character = ["\u0410", "\u0411", "\u0412", "\u0413", "\u0414", "\u0415", "\u0416", "\u0417", "\u0418", "\u0419", "\u041A", "\u041B", "\u041C", "\u041D", "\u041E", "\u041F", "\u0420", "\u0421", "\u0422", "\u0423", "\u0424", "\u0425", "\u0426", "\u0427", "\u0428", "\u0429", "\u042A", "\u042B", "\u042C", "\u042D", "\u042E", "\u042F", "\u0401"];
+var result = true;
+for (var index = 0; index < hex.length; index++) {
+ var arr = (new RegExp(hex[index])).exec(character[index]);
+ if ((arr === null) || (arr[0] !== character[index])) {
+ result = false;
+ }
+}
+
+assert.sameValue(result, true, 'The value of result is expected to be true');
+
+hex = ["\\u0430", "\\u0431", "\\u0432", "\\u0433", "\\u0434", "\\u0435", "\\u0436", "\\u0437", "\\u0438", "\\u0439", "\\u043A", "\\u043B", "\\u043C", "\\u043D", "\\u043E", "\\u043F", "\\u0440", "\\u0441", "\\u0442", "\\u0443", "\\u0444", "\\u0445", "\\u0446", "\\u0447", "\\u0448", "\\u0449", "\\u044A", "\\u044B", "\\u044C", "\\u044D", "\\u044E", "\\u044F", "\\u0451"];
+character = ["\u0430", "\u0431", "\u0432", "\u0433", "\u0434", "\u0435", "\u0436", "\u0437", "\u0438", "\u0439", "\u043A", "\u043B", "\u043C", "\u043D", "\u043E", "\u043F", "\u0440", "\u0441", "\u0442", "\u0443", "\u0444", "\u0445", "\u0446", "\u0447", "\u0448", "\u0449", "\u044A", "\u044B", "\u044C", "\u044D", "\u044E", "\u044F", "\u0451"];
+var result = true;
+for (index = 0; index < hex.length; index++) {
+ arr = (new RegExp(hex[index])).exec(character[index]);
+ if ((arr === null) || (arr[0] !== character[index])) {
+ result = false;
+ }
+}
+
+assert.sameValue(result, true, 'The value of result is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A5.1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A5.1_T1.js
new file mode 100644
index 0000000000..fdd568379c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.10_A5.1_T1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ CharacterEscape :: IdentityEscapeSequence :: SourceCharacter but not
+ IdentifierPart
+es5id: 15.10.2.10_A5.1_T1
+description: "Tested string is \"~`!@#$%^&*()-+={[}]|\\\\:;'<,>./?\" + '\"'"
+---*/
+
+var non_ident = "~`!@#$%^&*()-+={[}]|\\:;'<,>./?" + '"';
+for (var k = 0; k < non_ident.length; ++k) {
+ var arr = new RegExp("\\" + non_ident[k], "g").exec(non_ident);
+ assert.notSameValue(arr, null, "No match for character: " + non_ident[k]);
+ assert.sameValue(arr[0], non_ident[k]);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T1.js
new file mode 100644
index 0000000000..d9cdd5f2ce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalEscape :: DecimalIntegerLiteral [lookahead not in DecimalDigit]"
+es5id: 15.10.2.11_A1_T1
+description: >
+ DecimalEscape :: 0. If i is zero, return the EscapeValue
+ consisting of a <NUL> character (Unicodevalue0000)
+---*/
+
+var arr = /\0/.exec("\u0000");
+if ((arr === null) || (arr[0] !== "\u0000")) {
+ throw new Test262Error('#1: var arr = /\\0/.exec(\\u0000); arr[0] === "\\u0000". Actual. ' + (arr && arr[0]));
+}
+
+var arr = (new RegExp("\\0")).exec("\u0000");
+if ((arr === null) || (arr[0] !== "\u0000")) {
+ throw new Test262Error('#2: var arr = (new RegExp("\\0")).exec(\\u0000); arr[0] === "\\u0000". Actual. ' + (arr && arr[0]));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T4.js
new file mode 100644
index 0000000000..107cf8b119
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalEscape :: DecimalIntegerLiteral [lookahead not in DecimalDigit]"
+es5id: 15.10.2.11_A1_T4
+description: DecimalIntegerLiteral is not 0
+---*/
+
+var arr = /(A)\1/.exec("AA");
+
+if ((arr === null) || (arr[0] !== "AA")) {
+ throw new Test262Error('#1: var arr = (/(A)\\1/.exec("AA")); arr[0] === "AA". Actual. ' + (arr && arr[0]));
+}
+
+if ((arr === null) || (arr[1] !== "A")) {
+ throw new Test262Error('#2: var arr = (/(A)\\1/.exec("AA")); arr[1] === "A". Actual. ' + (arr && arr[1]));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T5.js
new file mode 100644
index 0000000000..b1565c418c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T5.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalEscape :: DecimalIntegerLiteral [lookahead not in DecimalDigit]"
+es5id: 15.10.2.11_A1_T5
+description: DecimalIntegerLiteral is not 0
+---*/
+
+var arr = /\1(A)/.exec("AA");
+
+if ((arr === null) || (arr[0] !== "A")) {
+ throw new Test262Error('#1: var arr = (/\\1(A)/.exec("AA")); arr[0] === "A". Actual. ' + (arr && arr[0]));
+}
+
+if ((arr === null) || (arr[1] !== "A")) {
+ throw new Test262Error('#2: var arr = (/\\1(A)/.exec("AA")); arr[1] === "A". Actual. ' + (arr && arr[1]));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T6.js
new file mode 100644
index 0000000000..7c42d31a1d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T6.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalEscape :: DecimalIntegerLiteral [lookahead not in DecimalDigit]"
+es5id: 15.10.2.11_A1_T6
+description: DecimalIntegerLiteral is not 0
+---*/
+
+var arr = /(A)\1(B)\2/.exec("AABB");
+
+if ((arr === null) || (arr[0] !== "AABB")) {
+ throw new Test262Error('#1: var arr = /(A)\\1(B)\\2/.exec("AABB"); arr[0] === "AABB". Actual. ' + (arr && arr[0]));
+}
+
+if ((arr === null) || (arr[1] !== "A")) {
+ throw new Test262Error('#2: var arr = /(A)\\1(B)\\2/.exec("AABB"); arr[1] === "A". Actual. ' + (arr && arr[1]));
+}
+
+if ((arr === null) || (arr[2] !== "B")) {
+ throw new Test262Error('#3: var arr = /(A)\\1(B)\\2/.exec("AABB"); arr[2] === "B". Actual. ' + (arr && arr[2]));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T7.js
new file mode 100644
index 0000000000..7e1f5d9dd5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T7.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalEscape :: DecimalIntegerLiteral [lookahead not in DecimalDigit]"
+es5id: 15.10.2.11_A1_T7
+description: DecimalIntegerLiteral is not 0
+---*/
+
+var arr = /\1(A)(B)\2/.exec("ABB");
+
+if ((arr === null) || (arr[0] !== "ABB")) {
+ throw new Test262Error('#1: var arr = /\\1(A)(B)\\2/.exec("ABB"); arr[0] === "ABB". Actual. ' + (arr && arr[0]));
+}
+
+if ((arr === null) || (arr[1] !== "A")) {
+ throw new Test262Error('#2: var arr = /\\1(A)(B)\\2/.exec("ABB"); arr[1] === "A". Actual. ' + (arr && arr[1]));
+}
+
+if ((arr === null) || (arr[2] !== "B")) {
+ throw new Test262Error('#3: var arr = /\\1(A)(B)\\2/.exec("ABB"); arr[2] === "B". Actual. ' + (arr && arr[2]));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T8.js
new file mode 100644
index 0000000000..51b516c8a1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T8.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalEscape :: DecimalIntegerLiteral [lookahead not in DecimalDigit]"
+es5id: 15.10.2.11_A1_T8
+description: DecimalIntegerLiteral is not 0
+---*/
+
+var arr = /((((((((((A))))))))))\1\2\3\4\5\6\7\8\9\10/.exec("AAAAAAAAAAA");
+
+if ((arr === null) || (arr[0] !== "AAAAAAAAAAA")) {
+ throw new Test262Error('#1: var arr = /((((((((((A))))))))))\\1\\2\\3\\4\\5\\6\\7\\8\\9\\10/.exec("AAAAAAAAAAA"); arr[0] === "AAAAAAAAAAA". Actual. ' + (arr && arr[0]));
+}
+
+for (var i = 1; i <= 10; i++) {
+ if ((arr === null) || (arr[i] !== "A")) {
+ throw new Test262Error('#2: var arr = /((((((((((A))))))))))\\1\\2\\3\\4\\5\\6\\7\\8\\9\\10/.exec("AAAAAAAAAAA"); arr[' + i + '] === "A". Actual. ' + (arr && arr[i]));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T9.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T9.js
new file mode 100644
index 0000000000..0ed36cd7e9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.11_A1_T9.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: "DecimalEscape :: DecimalIntegerLiteral [lookahead not in DecimalDigit]"
+es5id: 15.10.2.11_A1_T9
+description: DecimalIntegerLiteral is not 0
+---*/
+
+var arr = /((((((((((A))))))))))\10\9\8\7\6\5\4\3\2\1/.exec("AAAAAAAAAAA");
+
+if ((arr === null) || (arr[0] !== "AAAAAAAAAAA")) {
+ throw new Test262Error('#1: var arr = /((((((((((A))))))))))\\10\\9\\8\\7\\6\\5\\4\\3\\2\\1/.exec("AAAAAAAAAAA"); arr[0] === "AAAAAAAAAAA". Actual. ' + (arr && arr[0]));
+}
+
+for (var i = 1; i <= 10; i++) {
+ if ((arr === null) || (arr[i] !== "A")) {
+ throw new Test262Error('#2: var arr = /((((((((((A))))))))))\\10\\9\\8\\7\\6\\5\\4\\3\\2\\1/.exec("AAAAAAAAAAA"); arr[' + i + '] === "A". Actual. ' + (arr && arr[i]));
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.12_A3_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.12_A3_T5.js
new file mode 100644
index 0000000000..d4dcdc3f04
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.12_A3_T5.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClassEscape :: w evaluates by returning the set of characters containing the sixty-three characters:
+ a - z, A - Z, 0 - 9, _
+es5id: 15.10.2.12_A3_T5
+description: non-w
+---*/
+
+var non_w = "\f\n\r\t\v~`!@#$%^&*()-+={[}]|\\:;'<,>./? " + '"';
+
+assert.sameValue(
+ /\w/.exec(non_w),
+ null,
+ '/w/.exec(""fnrtv~`!@#$%^&*()-+={[}]|:;\'<,>./? " + \'"\'") must return null'
+);
+
+var non_W = "_0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+var regexp_w = /\w/g;
+var k = 0;
+while (regexp_w.exec(non_W) !== null) {
+ k++;
+}
+
+assert.sameValue(non_W.length, k, 'The value of non_W.length is expected to equal the value of k');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.12_A4_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.12_A4_T5.js
new file mode 100644
index 0000000000..f3bcc0c6d0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.12_A4_T5.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClassEscape :: W evaluates by returning the set of all characters not
+ included in the set returned by CharacterClassEscape :: w
+es5id: 15.10.2.12_A4_T5
+description: non-w
+---*/
+
+var non_w = "\f\n\r\t\v~`!@#$%^&*()-+={[}]|\\:;'<,>./? " + '"';
+var regexp_W = /\W/g;
+var k = 0;
+while (regexp_W.exec(non_w) !== null) {
+ k++;
+}
+
+assert.sameValue(non_w.length, k, 'The value of non_w.length is expected to equal the value of k');
+
+var non_W = "_0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+assert.sameValue(
+ /\W/.exec(non_W),
+ null,
+ '/W/.exec(""_0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"") must return null'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T1.js
new file mode 100644
index 0000000000..9b535a2e3f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T1.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ]
+ evaluates by evaluating ClassRanges to obtain a CharSet and returning
+ that CharSet and the boolean false
+es5id: 15.10.2.13_A1_T1
+description: Execute /[]a/.test("\0a\0a") and check results
+---*/
+
+var __executed = /[]a/.test("\0a\0a");
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T10.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T10.js
new file mode 100644
index 0000000000..aa816075ad
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T10.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ]
+ evaluates by evaluating ClassRanges to obtain a CharSet and returning
+ that CharSet and the boolean false
+es5id: 15.10.2.13_A1_T10
+description: Execute /[a-c\d]+/.exec("\n\n\abc324234\n") and check results
+---*/
+
+var __executed = /[a-c\d]+/.exec("\n\n\abc324234\n");
+
+var __expected = ["abc324234"];
+__expected.index = 2;
+__expected.input = "\n\n\abc324234\n";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T11.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T11.js
new file mode 100644
index 0000000000..1c490e122e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T11.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ]
+ evaluates by evaluating ClassRanges to obtain a CharSet and returning
+ that CharSet and the boolean false
+es5id: 15.10.2.13_A1_T11
+description: Execute /ab[.]?c/.exec("abc") and check results
+---*/
+
+var __executed = /ab[.]?c/.exec("abc");
+
+var __expected = ["abc"];
+__expected.index = 0;
+__expected.input = "abc";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T12.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T12.js
new file mode 100644
index 0000000000..20f9efd7d8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T12.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ]
+ evaluates by evaluating ClassRanges to obtain a CharSet and returning
+ that CharSet and the boolean false
+es5id: 15.10.2.13_A1_T12
+description: Execute /a[b]c/.exec("abc") and check results
+---*/
+
+var __executed = /a[b]c/.exec("abc");
+
+var __expected = ["abc"];
+__expected.index = 0;
+__expected.input = "abc";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T13.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T13.js
new file mode 100644
index 0000000000..944e396867
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T13.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ]
+ evaluates by evaluating ClassRanges to obtain a CharSet and returning
+ that CharSet and the boolean false
+es5id: 15.10.2.13_A1_T13
+description: >
+ Execute /[a-z][^1-9][a-z]/.exec("a1b b2c c3d def f4g") and
+ check results
+---*/
+
+var __executed = /[a-z][^1-9][a-z]/.exec("a1b b2c c3d def f4g");
+
+var __expected = ["def"];
+__expected.index = 15;
+__expected.input = "a1b b2c c3d def f4g";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T14.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T14.js
new file mode 100644
index 0000000000..dc9072d835
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T14.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ]
+ evaluates by evaluating ClassRanges to obtain a CharSet and returning
+ that CharSet and the boolean false
+es5id: 15.10.2.13_A1_T14
+description: Execute /[*&$]{3}/.exec("123*&$abc") and check results
+---*/
+
+var __executed = /[*&$]{3}/.exec("123*&$abc");
+
+var __expected = ["*&$"];
+__expected.index = 3;
+__expected.input = "123*&$abc";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T15.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T15.js
new file mode 100644
index 0000000000..2a0a1f1fe8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T15.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ]
+ evaluates by evaluating ClassRanges to obtain a CharSet and returning
+ that CharSet and the boolean false
+es5id: 15.10.2.13_A1_T15
+description: Execute /[\d][\n][^\d]/.exec("line1\nline2") and check results
+---*/
+
+var __executed = /[\d][\n][^\d]/.exec("line1\nline2");
+
+var __expected = ["1\nl"];
+__expected.index = 4;
+__expected.input = "line1\nline2";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T17.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T17.js
new file mode 100644
index 0000000000..e41ac621f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T17.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ]
+ evaluates by evaluating ClassRanges to obtain a CharSet and returning
+ that CharSet and the boolean false
+es5id: 15.10.2.13_A1_T17
+description: Execute /[]/.exec("a[b\n[]\tc]d") and check results
+---*/
+
+var __executed = /[]/.exec("a[b\n[]\tc]d");
+
+assert.sameValue(__executed, null, 'The value of __executed is expected to be null');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T2.js
new file mode 100644
index 0000000000..8bc8d7feb7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T2.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ]
+ evaluates by evaluating ClassRanges to obtain a CharSet and returning
+ that CharSet and the boolean false
+es5id: 15.10.2.13_A1_T2
+description: Execute /a[]/.test("\0a\0a") and check results
+---*/
+
+var __executed = /a[]/.test("\0a\0a");
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T3.js
new file mode 100644
index 0000000000..68a70433c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T3.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ]
+ evaluates by evaluating ClassRanges to obtain a CharSet and returning
+ that CharSet and the boolean false
+es5id: 15.10.2.13_A1_T3
+description: Execute /q[ax-zb](?=\s+)/.exec("qYqy ") and check results
+---*/
+
+var __executed = /q[ax-zb](?=\s+)/.exec("qYqy ");
+
+var __expected = ["qy"];
+__expected.index = 2;
+__expected.input = "qYqy ";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T4.js
new file mode 100644
index 0000000000..60d7939f0f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T4.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ]
+ evaluates by evaluating ClassRanges to obtain a CharSet and returning
+ that CharSet and the boolean false
+es5id: 15.10.2.13_A1_T4
+description: Execute /q[ax-zb](?=\s+)/.exec("tqaqy ") and check results
+---*/
+
+var __executed = /q[ax-zb](?=\s+)/.exec("tqaqy ");
+
+var __expected = ["qy"];
+__expected.index = 3;
+__expected.input = "tqaqy ";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T5.js
new file mode 100644
index 0000000000..04a47f75b8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T5.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ]
+ evaluates by evaluating ClassRanges to obtain a CharSet and returning
+ that CharSet and the boolean false
+es5id: 15.10.2.13_A1_T5
+description: Execute /q[ax-zb](?=\s+)/.exec("tqa\t qy ") and check results
+---*/
+
+var __executed = /q[ax-zb](?=\s+)/.exec("tqa\t qy ");
+
+var __expected = ["qa"];
+__expected.index = 1;
+__expected.input = "tqa\t qy ";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T6.js
new file mode 100644
index 0000000000..e7ef9156b8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T6.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ]
+ evaluates by evaluating ClassRanges to obtain a CharSet and returning
+ that CharSet and the boolean false
+es5id: 15.10.2.13_A1_T6
+description: Execute /ab[ercst]de/.exec("abcde") and check results
+---*/
+
+var __executed = /ab[ercst]de/.exec("abcde");
+
+var __expected = ["abcde"];
+__expected.index = 0;
+__expected.input = "abcde";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T7.js
new file mode 100644
index 0000000000..bbef9f124b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T7.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ]
+ evaluates by evaluating ClassRanges to obtain a CharSet and returning
+ that CharSet and the boolean false
+es5id: 15.10.2.13_A1_T7
+description: Execute /ab[erst]de/.test("abcde") and check results
+---*/
+
+var __executed = /ab[erst]de/.test("abcde");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T8.js
new file mode 100644
index 0000000000..5d616fca72
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T8.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ]
+ evaluates by evaluating ClassRanges to obtain a CharSet and returning
+ that CharSet and the boolean false
+es5id: 15.10.2.13_A1_T8
+description: Execute /[d-h]+/.exec("abcdefghijkl") and check results
+---*/
+
+var __executed = /[d-h]+/.exec("abcdefghijkl");
+
+var __expected = ["defgh"];
+__expected.index = 3;
+__expected.input = "abcdefghijkl";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T9.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T9.js
new file mode 100644
index 0000000000..eca4bdcd14
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A1_T9.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ]
+ evaluates by evaluating ClassRanges to obtain a CharSet and returning
+ that CharSet and the boolean false
+es5id: 15.10.2.13_A1_T9
+description: Execute /[1234567].{2}/.exec("abc6defghijkl") and check results
+---*/
+
+var __executed = /[1234567].{2}/.exec("abc6defghijkl");
+
+var __expected = ["6de"];
+__expected.index = 3;
+__expected.input = "abc6defghijkl";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T1.js
new file mode 100644
index 0000000000..3c9b4032e0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T1.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ ^ ClassRanges ] evaluates by
+ evaluating ClassRanges to obtain a CharSet and returning that CharSet
+ and the boolean true
+es5id: 15.10.2.13_A2_T1
+description: Execute /[^]a/m.exec("a\naba") and check results
+---*/
+
+var __executed = /[^]a/m.exec("a\naba");
+
+var __expected = ["\na"];
+__expected.index = 1;
+__expected.input = "a\naba";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T2.js
new file mode 100644
index 0000000000..2ac8ff3c4a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T2.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ ^ ClassRanges ] evaluates by
+ evaluating ClassRanges to obtain a CharSet and returning that CharSet
+ and the boolean true
+es5id: 15.10.2.13_A2_T2
+description: Execute /a[^]/.exec(" a\t\n") and check results
+---*/
+
+var __executed = /a[^]/.exec(" a\t\n");
+
+var __expected = ["a\t"];
+__expected.index = 3;
+__expected.input = " a\t\n";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T3.js
new file mode 100644
index 0000000000..42161ba17d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T3.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ ^ ClassRanges ] evaluates by
+ evaluating ClassRanges to obtain a CharSet and returning that CharSet
+ and the boolean true
+es5id: 15.10.2.13_A2_T3
+description: Execute /a[^b-z]\s+/.exec("ab an az aY n") and check results
+---*/
+
+var __executed = /a[^b-z]\s+/.exec("ab an az aY n");
+
+var __expected = ["aY "];
+__expected.index = 9;
+__expected.input = "ab an az aY n";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T4.js
new file mode 100644
index 0000000000..7c204f12ae
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T4.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ ^ ClassRanges ] evaluates by
+ evaluating ClassRanges to obtain a CharSet and returning that CharSet
+ and the boolean true
+es5id: 15.10.2.13_A2_T4
+description: Execute /[^\b]+/g.exec("easy\bto\u0008ride") and check results
+---*/
+
+var __executed = /[^\b]+/g.exec("easy\bto\u0008ride");
+
+var __expected = ["easy"];
+__expected.index = 0;
+__expected.input = "easy\bto\u0008ride";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T5.js
new file mode 100644
index 0000000000..d2ed2187aa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T5.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ ^ ClassRanges ] evaluates by
+ evaluating ClassRanges to obtain a CharSet and returning that CharSet
+ and the boolean true
+es5id: 15.10.2.13_A2_T5
+description: Execute /a[^1-9]c/.exec("abc") and check results
+---*/
+
+var __executed = /a[^1-9]c/.exec("abc");
+
+var __expected = ["abc"];
+__expected.index = 0;
+__expected.input = "abc";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T6.js
new file mode 100644
index 0000000000..46aefd0f03
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T6.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ ^ ClassRanges ] evaluates by
+ evaluating ClassRanges to obtain a CharSet and returning that CharSet
+ and the boolean true
+es5id: 15.10.2.13_A2_T6
+description: Execute /a[^b]c/.test("abc") and check results
+---*/
+
+var __executed = /a[^b]c/.test("abc");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T7.js
new file mode 100644
index 0000000000..cc9c45060f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T7.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ ^ ClassRanges ] evaluates by
+ evaluating ClassRanges to obtain a CharSet and returning that CharSet
+ and the boolean true
+es5id: 15.10.2.13_A2_T7
+description: Execute /[^a-z]{4}/.exec("abc#$%def%&*@ghi") and check results
+---*/
+
+var __executed = /[^a-z]{4}/.exec("abc#$%def%&*@ghi");
+
+var __expected = ["%&*@"];
+__expected.index = 9;
+__expected.input = "abc#$%def%&*@ghi";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T8.js
new file mode 100644
index 0000000000..16b262456d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A2_T8.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production CharacterClass :: [ ^ ClassRanges ] evaluates by
+ evaluating ClassRanges to obtain a CharSet and returning that CharSet
+ and the boolean true
+es5id: 15.10.2.13_A2_T8
+description: Execute /[^]/.exec("abc#$%def%&*@ghi") and check results
+---*/
+
+var __executed = /[^]/.exec("abc#$%def%&*@ghi");
+
+var __expected = ["a"];
+__expected.index = 0;
+__expected.input = "abc#$%def%&*@ghi";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A3_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A3_T1.js
new file mode 100644
index 0000000000..f7410bc10b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A3_T1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Inside a CharacterClass, \b means the backspace character
+es5id: 15.10.2.13_A3_T1
+description: Execute /.[\b]./.exec("abc\bdef") and check results
+---*/
+
+var __executed = /.[\b]./.exec("abc\bdef");
+
+var __expected = ["c\bd"];
+__expected.index = 2;
+__expected.input = "abc\bdef";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A3_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A3_T2.js
new file mode 100644
index 0000000000..693278004b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A3_T2.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Inside a CharacterClass, \b means the backspace character
+es5id: 15.10.2.13_A3_T2
+description: Execute /c[\b]{3}d/.exec("abc\b\b\bdef") and check results
+---*/
+
+var __executed = /c[\b]{3}d/.exec("abc\b\b\bdef");
+
+var __expected = ["c\b\b\bd"];
+__expected.index = 2;
+__expected.input = "abc\b\b\bdef";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A3_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A3_T3.js
new file mode 100644
index 0000000000..10dbcc25bd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A3_T3.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Inside a CharacterClass, \b means the backspace character
+es5id: 15.10.2.13_A3_T3
+description: Execute /[^\[\b\]]+/.exec("abc\bdef") and check results
+---*/
+
+var __executed = /[^\[\b\]]+/.exec("abc\bdef");
+
+var __expected = ["abc"];
+__expected.index = 0;
+__expected.input = "abc\bdef";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A3_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A3_T4.js
new file mode 100644
index 0000000000..b158386550
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.13_A3_T4.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Inside a CharacterClass, \b means the backspace character
+es5id: 15.10.2.13_A3_T4
+description: Execute /[^\[\b\]]+/.exec("abcdef") and check results
+---*/
+
+var __executed = /[^\[\b\]]+/.exec("abcdef");
+
+var __expected = ["abcdef"];
+__expected.index = 0;
+__expected.input = "abcdef";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T1.js
new file mode 100644
index 0000000000..cdcf0e9f42
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T1.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T1
+description: >
+ Checking if execution of "/[b-ac-e]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[b-ac-e]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[b-ac-e]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T10.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T10.js
new file mode 100644
index 0000000000..ceedfbbad1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T10.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T10
+description: >
+ Checking if execution of "/[\10b-G]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\10b-G]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[\\10b-G]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T11.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T11.js
new file mode 100644
index 0000000000..a936f005ea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T11.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T11
+description: >
+ Checking if execution of "/[\bd-G]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\bd-G]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[\\bd-G]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T12.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T12.js
new file mode 100644
index 0000000000..0adc1f2575
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T12.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T12
+description: >
+ Checking if execution of "/[\Bd-G]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\Bd-G]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[\\Bd-G]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T13.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T13.js
new file mode 100644
index 0000000000..f159e9cbb4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T13.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T13
+description: >
+ Checking if execution of "/[\td-G]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\td-G]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[\\td-G]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T14.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T14.js
new file mode 100644
index 0000000000..8a10b56954
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T14.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T14
+description: >
+ Checking if execution of "/[\nd-G]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\nd-G]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[\\nd-G]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T15.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T15.js
new file mode 100644
index 0000000000..801266013d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T15.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T15
+description: >
+ Checking if execution of "/[\vd-G]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\vd-G]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[\\vd-G]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T16.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T16.js
new file mode 100644
index 0000000000..79d78cbb72
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T16.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T16
+description: >
+ Checking if execution of "/[\fd-G]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\fd-G]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[\\fd-G]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T17.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T17.js
new file mode 100644
index 0000000000..76bea152fb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T17.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T17
+description: >
+ Checking if execution of "/[\rd-G]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\rd-G]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[\\rd-G]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T18.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T18.js
new file mode 100644
index 0000000000..71d67c1455
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T18.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T18
+description: >
+ Checking if execution of "/[\c0001d-G]/.exec("1")" leads to
+ throwing the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\c0001d-G]/.exec("1") throw SyntaxError. Actual: ' + (new RegExp("[\\c0001d-G]").exec("1")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T19.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T19.js
new file mode 100644
index 0000000000..dde7055f70
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T19.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T19
+description: >
+ Checking if execution of "/[\x0061d-G]/.exec("1")" leads to
+ throwing the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\x0061d-G]/.exec("1") throw SyntaxError. Actual: ' + (new RegExp("[\\x0061d-G]").exec("1")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T2.js
new file mode 100644
index 0000000000..9237c603d7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T2.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T2
+description: >
+ Checking if execution of "/[a-dc-b]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[a-dc-b]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[a-dc-b]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T20.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T20.js
new file mode 100644
index 0000000000..f5e5ef3658
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T20.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T20
+description: >
+ Checking if execution of "/[\u0061d-G]/.exec("a")" leads to
+ throwing the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\u0061d-G]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[\\u0061d-G]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T21.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T21.js
new file mode 100644
index 0000000000..8e1e6f505e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T21.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T21
+description: >
+ Checking if execution of "/[\ad-G]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\ad-G]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[\\ad-G]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T22.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T22.js
new file mode 100644
index 0000000000..83386db9aa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T22.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T22
+description: >
+ Checking if execution of "/[c-eb-a]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[c-eb-a]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[c-eb-a]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T23.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T23.js
new file mode 100644
index 0000000000..25940b01bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T23.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T23
+description: >
+ Checking if execution of "/[b-G\d]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[b-G\\d]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[b-G\\d]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T24.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T24.js
new file mode 100644
index 0000000000..705b88d66b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T24.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T24
+description: >
+ Checking if execution of "/[b-G\D]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[b-G\\D]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[b-G\\D]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T25.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T25.js
new file mode 100644
index 0000000000..89adf8be03
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T25.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T25
+description: >
+ Checking if execution of "/[b-G\s]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[b-G\\s]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[b-G\\s]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T26.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T26.js
new file mode 100644
index 0000000000..a7c25bf686
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T26.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T26
+description: >
+ Checking if execution of "/[b-G\S]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[b-G\\S]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[b-G\\S]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T27.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T27.js
new file mode 100644
index 0000000000..5c4186280a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T27.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T27
+description: >
+ Checking if execution of "/[b-G\w]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[b-G\\w]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[b-G\\w]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T28.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T28.js
new file mode 100644
index 0000000000..07ae0e85f9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T28.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T28
+description: >
+ Checking if execution of "/[b-G\W]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[b-G\\W]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[b-G\\W]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T29.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T29.js
new file mode 100644
index 0000000000..0d14d5df02
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T29.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T29
+description: >
+ Checking if execution of "/[b-G\0]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[b-G\\0]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[b-G\\0]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T3.js
new file mode 100644
index 0000000000..8c3d9e8b66
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T3.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T3
+description: >
+ Checking if execution of "/[\db-G]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\db-G]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[\\db-G]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T30.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T30.js
new file mode 100644
index 0000000000..32219f1133
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T30.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T30
+description: >
+ Checking if execution of "/[b-G\10]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[b-G\\10]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[b-G\\10]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T31.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T31.js
new file mode 100644
index 0000000000..a7280a204c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T31.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T31
+description: >
+ Checking if execution of "/[d-G\b]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[d-G\\b]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[d-G\\b]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T32.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T32.js
new file mode 100644
index 0000000000..47805bf1b3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T32.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T32
+description: >
+ Checking if execution of "/[d-G\B]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[d-G\\B]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[d-G\\B]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T33.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T33.js
new file mode 100644
index 0000000000..d2c55d0a79
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T33.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T33
+description: >
+ Checking if execution of "/[d-G\t]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[d-G\\t]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[d-G\\t]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T34.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T34.js
new file mode 100644
index 0000000000..51d8cb00d0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T34.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T34
+description: >
+ Checking if execution of "/[d-G\n]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[d-G\\n]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[d-G\\n]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T35.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T35.js
new file mode 100644
index 0000000000..f89adc57b0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T35.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T35
+description: >
+ Checking if execution of "/[d-G\v]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[d-G\\v]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[d-G\\v]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T36.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T36.js
new file mode 100644
index 0000000000..8234169341
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T36.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T36
+description: >
+ Checking if execution of "/[d-G\f]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[d-G\\f]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[d-G\\f]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T37.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T37.js
new file mode 100644
index 0000000000..84660c6633
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T37.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T37
+description: >
+ Checking if execution of "/[d-G\r]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[d-G\\r]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[d-G\\r]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T38.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T38.js
new file mode 100644
index 0000000000..9bc2fd2c0e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T38.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T38
+description: >
+ Checking if execution of "/[d-G\c0001]/.exec("1")" leads to
+ throwing the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[d-G\\c0001]/.exec("1") throw SyntaxError. Actual: ' + (new RegExp("[d-G\\c0001]").exec("1")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T39.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T39.js
new file mode 100644
index 0000000000..7e9776e80f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T39.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T39
+description: >
+ Checking if execution of "/[d-G\x0061]/.exec("1")" leads to
+ throwing the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[d-G\\x0061]/.exec("1") throw SyntaxError. Actual: ' + (new RegExp("[d-G\\x0061]").exec("1")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T4.js
new file mode 100644
index 0000000000..3d2f9c7940
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T4.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T4
+description: >
+ Checking if execution of "/[\Db-G]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\Db-G]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[\\Db-G]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T40.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T40.js
new file mode 100644
index 0000000000..484e4f7a3e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T40.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T40
+description: >
+ Checking if execution of "/[d-G\u0061]/.exec("a")" leads to
+ throwing the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[d-G\\u0061]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[d-G\\u0061]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T41.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T41.js
new file mode 100644
index 0000000000..b7602ed2d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T41.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T41
+description: >
+ Checking if execution of "/[d-G\a]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[d-G\\a]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[d-G\\a]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T5.js
new file mode 100644
index 0000000000..784c14f8e8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T5.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T5
+description: >
+ Checking if execution of "/[\sb-G]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\sb-G]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[\\sb-G]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T6.js
new file mode 100644
index 0000000000..4e8925c196
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T6.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T6
+description: >
+ Checking if execution of "/[\Sb-G]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\Sb-G]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[\\Sb-G]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T7.js
new file mode 100644
index 0000000000..1a54c701d6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T7.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T7
+description: >
+ Checking if execution of "/[\wb-G]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\wb-G]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[\\wb-G]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T8.js
new file mode 100644
index 0000000000..e11bce529c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T8.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T8
+description: >
+ Checking if execution of "/[\Wb-G]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\Wb-G]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[\\Wb-G]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T9.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T9.js
new file mode 100644
index 0000000000..cc05a2123d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.15_A1_T9.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The internal helper function CharacterRange takes two CharSet parameters A and B and performs the
+ following:
+ 2. Let a be the one character in CharSet A.
+ 3. Let b be the one character in CharSet B.
+ 4. Let i be the character value of character a.
+ 5. Let j be the character value of character b.
+ 6. If i > j, throw a SyntaxError exception.
+es5id: 15.10.2.15_A1_T9
+description: >
+ Checking if execution of "/[\0b-G]/.exec("a")" leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[\\0b-G]/.exec("a") throw SyntaxError. Actual: ' + (new RegExp("[\\0b-G]").exec("a")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T1.js
new file mode 100644
index 0000000000..b1a3d5728b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T1.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The | regular expression operator separates two alternatives.
+ The pattern first tries to match the left Alternative (followed by the sequel of the regular expression).
+ If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression)
+es5id: 15.10.2.3_A1_T1
+description: Execute /a|ab/.exec("abc") and check results
+---*/
+
+var __executed = /a|ab/.exec("abc");
+
+var __expected = ["a"];
+__expected.index = 0;
+__expected.input = "abc";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T10.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T10.js
new file mode 100644
index 0000000000..eedbe81f06
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T10.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The | regular expression operator separates two alternatives.
+ The pattern first tries to match the left Alternative (followed by the sequel of the regular expression).
+ If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression)
+es5id: 15.10.2.3_A1_T10
+description: "Execute /(?:ab|cd)+|ef/i.exec(\"AEKeFCDab\") and check results"
+---*/
+
+var __executed = /(?:ab|cd)+|ef/i.exec("AEKeFCDab");
+
+var __expected = ["eF"];
+__expected.index = 3;
+__expected.input = "AEKeFCDab";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T11.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T11.js
new file mode 100644
index 0000000000..67cce12424
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T11.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The | regular expression operator separates two alternatives.
+ The pattern first tries to match the left Alternative (followed by the sequel of the regular expression).
+ If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression)
+es5id: 15.10.2.3_A1_T11
+description: Execute /11111|111/.exec("1111111111111111") and check results
+---*/
+
+var __executed = /11111|111/.exec("1111111111111111");
+
+var __expected = ["11111"];
+__expected.index = 0;
+__expected.input = "1111111111111111";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T12.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T12.js
new file mode 100644
index 0000000000..54834ab06f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T12.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The | regular expression operator separates two alternatives.
+ The pattern first tries to match the left Alternative (followed by the sequel of the regular expression).
+ If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression)
+es5id: 15.10.2.3_A1_T12
+description: Execute /xyz|.../.exec("abc") and check results
+---*/
+
+var __executed = /xyz|.../.exec("abc");
+
+var __expected = ["abc"];
+__expected.index = 0;
+__expected.input = "abc";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T13.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T13.js
new file mode 100644
index 0000000000..525d5ac028
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T13.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The | regular expression operator separates two alternatives.
+ The pattern first tries to match the left Alternative (followed by the sequel of the regular expression).
+ If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression)
+es5id: 15.10.2.3_A1_T13
+description: Execute /(.)..|abc/.exec("abc") and check results
+---*/
+
+var __executed = /(.)..|abc/.exec("abc");
+
+var __expected = ["abc","a"];
+__expected.index = 0;
+__expected.input = "abc";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T14.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T14.js
new file mode 100644
index 0000000000..a758b725ab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T14.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The | regular expression operator separates two alternatives.
+ The pattern first tries to match the left Alternative (followed by the sequel of the regular expression).
+ If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression)
+es5id: 15.10.2.3_A1_T14
+description: "Execute /.+: gr(a|e)y/.exec(\"color: grey\") and check results"
+---*/
+
+var __executed = /.+: gr(a|e)y/.exec("color: grey");
+
+var __expected = ["color: grey","e"];
+__expected.index = 0;
+__expected.input = "color: grey";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T15.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T15.js
new file mode 100644
index 0000000000..88f68b83e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T15.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The | regular expression operator separates two alternatives.
+ The pattern first tries to match the left Alternative (followed by the sequel of the regular expression).
+ If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression)
+es5id: 15.10.2.3_A1_T15
+description: >
+ Execute /(Rob)|(Bob)|(Robert)|(Bobby)/.exec("Hi Bob") and check
+ results
+---*/
+
+var __executed = /(Rob)|(Bob)|(Robert)|(Bobby)/.exec("Hi Bob");
+
+var __expected = ["Bob",undefined,"Bob", undefined, undefined];
+__expected.index = 3;
+__expected.input = "Hi Bob";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T16.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T16.js
new file mode 100644
index 0000000000..500d24ed45
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T16.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The | regular expression operator separates two alternatives.
+ The pattern first tries to match the left Alternative (followed by the sequel of the regular expression).
+ If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression)
+es5id: 15.10.2.3_A1_T16
+description: Execute /()|/.exec("") and check results
+---*/
+
+var __executed = /()|/.exec("");
+
+var __expected = ["",""];
+__expected.index = 0;
+__expected.input = "";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T17.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T17.js
new file mode 100644
index 0000000000..4780213347
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T17.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The | regular expression operator separates two alternatives.
+ The pattern first tries to match the left Alternative (followed by the sequel of the regular expression).
+ If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression)
+es5id: 15.10.2.3_A1_T17
+description: Execute /|()/.exec("") and check results
+---*/
+
+var __executed = /|()/.exec("");
+
+var __expected = ["",undefined];
+__expected.index = 0;
+__expected.input = "";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T2.js
new file mode 100644
index 0000000000..e48da33a03
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T2.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The | regular expression operator separates two alternatives.
+ The pattern first tries to match the left Alternative (followed by the sequel of the regular expression).
+ If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression)
+es5id: 15.10.2.3_A1_T2
+description: Execute /((a)|(ab))((c)|(bc))/.exec("abc") and check results
+---*/
+
+var __executed = /((a)|(ab))((c)|(bc))/.exec("abc");
+
+var __expected = ["abc", "a", "a", undefined, "bc", undefined, "bc"];
+__expected.index = 0;
+__expected.input = "abc";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T3.js
new file mode 100644
index 0000000000..cc627d8c60
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T3.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The | regular expression operator separates two alternatives.
+ The pattern first tries to match the left Alternative (followed by the sequel of the regular expression).
+ If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression)
+es5id: 15.10.2.3_A1_T3
+description: >
+ Execute /\d{3}|[a-z]{4}/.exec("2, 12 and of course repeat 12") and
+ check results
+---*/
+
+var __executed = /\d{3}|[a-z]{4}/.exec("2, 12 and of course repeat 12");
+
+var __expected = ["cour"];
+__expected.index = 13;
+__expected.input = "2, 12 and of course repeat 12";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T4.js
new file mode 100644
index 0000000000..47827a0409
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T4.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The | regular expression operator separates two alternatives.
+ The pattern first tries to match the left Alternative (followed by the sequel of the regular expression).
+ If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression)
+es5id: 15.10.2.3_A1_T4
+description: >
+ Execute /\d{3}|[a-z]{4}/.exec("2, 12 and 234 AND of course repeat
+ 12") and check results
+---*/
+
+var __executed = /\d{3}|[a-z]{4}/.exec("2, 12 and 234 AND of course repeat 12");
+
+var __expected = ["234"];
+__expected.index = 10;
+__expected.input = "2, 12 and 234 AND of course repeat 12";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T5.js
new file mode 100644
index 0000000000..db7b6bc3f4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T5.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The | regular expression operator separates two alternatives.
+ The pattern first tries to match the left Alternative (followed by the sequel of the regular expression).
+ If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression)
+es5id: 15.10.2.3_A1_T5
+description: >
+ Execute /\d{3}|[a-z]{4}/.test("2, 12 and 23 AND 0.00.1") and check
+ results
+---*/
+
+var __executed = /\d{3}|[a-z]{4}/.test("2, 12 and 23 AND 0.00.1");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T6.js
new file mode 100644
index 0000000000..dbc9adec68
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T6.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The | regular expression operator separates two alternatives.
+ The pattern first tries to match the left Alternative (followed by the sequel of the regular expression).
+ If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression)
+es5id: 15.10.2.3_A1_T6
+description: Execute /ab|cd|ef/i.exec("AEKFCD") and check results
+---*/
+
+var __executed = /ab|cd|ef/i.exec("AEKFCD");
+
+var __expected = ["CD"];
+__expected.index = 4;
+__expected.input = "AEKFCD";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T7.js
new file mode 100644
index 0000000000..4c239a847e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T7.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The | regular expression operator separates two alternatives.
+ The pattern first tries to match the left Alternative (followed by the sequel of the regular expression).
+ If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression)
+es5id: 15.10.2.3_A1_T7
+description: Execute /ab|cd|ef/.test("AEKFCD") and check results
+---*/
+
+var __executed = /ab|cd|ef/.test("AEKFCD");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T8.js
new file mode 100644
index 0000000000..d8657663ea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T8.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The | regular expression operator separates two alternatives.
+ The pattern first tries to match the left Alternative (followed by the sequel of the regular expression).
+ If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression)
+es5id: 15.10.2.3_A1_T8
+description: "Execute /(?:ab|cd)+|ef/i.exec(\"AEKFCD\") and check results"
+---*/
+
+var __executed = /(?:ab|cd)+|ef/i.exec("AEKFCD");
+
+var __expected = ["CD"];
+__expected.index = 4;
+__expected.input = "AEKFCD";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T9.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T9.js
new file mode 100644
index 0000000000..58ff15a8c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.3_A1_T9.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The | regular expression operator separates two alternatives.
+ The pattern first tries to match the left Alternative (followed by the sequel of the regular expression).
+ If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression)
+es5id: 15.10.2.3_A1_T9
+description: "Execute /(?:ab|cd)+|ef/i.exec(\"AEKFCDab\") and check results"
+---*/
+
+var __executed = /(?:ab|cd)+|ef/i.exec("AEKFCDab");
+
+var __expected = ["CDab"];
+__expected.index = 4;
+__expected.input = "AEKFCDab";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T1.js
new file mode 100644
index 0000000000..dcb7f09d43
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T1.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ An Atom followed by a Quantifier is repeated the number of times
+ specified by the Quantifier
+es5id: 15.10.2.5_A1_T1
+description: Execute /a[a-z]{2,4}/.exec("abcdefghi") and check results
+---*/
+
+var __executed = /a[a-z]{2,4}/.exec("abcdefghi");
+
+var __expected = ["abcde"];
+__expected.index = 0;
+__expected.input = "abcdefghi";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T2.js
new file mode 100644
index 0000000000..3e88151228
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T2.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ An Atom followed by a Quantifier is repeated the number of times
+ specified by the Quantifier
+es5id: 15.10.2.5_A1_T2
+description: Execute /a[a-z]{2,4}?/.exec("abcdefghi") and check results
+---*/
+
+var __executed = /a[a-z]{2,4}?/.exec("abcdefghi");
+
+var __expected = ["abc"];
+__expected.index = 0;
+__expected.input = "abcdefghi";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T3.js
new file mode 100644
index 0000000000..f395719dfc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T3.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ An Atom followed by a Quantifier is repeated the number of times
+ specified by the Quantifier
+es5id: 15.10.2.5_A1_T3
+description: Execute /(aa|aabaac|ba|b|c)* /.exec("aabaac") and check results
+---*/
+
+var __executed = /(aa|aabaac|ba|b|c)*/.exec("aabaac");
+
+var __expected = ["aaba", "ba"];
+__expected.index = 0;
+__expected.input = "aabaac";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T4.js
new file mode 100644
index 0000000000..e3ef4d8640
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T4.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ An Atom followed by a Quantifier is repeated the number of times
+ specified by the Quantifier
+es5id: 15.10.2.5_A1_T4
+description: Execute /(z)((a+)?(b+)?(c))* /.exec("zaacbbbcac") and check results
+---*/
+
+var __executed = /(z)((a+)?(b+)?(c))*/.exec("zaacbbbcac");
+
+var __expected = ["zaacbbbcac", "z", "ac", "a", undefined, "c"];
+__expected.index = 0;
+__expected.input = "zaacbbbcac";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T5.js
new file mode 100644
index 0000000000..2ffe40efd2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.5_A1_T5.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ An Atom followed by a Quantifier is repeated the number of times
+ specified by the Quantifier
+es5id: 15.10.2.5_A1_T5
+description: Execute /(a*)b\1+/.exec("baaaac") and check results
+---*/
+
+var __executed = /(a*)b\1+/.exec("baaaac");
+
+var __expected = ["b", ""];
+__expected.index = 0;
+__expected.input = "baaaac";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T1.js
new file mode 100644
index 0000000000..3ba6f1a880
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T1.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: $ evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A1_T1
+description: Execute /s$/.test("pairs\nmakes\tdouble") and check results
+---*/
+
+var __executed = /s$/.test("pairs\nmakes\tdouble");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T2.js
new file mode 100644
index 0000000000..d314d096bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T2.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: $ evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A1_T2
+description: Execute /e$/.exec("pairs\nmakes\tdouble") and check results
+---*/
+
+var __executed = /e$/.exec("pairs\nmakes\tdouble");
+
+var __expected = ["e"];
+__expected.index = 17;
+__expected.input = "pairs\nmakes\tdouble";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T3.js
new file mode 100644
index 0000000000..16dee37640
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T3.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: $ evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A1_T3
+description: Execute /s$/m.exec("pairs\nmakes\tdouble") and check results
+---*/
+
+var __executed = /s$/m.exec("pairs\nmakes\tdouble");
+
+var __expected = ["s"];
+__expected.index = 4;
+__expected.input = "pairs\nmakes\tdouble";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T4.js
new file mode 100644
index 0000000000..34109058e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T4.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: $ evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A1_T4
+description: Execute /[^e]$/mg.exec("pairs\nmakes\tdouble") and check results
+---*/
+
+var __executed = /[^e]$/mg.exec("pairs\nmakes\tdouble");
+
+var __expected = ["s"];
+__expected.index = 4;
+__expected.input = "pairs\nmakes\tdouble";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T5.js
new file mode 100644
index 0000000000..da6610d97a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A1_T5.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: $ evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A1_T5
+description: >
+ Execute /es$/mg.exec("pairs\nmakes\tdoubl\u0065s") and check
+ results
+---*/
+
+var __executed = /es$/mg.exec("pairs\nmakes\tdoubl\u0065s");
+
+var __expected = ["es"];
+__expected.index = 17;
+__expected.input = "pairs\nmakes\tdoubles";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T1.js
new file mode 100644
index 0000000000..8af0b6fe9a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T1.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: ^ evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A2_T1
+description: Execute /^m/.test("pairs\nmakes\tdouble") and check results
+---*/
+
+var __executed = /^m/.test("pairs\nmakes\tdouble");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T10.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T10.js
new file mode 100644
index 0000000000..b8d18b59c1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T10.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: ^ evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A2_T10
+description: Execute /^\d+/m.exec("abc\n123xyz") and check results
+---*/
+
+var __executed = /^\d+/m.exec("abc\n123xyz");
+
+var __expected = ["123"];
+__expected.index = 4;
+__expected.input = "abc\n123xyz";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T2.js
new file mode 100644
index 0000000000..a9884c5c50
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T2.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: ^ evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A2_T2
+description: Execute /^m/m.exec("pairs\nmakes\tdouble") and check results
+---*/
+
+var __executed = /^m/m.exec("pairs\nmakes\tdouble");
+
+var __expected = ["m"];
+__expected.index = 6;
+__expected.input = "pairs\nmakes\tdouble";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T3.js
new file mode 100644
index 0000000000..aeb06cccdb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T3.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: ^ evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A2_T3
+description: >
+ Execute /^p[a-z]/.exec("pairs\nmakes\tdouble\npesos") and check
+ results
+---*/
+
+var __executed = /^p[a-z]/.exec("pairs\nmakes\tdouble\npesos");
+
+var __expected = ["pa"];
+__expected.index = 0;
+__expected.input = "pairs\nmakes\tdouble\npesos";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T4.js
new file mode 100644
index 0000000000..df304897e4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T4.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: ^ evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A2_T4
+description: >
+ Execute /^p[a-z]/m.exec("pairs\nmakes\tdouble\npesos") and check
+ results
+---*/
+
+var __executed = /^p[b-z]/m.exec("pairs\nmakes\tdouble\npesos");
+
+var __expected = ["pe"];
+__expected.index = 19;
+__expected.input = "pairs\nmakes\tdouble\npesos";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T5.js
new file mode 100644
index 0000000000..546bf531a3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T5.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: ^ evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A2_T5
+description: >
+ Execute /^[^p]/m.exec("pairs\nmakes\tdouble\npesos") and check
+ results
+---*/
+
+var __executed = /^[^p]/m.exec("pairs\nmakes\tdouble\npesos");
+
+var __expected = ["m"];
+__expected.index = 6;
+__expected.input = "pairs\nmakes\tdouble\npesos";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T6.js
new file mode 100644
index 0000000000..49e4ba2cc4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T6.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: ^ evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A2_T6
+description: Execute /^ab/.exec("abcde") and check results
+---*/
+
+var __executed = /^ab/.exec("abcde");
+
+var __expected = ["ab"];
+__expected.index = 0;
+__expected.input = "abcde";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T7.js
new file mode 100644
index 0000000000..4d346246bc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T7.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: ^ evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A2_T7
+description: Execute /^..^e/.test("ab\ncde") and check results
+---*/
+
+var __executed = /^..^e/.test("ab\ncde");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T8.js
new file mode 100644
index 0000000000..e56cf8b957
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T8.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: ^ evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A2_T8
+description: Execute /^xxx/.test("yyyyy") and check results
+---*/
+
+var __executed = /^xxx/.test("yyyyy");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T9.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T9.js
new file mode 100644
index 0000000000..6587eb1bbc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A2_T9.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: ^ evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A2_T9
+description: Execute /^\^+/.exec("^^^x") and check results
+---*/
+
+var __executed = /^\^+/.exec("^^^x");
+
+var __expected = ["^^^"];
+__expected.index = 0;
+__expected.input = "^^^x";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T1.js
new file mode 100644
index 0000000000..9b50a149cf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T1.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \b evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A3_T1
+description: >
+ Execute /\bp/.exec("pilot\nsoviet robot\topenoffice") and check
+ results
+---*/
+
+var __executed = /\bp/.exec("pilot\nsoviet robot\topenoffice");
+
+var __expected = ["p"];
+__expected.index = 0;
+__expected.input = "pilot\nsoviet robot\topenoffice";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T10.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T10.js
new file mode 100644
index 0000000000..873b729522
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T10.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \b evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A3_T10
+description: >
+ Execute /\brobot\b/.exec("pilot\nsoviet robot\topenoffice") and
+ check results
+---*/
+
+var __executed = /\brobot\b/.exec("pilot\nsoviet robot\topenoffice");
+
+var __expected = ["robot"];
+__expected.index = 13;
+__expected.input = "pilot\nsoviet robot\topenoffice";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T11.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T11.js
new file mode 100644
index 0000000000..17e48b1d85
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T11.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \b evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A3_T11
+description: >
+ Execute /\b\w{5}\b/.exec("pilot\nsoviet robot\topenoffice") and
+ check results
+---*/
+
+var __executed = /\b\w{5}\b/.exec("pilot\nsoviet robot\topenoffice");
+
+var __expected = ["pilot"];
+__expected.index = 0;
+__expected.input = "pilot\nsoviet robot\topenoffice";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T12.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T12.js
new file mode 100644
index 0000000000..cfcde0a257
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T12.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \b evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A3_T12
+description: >
+ Execute /\bop/.exec("pilot\nsoviet robot\topenoffice") and check
+ results
+---*/
+
+var __executed = /\bop/.exec("pilot\nsoviet robot\topenoffice");
+
+var __expected = ["op"];
+__expected.index = 19;
+__expected.input = "pilot\nsoviet robot\topenoffice";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T13.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T13.js
new file mode 100644
index 0000000000..ec17f59bc4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T13.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \b evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A3_T13
+description: >
+ Execute /op\b/.test("pilot\nsoviet robot\topenoffice") and check
+ results
+---*/
+
+var __executed = /op\b/.test("pilot\nsoviet robot\topenoffice");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T14.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T14.js
new file mode 100644
index 0000000000..e899c72c1b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T14.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \b evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A3_T14
+description: >
+ Execute /e\b/.exec("pilot\nsoviet robot\topenoffic\u0065") and
+ check results
+---*/
+
+var __executed = /e\b/.exec("pilot\nsoviet robot\topenoffic\u0065");
+
+var __expected = ["e"];
+__expected.index = 28;
+__expected.input = "pilot\nsoviet robot\topenoffice";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T15.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T15.js
new file mode 100644
index 0000000000..9b450811e8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T15.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \b evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A3_T15
+description: >
+ Execute /\be/.test("pilot\nsoviet robot\topenoffic\u0065") and
+ check results
+---*/
+
+var __executed = /\be/.test("pilot\nsoviet robot\topenoffic\u0065");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T2.js
new file mode 100644
index 0000000000..2c4bedaa68
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T2.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \b evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A3_T2
+description: >
+ Execute /ot\b/.exec("pilot\nsoviet robot\topenoffice") and check
+ results
+---*/
+
+var __executed = /ot\b/.exec("pilot\nsoviet robot\topenoffice");
+
+var __expected = ["ot"];
+__expected.index = 3;
+__expected.input = "pilot\nsoviet robot\topenoffice";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T3.js
new file mode 100644
index 0000000000..edb7b1a9f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T3.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \b evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A3_T3
+description: >
+ Execute /\bot/.test("pilot\nsoviet robot\topenoffice") and check
+ results
+---*/
+
+var __executed = /\bot/.test("pilot\nsoviet robot\topenoffice");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T4.js
new file mode 100644
index 0000000000..02cbed9dd0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T4.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \b evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A3_T4
+description: >
+ Execute /\bso/.exec("pilot\nsoviet robot\topenoffice") and check
+ results
+---*/
+
+var __executed = /\bso/.exec("pilot\nsoviet robot\topenoffice");
+
+var __expected = ["so"];
+__expected.index = 6;
+__expected.input = "pilot\nsoviet robot\topenoffice";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T5.js
new file mode 100644
index 0000000000..de857fe73a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T5.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \b evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A3_T5
+description: >
+ Execute /so\b/.test("pilot\nsoviet robot\topenoffice") and check
+ results
+---*/
+
+var __executed = /so\b/.test("pilot\nsoviet robot\topenoffice");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T6.js
new file mode 100644
index 0000000000..36c5708757
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T6.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \b evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A3_T6
+description: >
+ Execute /[^o]t\b/.exec("pilOt\nsoviet robot\topenoffice") and
+ check results
+---*/
+
+var __executed = /[^o]t\b/.exec("pilOt\nsoviet robot\topenoffice");
+
+var __expected = ["Ot"];
+__expected.index = 3;
+__expected.input = "pilOt\nsoviet robot\topenoffice";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T7.js
new file mode 100644
index 0000000000..ff918dfa2e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T7.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \b evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A3_T7
+description: >
+ Execute /[^o]t\b/i.exec("pilOt\nsoviet robot\topenoffice") and
+ check results
+---*/
+
+var __executed = /[^o]t\b/i.exec("pilOt\nsoviet robot\topenoffice");
+
+var __expected = ["et"];
+__expected.index = 10;
+__expected.input = "pilOt\nsoviet robot\topenoffice";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T8.js
new file mode 100644
index 0000000000..2a1cdb82cb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T8.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \b evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A3_T8
+description: >
+ Execute /\bro/.exec("pilot\nsoviet robot\topenoffice") and check
+ results
+---*/
+
+var __executed = /\bro/.exec("pilot\nsoviet robot\topenoffice");
+
+var __expected = ["ro"];
+__expected.index = 13;
+__expected.input = "pilot\nsoviet robot\topenoffice";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T9.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T9.js
new file mode 100644
index 0000000000..98da926ed4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A3_T9.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \b evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A3_T9
+description: >
+ Execute /r\b/.exec("pilot\nsoviet robot\topenoffice") and check
+ results
+---*/
+
+var __executed = /r\b/.test("pilot\nsoviet robot\topenoffice");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T1.js
new file mode 100644
index 0000000000..6714880306
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T1.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \B evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A4_T1
+description: >
+ Execute /\Bevil\B/.exec("devils arise\tfor\nevil") and check
+ results
+---*/
+
+var __executed = /\Bevil\B/.exec("devils arise\tfor\nevil");
+
+var __expected = ["evil"];
+__expected.index = 1;
+__expected.input = "devils arise\tfor\nevil";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T2.js
new file mode 100644
index 0000000000..19f5f976f4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T2.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \B evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A4_T2
+description: >
+ Execute /[f-z]e\B/.exec("devils arise\tfor\nevil") and check
+ results
+---*/
+
+var __executed = /[f-z]e\B/.exec("devils arise\tfor\nrevil");
+
+var __expected = ["re"];
+__expected.index = 17;
+__expected.input = "devils arise\tfor\nrevil";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T3.js
new file mode 100644
index 0000000000..cb9b12e484
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T3.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \B evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A4_T3
+description: Execute /\Bo\B/.exec("devils arise\tfor\nevil") and check results
+---*/
+
+var __executed = /\Bo\B/i.exec("devils arise\tfOr\nrevil");
+
+var __expected = ["O"];
+__expected.index = 14;
+__expected.input = "devils arise\tfOr\nrevil";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T4.js
new file mode 100644
index 0000000000..696fa8745a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T4.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \B evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A4_T4
+description: Execute /\B\w\B/.exec("devils arise\tfor\nevil") and check results
+---*/
+
+var __executed = /\B\w\B/.exec("devils arise\tfor\nrevil");
+
+var __expected = ["e"];
+__expected.index = 1;
+__expected.input = "devils arise\tfor\nrevil";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T5.js
new file mode 100644
index 0000000000..68a46190c7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T5.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \B evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A4_T5
+description: Execute /\w\B/.exec("devils arise\tfor\nevil") and check results
+---*/
+
+var __executed = /\w\B/.exec("devils arise\tfor\nrevil");
+
+var __expected = ["d"];
+__expected.index = 0;
+__expected.input = "devils arise\tfor\nrevil";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T6.js
new file mode 100644
index 0000000000..fef789b367
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T6.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \B evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A4_T6
+description: Execute /\B\w/.exec("devils arise\tfor\nevil") and check results
+---*/
+
+var __executed = /\B\w/.exec("devils arise\tfor\nrevil");
+
+var __expected = ["e"];
+__expected.index = 1;
+__expected.input = "devils arise\tfor\nrevil";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T7.js
new file mode 100644
index 0000000000..1da61dbe06
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T7.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \B evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A4_T7
+description: >
+ Execute /\B[^z]{4}\B/.exec("devil arise\tforzzx\nevils") and
+ check results
+---*/
+
+var __executed = /\B[^z]{4}\B/.exec("devil arise\tforzzx\nevils");
+
+var __expected = ["il a"];
+__expected.index = 3;
+__expected.input = "devil arise\tforzzx\nevils";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T8.js
new file mode 100644
index 0000000000..486eeac080
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A4_T8.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Assertion :: \B evaluates by returning an internal
+ AssertionTester closure that takes a State argument x and performs the ...
+es5id: 15.10.2.6_A4_T8
+description: >
+ Execute /\B\w{4}\B/.exec("devil arise\tforzzx\nevils") and check
+ results
+---*/
+
+var __executed = /\B\w{4}\B/.exec("devil arise\tforzzx\nevils");
+
+var __expected = ["orzz"];
+__expected.index = 13;
+__expected.input = "devil arise\tforzzx\nevils";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A5_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A5_T1.js
new file mode 100644
index 0000000000..23b8899285
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A5_T1.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Since assertion evaluating do not change endIndex repetition of assertion
+ does the same result
+es5id: 15.10.2.6_A5_T1
+description: Execute /^^^^^^^robot$$$$/.exec("robot") and check results
+---*/
+
+var __executed = /^^^^^^^robot$$$$/.exec("robot");
+
+var __expected = ["robot"];
+__expected.index = 0;
+__expected.input = "robot";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A5_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A5_T2.js
new file mode 100644
index 0000000000..75b64eb6c4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A5_T2.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Since assertion evaluating do not change endIndex repetition of assertion
+ does the same result
+es5id: 15.10.2.6_A5_T2
+description: >
+ Execute /\B\B\B\B\B\Bbot\b\b\b\b\b\b\b/.exec("robot wall-e") and
+ check results
+---*/
+
+var __executed = /\B\B\B\B\B\Bbot\b\b\b\b\b\b\b/.exec("robot wall-e");
+
+var __expected = ["bot"];
+__expected.index = 2;
+__expected.input = "robot wall-e";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A6_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A6_T1.js
new file mode 100644
index 0000000000..0a20bbd8de
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A6_T1.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Assertions in combination
+es5id: 15.10.2.6_A6_T1
+description: >
+ while asterix is non greedy it is run till the end because of
+ dollar assertion
+---*/
+
+var __executed = /^.*?$/.exec("Hello World");
+
+var __expected = ["Hello World"];
+__expected.index = 0;
+__expected.input = "Hello World";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A6_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A6_T2.js
new file mode 100644
index 0000000000..0bbaf8cb71
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A6_T2.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Assertions in combination
+es5id: 15.10.2.6_A6_T2
+description: Execute /^.*?/.exec("Hello World") and check results
+---*/
+
+var __executed = /^.*?/.exec("Hello World");
+
+var __expected = [""];
+__expected.index = 0;
+__expected.input = "Hello World";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A6_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A6_T3.js
new file mode 100644
index 0000000000..c7c25431ce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A6_T3.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Assertions in combination
+es5id: 15.10.2.6_A6_T3
+description: while asterix is non greedy it is run till matches end or colon
+---*/
+
+var __executed = /^.*?(:|$)/.exec("Hello: World");
+
+var __expected = ["Hello:", ":"];
+__expected.index = 0;
+__expected.input = "Hello: World";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A6_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A6_T4.js
new file mode 100644
index 0000000000..8dbaa0ba08
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.6_A6_T4.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Assertions in combination
+es5id: 15.10.2.6_A6_T4
+description: "Execute /^.*(:|$)/.exec(\"Hello: World\") and check results"
+---*/
+
+var __executed = /^.*(:|$)/.exec("Hello: World");
+
+var __expected = ["Hello: World", ""];
+__expected.index = 0;
+__expected.input = "Hello: World";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T1.js
new file mode 100644
index 0000000000..e8072e7423
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T1.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , DecimalDigits }
+ evaluates as ...
+es5id: 15.10.2.7_A1_T1
+description: Execute /\d{2,4}/.exec("the answer is 42") and check results
+---*/
+
+var __executed = /\d{2,4}/.exec("the answer is 42");
+
+var __expected = ["42"];
+__expected.index = 14;
+__expected.input = "the answer is 42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T10.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T10.js
new file mode 100644
index 0000000000..10983028b7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T10.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , DecimalDigits }
+ evaluates as ...
+es5id: 15.10.2.7_A1_T10
+description: Execute /b{0,93}c/.exec("aaabbbbcccddeeeefffff") and check results
+---*/
+
+var __executed = /b{0,93}c/.exec("aaabbbbcccddeeeefffff");
+
+var __expected = ["bbbbc"];
+__expected.index = 3;
+__expected.input = "aaabbbbcccddeeeefffff";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T11.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T11.js
new file mode 100644
index 0000000000..89a51c5b76
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T11.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , DecimalDigits }
+ evaluates as ...
+es5id: 15.10.2.7_A1_T11
+description: Execute /bx{0,93}c/.exec("aaabbbbcccddeeeefffff") and check results
+---*/
+
+var __executed = /bx{0,93}c/.exec("aaabbbbcccddeeeefffff");
+
+var __expected = ["bc"];
+__expected.index = 6;
+__expected.input = "aaabbbbcccddeeeefffff";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T12.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T12.js
new file mode 100644
index 0000000000..6f01e39452
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T12.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , DecimalDigits }
+ evaluates as ...
+es5id: 15.10.2.7_A1_T12
+description: Execute /.{0,93}/.exec("weirwerdf") and check results
+---*/
+
+var __executed = /.{0,93}/.exec("weirwerdf");
+
+var __expected = ["weirwerdf"];
+__expected.index = 0;
+__expected.input = "weirwerdf";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T2.js
new file mode 100644
index 0000000000..9f57db24d3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T2.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , DecimalDigits }
+ evaluates as ...
+es5id: 15.10.2.7_A1_T2
+description: Execute /\d{2,4}/.test("the 7 movie") and check results
+---*/
+
+var __executed = /\d{2,4}/.test("the 7 movie");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T3.js
new file mode 100644
index 0000000000..bd101cb36e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T3.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , DecimalDigits }
+ evaluates as ...
+es5id: 15.10.2.7_A1_T3
+description: >
+ Execute /\d{2,4}/.exec("the 20000 Leagues Under the Sea book") and
+ check results
+---*/
+
+var __executed = /\d{2,4}/.exec("the 20000 Leagues Under the Sea book");
+
+var __expected = ["2000"];
+__expected.index = 4;
+__expected.input = "the 20000 Leagues Under the Sea book";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T4.js
new file mode 100644
index 0000000000..f6fac80150
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T4.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , DecimalDigits }
+ evaluates as ...
+es5id: 15.10.2.7_A1_T4
+description: Execute /\d{2,4}/.exec("the Fahrenheit 451 book") and check results
+---*/
+
+var __executed = /\d{2,4}/.exec("the Fahrenheit 451 book");
+
+var __expected = ["451"];
+__expected.index = 15;
+__expected.input = "the Fahrenheit 451 book";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T5.js
new file mode 100644
index 0000000000..fa380832b6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T5.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , DecimalDigits }
+ evaluates as ...
+es5id: 15.10.2.7_A1_T5
+description: Execute /\d{2,4}/.exec("the 1984 novel") and check results
+---*/
+
+var __executed = /\d{2,4}/.exec("the 1984 novel");
+
+var __expected = ["1984"];
+__expected.index = 4;
+__expected.input = "the 1984 novel";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T6.js
new file mode 100644
index 0000000000..1ea6f51f11
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T6.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , DecimalDigits }
+ evaluates as ...
+es5id: 15.10.2.7_A1_T6
+description: Execute /\d{2,4}/.exec("0a0\u0031\u0031b") and check results
+---*/
+
+var __executed = /\d{2,4}/.exec("0a0\u0031\u0031b");
+
+var __expected = ["011"];
+__expected.index = 2;
+__expected.input = "0a011b";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T7.js
new file mode 100644
index 0000000000..9c99440b79
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T7.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , DecimalDigits }
+ evaluates as ...
+es5id: 15.10.2.7_A1_T7
+description: Execute /\d{2,4}/.exec("0a0\u0031\u003122b") and check results
+---*/
+
+var __executed = /\d{2,4}/.exec("0a0\u0031\u003122b");
+
+var __expected = ["0112"];
+__expected.index = 2;
+__expected.input = "0a01122b";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T8.js
new file mode 100644
index 0000000000..e0bb7ef121
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T8.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , DecimalDigits }
+ evaluates as ...
+es5id: 15.10.2.7_A1_T8
+description: Execute /b{2,3}c/.exec("aaabbbbcccddeeeefffff") and check results
+---*/
+
+var __executed = /b{2,3}c/.exec("aaabbbbcccddeeeefffff");
+
+var __expected = ["bbbc"];
+__expected.index = 4;
+__expected.input = "aaabbbbcccddeeeefffff";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T9.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T9.js
new file mode 100644
index 0000000000..a6fab5cedb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A1_T9.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , DecimalDigits }
+ evaluates as ...
+es5id: 15.10.2.7_A1_T9
+description: Execute /b{42,93}c/.exec("aaabbbbcccddeeeefffff") and check results
+---*/
+
+var __executed = /b{42,93}c/.test("aaabbbbcccddeeeefffff");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A2_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A2_T1.js
new file mode 100644
index 0000000000..f44569d91b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A2_T1.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ i) The production QuantifierPrefix :: { DecimalDigits } evaluates...
+ ii) The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1
+es5id: 15.10.2.7_A2_T1
+description: Execute /\w{3}\d?/.exec("CE\uFFFFL\uFFDDbox127") and check results
+---*/
+
+var __executed = /\w{3}\d?/.exec("CE\uFFFFL\uFFDDbox127");
+
+var __expected = ["box1"];
+__expected.index = 5;
+__expected.input = "CE\uFFFFL\uFFDDbox127";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A2_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A2_T2.js
new file mode 100644
index 0000000000..c32caec3cb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A2_T2.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ i) The production QuantifierPrefix :: { DecimalDigits } evaluates...
+ ii) The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1
+es5id: 15.10.2.7_A2_T2
+description: Execute /\w{3}\d?/.exec("CELL\uFFDDbox127") and check results
+---*/
+
+var __executed = /\w{3}\d?/.exec("CELL\uFFDDbox127");
+
+var __expected = ["CEL"];
+__expected.index = 0;
+__expected.input = "CELL\uFFDDbox127";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A2_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A2_T3.js
new file mode 100644
index 0000000000..e54ef03785
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A2_T3.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ i) The production QuantifierPrefix :: { DecimalDigits } evaluates...
+ ii) The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1
+es5id: 15.10.2.7_A2_T3
+description: Execute /b{2}c/.exec("aaabbbbcccddeeeefffff") and check results
+---*/
+
+var __executed = /b{2}c/.exec("aaabbbbcccddeeeefffff");
+
+var __expected = ["bbc"];
+__expected.index = 5;
+__expected.input = "aaabbbbcccddeeeefffff";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A2_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A2_T4.js
new file mode 100644
index 0000000000..e11162cc6c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A2_T4.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ i) The production QuantifierPrefix :: { DecimalDigits } evaluates...
+ ii) The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1
+es5id: 15.10.2.7_A2_T4
+description: Execute /b{8}c/.test("aaabbbbcccddeeeefffff") and check results
+---*/
+
+var __executed = /b{8}/.test("aaabbbbcccddeeeefffff");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T1.js
new file mode 100644
index 0000000000..072d081318
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T1.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: + evaluates by returning the two
+ results 1 and \infty
+es5id: 15.10.2.7_A3_T1
+description: Execute /\s+java\s+/.exec("language java\n") and check results
+---*/
+
+var __executed = /\s+java\s+/.exec("language java\n");
+
+var __expected = [" java\n"];
+__expected.index = 8;
+__expected.input = "language java\n";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T10.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T10.js
new file mode 100644
index 0000000000..4315cc7f54
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T10.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: + evaluates by returning the two
+ results 1 and \infty
+es5id: 15.10.2.7_A3_T10
+description: Execute /o+/.test("abcdefg") and check results
+---*/
+
+var __executed = /o+/.test("abcdefg");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T11.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T11.js
new file mode 100644
index 0000000000..c0f1d1ce9c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T11.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: + evaluates by returning the two
+ results 1 and \infty
+es5id: 15.10.2.7_A3_T11
+description: Execute /d+/.exec("abcdefg") and check results
+---*/
+
+var __executed = /d+/.exec("abcdefg");
+
+var __expected = ["d"];
+__expected.index = 3;
+__expected.input = "abcdefg";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T12.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T12.js
new file mode 100644
index 0000000000..2e135ae152
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T12.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: + evaluates by returning the two
+ results 1 and \infty
+es5id: 15.10.2.7_A3_T12
+description: Execute /(b+)(b+)(b+)/.exec("abbbbbbbc") and check results
+---*/
+
+var __executed = /(b+)(b+)(b+)/.exec("abbbbbbbc");
+
+var __expected = ["bbbbbbb","bbbbb","b","b"];
+__expected.index = 1;
+__expected.input = "abbbbbbbc";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T13.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T13.js
new file mode 100644
index 0000000000..5515362667
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T13.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: + evaluates by returning the two
+ results 1 and \infty
+es5id: 15.10.2.7_A3_T13
+description: Execute /(b+)(b*)/.exec("abbbbbbbc") and check results
+---*/
+
+var __executed = /(b+)(b*)/.exec("abbbbbbbc");
+
+var __expected = ["bbbbbbb","bbbbbbb",""];
+__expected.index = 1;
+__expected.input = "abbbbbbbc";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T14.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T14.js
new file mode 100644
index 0000000000..0b5fba3cc0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T14.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: + evaluates by returning the two
+ results 1 and \infty
+es5id: 15.10.2.7_A3_T14
+description: Execute /b*b+/.exec("abbbbbbbc") and check results
+---*/
+
+var __executed = /b*b+/.exec("abbbbbbbc");
+
+var __expected = ["bbbbbbb"];
+__expected.index = 1;
+__expected.input = "abbbbbbbc";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T2.js
new file mode 100644
index 0000000000..a39ca721cc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T2.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: + evaluates by returning the two
+ results 1 and \infty
+es5id: 15.10.2.7_A3_T2
+description: Execute /\s+java\s+/.exec("\t java object") and check results
+---*/
+
+var __executed = /\s+java\s+/.exec("\t java object");
+
+var __expected = ["\t java "];
+__expected.index = 0;
+__expected.input = "\t java object";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T3.js
new file mode 100644
index 0000000000..1aeef1d1e5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T3.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: + evaluates by returning the two
+ results 1 and \infty
+es5id: 15.10.2.7_A3_T3
+description: Execute /\s+java\s+/.test("\t javax package") and check results
+---*/
+
+var __executed = /\s+java\s+/.test("\t javax package");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T4.js
new file mode 100644
index 0000000000..31a6563c49
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T4.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: + evaluates by returning the two
+ results 1 and \infty
+es5id: 15.10.2.7_A3_T4
+description: Execute /\s+java\s+/.test("java\n\nobject") and check results
+---*/
+
+var __executed = /\s+java\s+/.test("java\n\nobject");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T5.js
new file mode 100644
index 0000000000..5470c84056
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T5.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: + evaluates by returning the two
+ results 1 and \infty
+es5id: 15.10.2.7_A3_T5
+description: >
+ Execute /[a-z]+\d+/.exec("x 2 ff 55 x2 as1 z12 abc12.0") and check
+ results
+---*/
+
+var __executed = /[a-z]+\d+/.exec("x 2 ff 55 x2 as1 z12 abc12.0");
+
+var __expected = ["x2"];
+__expected.index = 10;
+__expected.input = "x 2 ff 55 x2 as1 z12 abc12.0";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T6.js
new file mode 100644
index 0000000000..82fdad1ebb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T6.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: + evaluates by returning the two
+ results 1 and \infty
+es5id: 15.10.2.7_A3_T6
+description: Execute /[a-z]+\d+/.exec("__abc123.0") and check results
+---*/
+
+var __executed = /[a-z]+\d+/.exec("__abc123.0");
+
+var __expected = ["abc123"];
+__expected.index = 2;
+__expected.input = "__abc123.0";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T7.js
new file mode 100644
index 0000000000..5b40564801
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T7.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: + evaluates by returning the two
+ results 1 and \infty
+es5id: 15.10.2.7_A3_T7
+description: >
+ Execute /[a-z]+(\d+)/.exec("x 2 ff 55 x2 as1 z12 abc12.0") and
+ check results
+---*/
+
+var __executed = /[a-z]+(\d+)/.exec("x 2 ff 55 x2 as1 z12 abc12.0");
+
+var __expected = ["x2","2"];
+__expected.index = 10;
+__expected.input = "x 2 ff 55 x2 as1 z12 abc12.0";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T8.js
new file mode 100644
index 0000000000..bac3261480
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T8.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: + evaluates by returning the two
+ results 1 and \infty
+es5id: 15.10.2.7_A3_T8
+description: Execute /[a-z]+(\d+)/.exec("__abc123.0") and check results
+---*/
+
+var __executed = /[a-z]+(\d+)/.exec("__abc123.0");
+
+var __expected = ["abc123","123"];
+__expected.index = 2;
+__expected.input = "__abc123.0";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T9.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T9.js
new file mode 100644
index 0000000000..3b10792323
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A3_T9.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: + evaluates by returning the two
+ results 1 and \infty
+es5id: 15.10.2.7_A3_T9
+description: Execute /d+/.exec("abcdddddefg") and check results
+---*/
+
+var __executed = /d+/.exec("abcdddddefg");
+
+var __expected = ["ddddd"];
+__expected.index = 3;
+__expected.input = "abcdddddefg";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T1.js
new file mode 100644
index 0000000000..f0cd20dee5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T1.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T1
+description: Execute /[^"]* /.exec('"beast"-nickname') and check results
+---*/
+
+var __executed = /[^"]*/.exec('"beast"-nickname');
+
+var __expected = [""];
+__expected.index = 0;
+__expected.input = '"beast"-nickname';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T10.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T10.js
new file mode 100644
index 0000000000..948d57a348
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T10.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T10
+description: Execute /d* /.exec('abcddddefg') and check results
+---*/
+
+var __executed = /d*/.exec('abcddddefg');
+
+var __expected = [""];
+__expected.index = 0;
+__expected.input = 'abcddddefg';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T11.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T11.js
new file mode 100644
index 0000000000..b681718210
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T11.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T11
+description: Execute /cd* /.exec('abcddddefg') and check results
+---*/
+
+var __executed = /cd*/.exec('abcddddefg');
+
+var __expected = ["cdddd"];
+__expected.index = 2;
+__expected.input = 'abcddddefg';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T12.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T12.js
new file mode 100644
index 0000000000..395efeb782
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T12.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T12
+description: Execute /cx*d/.exec('abcdefg') and check results
+---*/
+
+var __executed = /cx*d/.exec('abcdefg');
+
+var __expected = ["cd"];
+__expected.index = 2;
+__expected.input = 'abcdefg';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T13.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T13.js
new file mode 100644
index 0000000000..3923e10cea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T13.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T13
+description: Execute /(x*)(x+)/.exec('xxxxxxx') and check results
+---*/
+
+var __executed = /(x*)(x+)/.exec('xxxxxxx');
+
+var __expected = ["xxxxxxx","xxxxxx","x"];
+__expected.index = 0;
+__expected.input = 'xxxxxxx';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T14.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T14.js
new file mode 100644
index 0000000000..b2c67150d2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T14.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T14
+description: Execute /(\d*)(\d+)/.exec('1234567890') and check results
+---*/
+
+var __executed = /(\d*)(\d+)/.exec('1234567890');
+
+var __expected = ["1234567890","123456789","0"];
+__expected.index = 0;
+__expected.input = '1234567890';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T15.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T15.js
new file mode 100644
index 0000000000..17d1e74011
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T15.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T15
+description: Execute /(\d*)\d(\d+)/.exec('1234567890') and check results
+---*/
+
+var __executed = /(\d*)\d(\d+)/.exec('1234567890');
+
+var __expected = ["1234567890","12345678","0"];
+__expected.index = 0;
+__expected.input = '1234567890';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T16.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T16.js
new file mode 100644
index 0000000000..7a6fb47f58
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T16.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T16
+description: Execute /(x+)(x*)/.exec('xxxxxxx') and check results
+---*/
+
+var __executed = /(x+)(x*)/.exec('xxxxxxx');
+
+var __expected = ["xxxxxxx","xxxxxxx",""];
+__expected.index = 0;
+__expected.input = 'xxxxxxx';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T17.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T17.js
new file mode 100644
index 0000000000..3b101535fd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T17.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T17
+description: Execute /x*y+$/.exec('xxxxxxyyyyyy') and check results
+---*/
+
+var __executed = /x*y+$/.exec('xxxxxxyyyyyy');
+
+var __expected = ["xxxxxxyyyyyy"];
+__expected.index = 0;
+__expected.input = 'xxxxxxyyyyyy';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T18.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T18.js
new file mode 100644
index 0000000000..7a0bc65cde
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T18.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T18
+description: Execute /[\d]*[\s]*bc./.exec('abcdef') and check results
+---*/
+
+var __executed = /[\d]*[\s]*bc./.exec('abcdef');
+
+var __expected = ["bcd"];
+__expected.index = 1;
+__expected.input = 'abcdef';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T19.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T19.js
new file mode 100644
index 0000000000..602e50140a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T19.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T19
+description: Execute /bc..[\d]*[\s]* /.exec('abcdef') and check results
+---*/
+
+var __executed = /bc..[\d]*[\s]*/.exec('abcdef');
+
+var __expected = ["bcde"];
+__expected.index = 1;
+__expected.input = 'abcdef';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T2.js
new file mode 100644
index 0000000000..58d918c352
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T2.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T2
+description: "Execute /[^\"]* /.exec('alice said: \"don\\'t\"') and check results"
+---*/
+
+var __executed = /[^"]*/.exec('alice said: "don\'t"');
+
+var __expected = ["alice said: "];
+__expected.index = 0;
+__expected.input = 'alice said: "don\'t"';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T20.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T20.js
new file mode 100644
index 0000000000..63b815f24f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T20.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T20
+description: Execute /.* /.exec('a1b2c3') and check results
+---*/
+
+var __executed = /.*/.exec('a1b2c3');
+
+var __expected = ["a1b2c3"];
+__expected.index = 0;
+__expected.input = 'a1b2c3';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T21.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T21.js
new file mode 100644
index 0000000000..cf968dbe01
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T21.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T21
+description: Execute /[xyz]*1/.test('a0.b2.c3') and check results
+---*/
+
+var __executed = /[xyz]*1/.test('a0.b2.c3');
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T3.js
new file mode 100644
index 0000000000..52bacbcce1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T3.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T3
+description: Execute /[^"]* /.exec("before\'i\'start") and check results
+---*/
+
+var __executed = /[^"]*/.exec("before\'i\'start");
+
+var __expected = ["before\'i\'start"];
+__expected.index = 0;
+__expected.input = "before\'i\'start";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T4.js
new file mode 100644
index 0000000000..2b54118720
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T4.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T4
+description: >
+ Execute /[^"]* /.exec('alice \"sweep\": "don\'t"') and check
+ results
+---*/
+
+var __executed = /[^"]*/.exec('alice \"sweep\": "don\'t"');
+
+var __expected = ["alice "];
+__expected.index = 0;
+__expected.input = 'alice \"sweep\": "don\'t"';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T5.js
new file mode 100644
index 0000000000..23a729ff41
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T5.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T5
+description: >
+ Execute /[^"]* /.exec('alice \u0022sweep\u0022: "don\'t"') and
+ check results
+---*/
+
+var __executed = /[^"]*/.exec('alice \u0022sweep\u0022: "don\'t"');
+
+var __expected = ["alice "];
+__expected.index = 0;
+__expected.input = 'alice "sweep": "don\'t"';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T6.js
new file mode 100644
index 0000000000..c4a1af3672
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T6.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T6
+description: >
+ Execute /["'][^"']*["']/.exec('alice \u0022sweep\u0022: "don\'t"')
+ and check results
+---*/
+
+var __executed = /["'][^"']*["']/.exec('alice \u0022sweep\u0022: "don\'t"');
+
+var __expected = ["\"sweep\""];
+__expected.index = 6;
+__expected.input = 'alice "sweep": "don\'t"';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T7.js
new file mode 100644
index 0000000000..da460ae8c4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T7.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T7
+description: >
+ Execute /["'][^"']*["']/.exec('alice cries out: \'don\'t\'') and
+ check results
+---*/
+
+var __executed = /["'][^"']*["']/.exec('alice cries out: \'don\'t\'');
+
+var __expected = ["\'don\'"];
+__expected.index = 17;
+__expected.input = 'alice cries out: \'don\'t\'';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T8.js
new file mode 100644
index 0000000000..e8c14f6abc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T8.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T8
+description: >
+ Execute /["'][^"']*["']/.test('alice cries out: don\'t') and check
+ results
+---*/
+
+var __executed = /["'][^"']*["']/.test('alice cries out: don\'t');
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T9.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T9.js
new file mode 100644
index 0000000000..fe9bb09679
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A4_T9.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: * evaluates by returning the two
+ results 0 and \infty
+es5id: 15.10.2.7_A4_T9
+description: >
+ Execute /["'][^"']*["']/.exec('alice cries out:\"\"') and check
+ results
+---*/
+
+var __executed = /["'][^"']*["']/.exec('alice cries out:\"\"');
+
+var __expected = ['\"\"'];
+__expected.index = 16;
+__expected.input = 'alice cries out:\"\"';
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T1.js
new file mode 100644
index 0000000000..5e3c767f9a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T1.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: ? evaluates by returning the two
+ results 0 and 1
+es5id: 15.10.2.7_A5_T1
+description: >
+ Execute /java(script)?/.exec("state: javascript is extension of
+ ecma script") and check results
+---*/
+
+var __executed = /java(script)?/.exec("state: javascript is extension of ecma script");
+
+var __expected = ["javascript", "script"];
+__expected.index = 7;
+__expected.input = "state: javascript is extension of ecma script";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T10.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T10.js
new file mode 100644
index 0000000000..ef584ffdd5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T10.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: ? evaluates by returning the two
+ results 0 and 1
+es5id: 15.10.2.7_A5_T10
+description: Execute /ab?c?d?x?y?z/.exec("123az789") and check results
+---*/
+
+var __executed = /ab?c?d?x?y?z/.exec("123az789");
+
+var __expected = ["az"];
+__expected.index = 3;
+__expected.input = "123az789";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T11.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T11.js
new file mode 100644
index 0000000000..ff6e848627
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T11.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: ? evaluates by returning the two
+ results 0 and 1
+es5id: 15.10.2.7_A5_T11
+description: Execute /\??\??\??\??\??/.exec("?????") and check results
+---*/
+
+var __executed = /\??\??\??\??\??/.exec("?????");
+
+var __expected = ["?????"];
+__expected.index = 0;
+__expected.input = "?????";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T12.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T12.js
new file mode 100644
index 0000000000..26ea7cf5f8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T12.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: ? evaluates by returning the two
+ results 0 and 1
+es5id: 15.10.2.7_A5_T12
+description: Execute /.?.?.?.?.?.?.?/.exec("test") and check results
+---*/
+
+var __executed = /.?.?.?.?.?.?.?/.exec("test");
+
+var __expected = ["test"];
+__expected.index = 0;
+__expected.input = "test";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T2.js
new file mode 100644
index 0000000000..c564977263
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T2.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: ? evaluates by returning the two
+ results 0 and 1
+es5id: 15.10.2.7_A5_T2
+description: >
+ Execute /java(script)?/.exec("state: java and javascript are
+ vastly different") and check results
+---*/
+
+var __executed = /java(script)?/.exec("state: java and javascript are vastly different");
+
+var __expected = ["java", undefined];
+__expected.index = 7;
+__expected.input = "state: java and javascript are vastly different";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T3.js
new file mode 100644
index 0000000000..e1ffbf274d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T3.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: ? evaluates by returning the two
+ results 0 and 1
+es5id: 15.10.2.7_A5_T3
+description: >
+ Execute /java(script)?/.test("state: both Java and JavaScript used
+ in web development") and check results
+---*/
+
+var __executed = /java(script)?/.test("state: both Java and JavaScript used in web development");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T4.js
new file mode 100644
index 0000000000..2d92531837
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T4.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: ? evaluates by returning the two
+ results 0 and 1
+es5id: 15.10.2.7_A5_T4
+description: Execute /cd?e/.exec("abcdef") and check results
+---*/
+
+var __executed = /cd?e/.exec("abcdef");
+
+var __expected = ["cde"];
+__expected.index = 2;
+__expected.input = "abcdef";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T5.js
new file mode 100644
index 0000000000..e82cf268ec
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T5.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: ? evaluates by returning the two
+ results 0 and 1
+es5id: 15.10.2.7_A5_T5
+description: Execute /cdx?e/.exec("abcdef") and check results
+---*/
+
+var __executed = /cdx?e/.exec("abcdef");
+
+var __expected = ["cde"];
+__expected.index = 2;
+__expected.input = "abcdef";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T6.js
new file mode 100644
index 0000000000..866129d5ca
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T6.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: ? evaluates by returning the two
+ results 0 and 1
+es5id: 15.10.2.7_A5_T6
+description: Execute /o?pqrst/.exec("pqrstuvw") and check results
+---*/
+
+var __executed = /o?pqrst/.exec("pqrstuvw");
+
+var __expected = ["pqrst"];
+__expected.index = 0;
+__expected.input = "pqrstuvw";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T7.js
new file mode 100644
index 0000000000..2744ff1d60
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T7.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: ? evaluates by returning the two
+ results 0 and 1
+es5id: 15.10.2.7_A5_T7
+description: Execute /x?y?z?/.exec("abcd") and check results
+---*/
+
+var __executed = /x?y?z?/.exec("abcd");
+
+var __expected = [""];
+__expected.index = 0;
+__expected.input = "abcd";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T8.js
new file mode 100644
index 0000000000..7198133279
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T8.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: ? evaluates by returning the two
+ results 0 and 1
+es5id: 15.10.2.7_A5_T8
+description: Execute /x?ay?bz?c/.exec("abcd") and check results
+---*/
+
+var __executed = /x?ay?bz?c/.exec("abcd");
+
+var __expected = ["abc"];
+__expected.index = 0;
+__expected.input = "abcd";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T9.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T9.js
new file mode 100644
index 0000000000..400828d583
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A5_T9.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: ? evaluates by returning the two
+ results 0 and 1
+es5id: 15.10.2.7_A5_T9
+description: Execute /b?b?b?b/.exec("abbbbc") and check results
+---*/
+
+var __executed = /b?b?b?b/.exec("abbbbc");
+
+var __expected = ["bbbb"];
+__expected.index = 1;
+__expected.input = "abbbbc";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T1.js
new file mode 100644
index 0000000000..54c1647ee7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T1.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , }evaluates as follows:
+ i) Let i be the MV of DecimalDigits
+ ii) Return the two results i and \infty
+es5id: 15.10.2.7_A6_T1
+description: Execute /b{2,}c/.exec("aaabbbbcccddeeeefffff") and check results
+---*/
+
+var __executed = /b{2,}c/.exec("aaabbbbcccddeeeefffff");
+
+var __expected = ["bbbbc"];
+__expected.index = 3;
+__expected.input = "aaabbbbcccddeeeefffff";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T2.js
new file mode 100644
index 0000000000..92975448cf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , }evaluates as follows:
+ i) Let i be the MV of DecimalDigits
+ ii) Return the two results i and \infty
+es5id: 15.10.2.7_A6_T2
+description: Execute /b{8,}c/.test("aaabbbbcccddeeeefffff") and check results
+---*/
+
+var __executed = /b{8,}c/.test("aaabbbbcccddeeeefffff");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T3.js
new file mode 100644
index 0000000000..3262cab91e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T3.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , }evaluates as follows:
+ i) Let i be the MV of DecimalDigits
+ ii) Return the two results i and \infty
+es5id: 15.10.2.7_A6_T3
+description: Execute /\d{1,}/.exec("wqe456646dsff") and check results
+---*/
+
+var __executed = /\d{1,}/.exec("wqe456646dsff");
+
+var __expected = ["456646"];
+__expected.index = 3;
+__expected.input = "wqe456646dsff";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T4.js
new file mode 100644
index 0000000000..fad3bca88b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T4.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , }evaluates as follows:
+ i) Let i be the MV of DecimalDigits
+ ii) Return the two results i and \infty
+es5id: 15.10.2.7_A6_T4
+description: Execute /(123){1,}/.exec("123123") and check results
+---*/
+
+var __executed = /(123){1,}/.exec("123123");
+
+var __expected = ["123123","123"];
+__expected.index = 0;
+__expected.input = "123123";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T5.js
new file mode 100644
index 0000000000..96fa2c7f79
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T5.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , }evaluates as follows:
+ i) Let i be the MV of DecimalDigits
+ ii) Return the two results i and \infty
+es5id: 15.10.2.7_A6_T5
+description: Execute /(123){1,}x\1/.exec("123123x123") and check results
+---*/
+
+var __executed = /(123){1,}x\1/.exec("123123x123");
+
+var __expected = ["123123x123","123"];
+__expected.index = 0;
+__expected.input = "123123x123";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T6.js
new file mode 100644
index 0000000000..32ede9c0a7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.7_A6_T6.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production QuantifierPrefix :: { DecimalDigits , }evaluates as follows:
+ i) Let i be the MV of DecimalDigits
+ ii) Return the two results i and \infty
+es5id: 15.10.2.7_A6_T6
+description: Execute /x{1,2}x{1,}/.exec("xxxxxxx") and check results
+---*/
+
+var __executed = /x{1,2}x{1,}/.exec("xxxxxxx");
+
+var __expected = ["xxxxxxx"];
+__expected.index = 0;
+__expected.input = "xxxxxxx";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T1.js
new file mode 100644
index 0000000000..29b1ff56af
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T1.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The form (?= Disjunction ) specifies a zero-width positive lookahead.
+ In order for it to succeed, the pattern inside Disjunction must match at the current position, but the current position is not advanced before matching the sequel.
+ If Disjunction can match at the current position in several ways, only the first one is tried
+es5id: 15.10.2.8_A1_T1
+description: Execute /(?=(a+))/.exec("baaabac") and check results
+---*/
+
+var __executed = /(?=(a+))/.exec("baaabac");
+
+var __expected = ["", "aaa"];
+__expected.index = 1;
+__expected.input = "baaabac";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T2.js
new file mode 100644
index 0000000000..2b7bb21a44
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T2.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The form (?= Disjunction ) specifies a zero-width positive lookahead.
+ In order for it to succeed, the pattern inside Disjunction must match at the current position, but the current position is not advanced before matching the sequel.
+ If Disjunction can match at the current position in several ways, only the first one is tried
+es5id: 15.10.2.8_A1_T2
+description: Execute /(?=(a+))a*b\1/.exec("baaabac") and check results
+---*/
+
+var __executed = /(?=(a+))a*b\1/.exec("baaabac");
+
+var __expected = ["aba", "a"];
+__expected.index = 3;
+__expected.input = "baaabac";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T3.js
new file mode 100644
index 0000000000..1c016971a6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T3.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The form (?= Disjunction ) specifies a zero-width positive lookahead.
+ In order for it to succeed, the pattern inside Disjunction must match at the current position, but the current position is not advanced before matching the sequel.
+ If Disjunction can match at the current position in several ways, only the first one is tried
+es5id: 15.10.2.8_A1_T3
+description: >
+ Execute /[Jj]ava([Ss]cript)?(?=\:)/.exec("just Javascript: the way
+ af jedi") and check results
+---*/
+
+var __executed = /[Jj]ava([Ss]cript)?(?=\:)/.exec("just Javascript: the way af jedi");
+
+var __expected = ["Javascript", "script"];
+__expected.index = 5;
+__expected.input = "just Javascript: the way af jedi";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T4.js
new file mode 100644
index 0000000000..250f19027c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T4.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The form (?= Disjunction ) specifies a zero-width positive lookahead.
+ In order for it to succeed, the pattern inside Disjunction must match at the current position, but the current position is not advanced before matching the sequel.
+ If Disjunction can match at the current position in several ways, only the first one is tried
+es5id: 15.10.2.8_A1_T4
+description: >
+ Execute /[Jj]ava([Ss]cript)?(?=\:)/.exec("taste of java: the
+ cookbook ") and check results
+---*/
+
+var __executed = /[Jj]ava([Ss]cript)?(?=\:)/.exec("taste of java: the cookbook ");
+
+var __expected = ["java", undefined];
+__expected.index = 9;
+__expected.input = "taste of java: the cookbook ";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T5.js
new file mode 100644
index 0000000000..4115251998
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A1_T5.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The form (?= Disjunction ) specifies a zero-width positive lookahead.
+ In order for it to succeed, the pattern inside Disjunction must match at the current position, but the current position is not advanced before matching the sequel.
+ If Disjunction can match at the current position in several ways, only the first one is tried
+es5id: 15.10.2.8_A1_T5
+description: >
+ Execute /[Jj]ava([Ss]cript)?(?=\:)/.test("rhino is JavaScript
+ engine") and check results
+---*/
+
+var __executed = /[Jj]ava([Ss]cript)?(?=\:)/.test("rhino is JavaScript engine");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T1.js
new file mode 100644
index 0000000000..97af14fa67
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T1.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The form (?! Disjunction ) specifies a zero-width negative lookahead.
+ In order for it to succeed, the pattern inside Disjunction must fail to match at the current position.
+ The current position is not advanced before matching the sequel
+es5id: 15.10.2.8_A2_T1
+description: >
+ Execute /(.*?)a(?!(a+)b\2c)\2(.*)/.exec("baaabaac") and check
+ results
+---*/
+
+var __executed = /(.*?)a(?!(a+)b\2c)\2(.*)/.exec("baaabaac");
+
+var __expected = ["baaabaac", "ba", undefined, "abaac"];
+__expected.index = 0;
+__expected.input = "baaabaac";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T10.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T10.js
new file mode 100644
index 0000000000..4bf35f2a06
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T10.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The form (?! Disjunction ) specifies a zero-width negative lookahead.
+ In order for it to succeed, the pattern inside Disjunction must fail to match at the current position.
+ The current position is not advanced before matching the sequel
+es5id: 15.10.2.8_A2_T10
+description: Execute /(?!a|b)|c/.exec("bc") and check results
+---*/
+
+var __executed = /(?!a|b)|c/.exec("bc");
+
+var __expected = [""];
+__expected.index = 1;
+__expected.input = "bc";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T11.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T11.js
new file mode 100644
index 0000000000..11ac98acbe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T11.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The form (?! Disjunction ) specifies a zero-width negative lookahead.
+ In order for it to succeed, the pattern inside Disjunction must fail to match at the current position.
+ The current position is not advanced before matching the sequel
+es5id: 15.10.2.8_A2_T11
+description: Execute /(?!a|b)|c/.exec("d") and check results
+---*/
+
+var __executed = /(?!a|b)|c/.exec("d");
+
+var __expected = [""];
+__expected.index = 0;
+__expected.input = "d";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T2.js
new file mode 100644
index 0000000000..d6b8b49fde
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T2.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The form (?! Disjunction ) specifies a zero-width negative lookahead.
+ In order for it to succeed, the pattern inside Disjunction must fail to match at the current position.
+ The current position is not advanced before matching the sequel
+es5id: 15.10.2.8_A2_T2
+description: >
+ Execute /Java(?!Script)([A-Z]\w*)/.exec("using of JavaBeans
+ technology") and check results
+---*/
+
+var __executed = /Java(?!Script)([A-Z]\w*)/.exec("using of JavaBeans technology");
+
+var __expected = ["JavaBeans", "Beans"];
+__expected.index = 9;
+__expected.input = "using of JavaBeans technology";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T3.js
new file mode 100644
index 0000000000..79cc4000a9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T3.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The form (?! Disjunction ) specifies a zero-width negative lookahead.
+ In order for it to succeed, the pattern inside Disjunction must fail to match at the current position.
+ The current position is not advanced before matching the sequel
+es5id: 15.10.2.8_A2_T3
+description: >
+ Execute /Java(?!Script)([A-Z]\w*)/.test("using of Java language")
+ and check results
+---*/
+
+var __executed = /Java(?!Script)([A-Z]\w*)/.test("using of Java language");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T4.js
new file mode 100644
index 0000000000..1739ef884c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T4.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The form (?! Disjunction ) specifies a zero-width negative lookahead.
+ In order for it to succeed, the pattern inside Disjunction must fail to match at the current position.
+ The current position is not advanced before matching the sequel
+es5id: 15.10.2.8_A2_T4
+description: >
+ Execute /Java(?!Script)([A-Z]\w*)/.test("i'm a JavaScripter ") and
+ check results
+---*/
+
+var __executed = /Java(?!Script)([A-Z]\w*)/.test("i'm a JavaScripter ");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T5.js
new file mode 100644
index 0000000000..19941de311
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T5.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The form (?! Disjunction ) specifies a zero-width negative lookahead.
+ In order for it to succeed, the pattern inside Disjunction must fail to match at the current position.
+ The current position is not advanced before matching the sequel
+es5id: 15.10.2.8_A2_T5
+description: >
+ Execute /Java(?!Script)([A-Z]\w*)/.exec("JavaScr oops ipt ") and
+ check results
+---*/
+
+var __executed = /Java(?!Script)([A-Z]\w*)/.exec("JavaScr oops ipt ");
+
+var __expected = ["JavaScr", "Scr"];
+__expected.index = 0;
+__expected.input = "JavaScr oops ipt ";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T6.js
new file mode 100644
index 0000000000..6422a3f641
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T6.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The form (?! Disjunction ) specifies a zero-width negative lookahead.
+ In order for it to succeed, the pattern inside Disjunction must fail to match at the current position.
+ The current position is not advanced before matching the sequel
+es5id: 15.10.2.8_A2_T6
+description: Execute /(\.(?!com|org)|\/)/.exec("ah.info") and check results
+---*/
+
+var __executed = /(\.(?!com|org)|\/)/.exec("ah.info");
+
+var __expected = ['.', '.'];
+__expected.index = 2;
+__expected.input = "ah.info";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T7.js
new file mode 100644
index 0000000000..50a6ab57b1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T7.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The form (?! Disjunction ) specifies a zero-width negative lookahead.
+ In order for it to succeed, the pattern inside Disjunction must fail to match at the current position.
+ The current position is not advanced before matching the sequel
+es5id: 15.10.2.8_A2_T7
+description: Execute /(\.(?!com|org)|\/)/.exec("ah/info") and check results
+---*/
+
+var __executed = /(\.(?!com|org)|\/)/.exec("ah/info");
+
+var __expected = ['/', '/'];
+__expected.index = 2;
+__expected.input = "ah/info";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T8.js
new file mode 100644
index 0000000000..6ae39b2fd6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T8.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The form (?! Disjunction ) specifies a zero-width negative lookahead.
+ In order for it to succeed, the pattern inside Disjunction must fail to match at the current position.
+ The current position is not advanced before matching the sequel
+es5id: 15.10.2.8_A2_T8
+description: Execute /(\.(?!com|org)|\/)/.test("ah.com") and check results
+---*/
+
+var __executed = /(\.(?!com|org)|\/)/.test("ah.com");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T9.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T9.js
new file mode 100644
index 0000000000..5450143ebd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A2_T9.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The form (?! Disjunction ) specifies a zero-width negative lookahead.
+ In order for it to succeed, the pattern inside Disjunction must fail to match at the current position.
+ The current position is not advanced before matching the sequel
+es5id: 15.10.2.8_A2_T9
+description: Execute /(?!a|b)|c/.exec("") and check results
+---*/
+
+var __executed = /(?!a|b)|c/.exec("");
+
+var __expected = [""];
+__expected.index = 0;
+__expected.input = "";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T1.js
new file mode 100644
index 0000000000..cf6d753d75
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T1.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T1
+description: >
+ Execute /([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/.exec("Learning
+ javaScript is funny, really") and check results
+---*/
+
+var __executed = /([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/.exec("Learning javaScript is funny, really");
+
+var __expected = ["javaScript is funny","javaScript","Script","funny"];
+__expected.index = 9;
+__expected.input = "Learning javaScript is funny, really";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T10.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T10.js
new file mode 100644
index 0000000000..5277cdb721
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T10.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T10
+description: Execute /(\d{3})(\d{3})\1\2/.exec("123456123456") and check results
+---*/
+
+var __executed = /(\d{3})(\d{3})\1\2/.exec("123456123456");
+
+var __expected = ["123456123456","123","456"];
+__expected.index = 0;
+__expected.input = "123456123456";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T11.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T11.js
new file mode 100644
index 0000000000..8ef2996ce6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T11.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T11
+description: Execute /a(..(..)..)/.exec("abcdefgh") and check results
+---*/
+
+var __executed = /a(..(..)..)/.exec("abcdefgh");
+
+var __expected = ["abcdefg","bcdefg","de"];
+__expected.index = 0;
+__expected.input = "abcdefgh";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T12.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T12.js
new file mode 100644
index 0000000000..ecd8901659
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T12.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T12
+description: Execute /(a(b(c)))(d(e(f)))/.exec("xabcdefg") and check results
+---*/
+
+var __executed = /(a(b(c)))(d(e(f)))/.exec("xabcdefg");
+
+var __expected = ["abcdef","abc","bc","c","def","ef","f"];
+__expected.index = 1;
+__expected.input = "xabcdefg";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T13.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T13.js
new file mode 100644
index 0000000000..c16fe9f704
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T13.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T13
+description: >
+ Execute /(a(b(c)))(d(e(f)))\2\5/.exec("xabcdefbcefg") and check
+ results
+---*/
+
+var __executed = /(a(b(c)))(d(e(f)))\2\5/.exec("xabcdefbcefg");
+
+var __expected = ["abcdefbcef","abc","bc","c","def","ef","f"];
+__expected.index = 1;
+__expected.input = "xabcdefbcefg";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T14.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T14.js
new file mode 100644
index 0000000000..c0bfcf6127
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T14.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T14
+description: Execute /a(.?)b\1c\1d\1/.exec("abcd") and check results
+---*/
+
+var __executed = /a(.?)b\1c\1d\1/.exec("abcd");
+
+var __expected = ["abcd",""];
+__expected.index = 0;
+__expected.input = "abcd";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T15.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T15.js
new file mode 100644
index 0000000000..07133691c1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T15.js
@@ -0,0 +1,64 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T15
+description: "see bug http:bugzilla.mozilla.org/show_bug.cgi?id=119909"
+---*/
+
+var __strOriginal = "hello";
+var __openParen = '(';
+var __closeParen = ')';
+var __pattern = '';
+var numParens = 200;
+
+for (var i=0; i<numParens; i++)
+ __pattern += __openParen;
+
+__pattern += __strOriginal;
+
+for (i=0; i<numParens; i++)
+ __pattern += __closeParen;
+
+var __re = new RegExp(__pattern);
+
+var __executed = __re.exec(__strOriginal);
+
+var __expected = [];
+for (var i=0; i<=numParens; i++)
+ __expected.push(__strOriginal);
+__expected.index = 0;
+__expected.input = __strOriginal;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T16.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T16.js
new file mode 100644
index 0000000000..b2a4eb435b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T16.js
@@ -0,0 +1,62 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T16
+description: "see bug http:bugzilla.mozilla.org/show_bug.cgi?id=119909"
+---*/
+
+var __strOriginal = "hello";
+var __openParen = '(?:';
+var __closeParen = ')';
+var __pattern = '';
+var numParens = 200;
+
+for (var i=0; i<numParens; i++)
+ __pattern += __openParen;
+
+__pattern += __strOriginal;
+
+for (i=0; i<numParens; i++)
+ __pattern += __closeParen;
+
+var __re = new RegExp(__pattern);
+
+var __executed = __re.exec(__strOriginal);
+
+var __expected = [__strOriginal];
+__expected.index = 0;
+__expected.input = __strOriginal;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T17.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T17.js
new file mode 100644
index 0000000000..3bb4d15d78
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T17.js
@@ -0,0 +1,57 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T17
+description: "see bug http:bugzilla.mozilla.org/show_bug.cgi?id=169497"
+---*/
+
+var __body="";
+__body += '<body onXXX="alert(event.type);">\n';
+__body += '<p>Kibology for all<\/p>\n';
+__body += '<p>All for Kibology<\/p>\n';
+__body += '<\/body>';
+
+var __html="";
+__html += '<html>\n';
+__html += __body;
+__html += '\n<\/html>';
+
+var __executed = /<body.*>((.*\n?)*?)<\/body>/i.exec(__html);
+
+var __expected = [__body, '\n<p>Kibology for all</p>\n<p>All for Kibology</p>\n', '<p>All for Kibology</p>\n'];
+__expected.index = 7;
+__expected.input = __html;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T18.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T18.js
new file mode 100644
index 0000000000..d5a6abd516
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T18.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T18
+description: "see bug http:bugzilla.mozilla.org/show_bug.cgi?id=169534"
+---*/
+
+var __replaced = "To sign up click |here|https:www.xxxx.org/subscribe.htm|".replace(/(\|)([\w\x81-\xff ]*)(\|)([\/a-z][\w:\/\.]*\.[a-z]{3,4})(\|)/ig, '<a href="$4">$2</a>');
+
+var __expected = 'To sign up click <a href="https:www.xxxx.org/subscribe.htm">here</a>';
+
+assert.sameValue(__replaced, __expected, 'The value of __replaced is expected to equal the value of __expected');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T19.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T19.js
new file mode 100644
index 0000000000..d4ceeb9749
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T19.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T19
+description: >
+ Execute /([\S]+([ \t]+[\S]+)*)[ \t]*=[
+ \t]*[\S]+/.exec("Course_Creator = Test") and check results
+---*/
+
+var __executed = /([\S]+([ \t]+[\S]+)*)[ \t]*=[ \t]*[\S]+/.exec("Course_Creator = Test");
+
+var __expected = ["Course_Creator = Test","Course_Creator",undefined];
+__expected.index = 0;
+__expected.input = "Course_Creator = Test";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T2.js
new file mode 100644
index 0000000000..370a1abc26
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T2.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T2
+description: >
+ Execute /([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/.exec("Developing
+ with Java is fun, try it") and check results
+---*/
+
+var __executed = /([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/.exec("Developing with Java is fun, try it");
+
+var __expected = ["Java is fun","Java",undefined,"fun"];
+__expected.index = 16;
+__expected.input = "Developing with Java is fun, try it";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T20.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T20.js
new file mode 100644
index 0000000000..71c30023d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T20.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T20
+description: Execute /^(A)?(A.*)$/.exec("AAA") and check results
+---*/
+
+var __executed = /^(A)?(A.*)$/.exec("AAA");
+
+var __expected = ["AAA","A","AA"];
+__expected.index = 0;
+__expected.input = "AAA";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T21.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T21.js
new file mode 100644
index 0000000000..0d4447f054
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T21.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T21
+description: Execute /^(A)?(A.*)$/.exec("AA") and check results
+---*/
+
+var __executed = /^(A)?(A.*)$/.exec("AA");
+
+var __expected = ["AA","A","A"];
+__expected.index = 0;
+__expected.input = "AA";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T22.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T22.js
new file mode 100644
index 0000000000..4f1c2aad1d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T22.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T22
+description: Execute /^(A)?(A.*)$/.exec("A") and check results
+---*/
+
+var __executed = /^(A)?(A.*)$/.exec("A");
+
+var __expected = ["A",undefined,"A"];
+__expected.index = 0;
+__expected.input = "A";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T23.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T23.js
new file mode 100644
index 0000000000..36fe0946a0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T23.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T23
+description: >
+ Execute /(A)?(A.*)/.exec("zxcasd;fl\\\ ^AAAaaAAaaaf;lrlrzs") and
+ check results
+---*/
+
+var __string = "zxcasd;fl\\\ ^AAAaaAAaaaf;lrlrzs";
+
+var __executed = /(A)?(A.*)/.exec(__string);
+
+var __expected = ["AAAaaAAaaaf;lrlrzs","A","AAaaAAaaaf;lrlrzs"];
+__expected.index = 13;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T24.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T24.js
new file mode 100644
index 0000000000..f77fcd6d4b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T24.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T24
+description: >
+ Execute /(A)?(A.*)/.exec("zxcasd;fl\\\ ^AAaaAAaaaf;lrlrzs") and
+ check results
+---*/
+
+var __string = "zxcasd;fl\\\ ^AAaaAAaaaf;lrlrzs";
+
+var __executed = /(A)?(A.*)/.exec(__string);
+
+var __expected = ["AAaaAAaaaf;lrlrzs","A","AaaAAaaaf;lrlrzs"];
+__expected.index = 13;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T25.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T25.js
new file mode 100644
index 0000000000..bb7309293b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T25.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T25
+description: >
+ Execute /(A)?(A.*)/.exec("zxcasd;fl\\\ ^AaaAAaaaf;lrlrzs") and
+ check results
+---*/
+
+var __string = "zxcasd;fl\\\ ^AaaAAaaaf;lrlrzs";
+
+var __executed = /(A)?(A.*)/.exec(__string);
+
+var __expected = ["AaaAAaaaf;lrlrzs",undefined,"AaaAAaaaf;lrlrzs"];
+__expected.index = 13;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T26.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T26.js
new file mode 100644
index 0000000000..f87e8e9421
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T26.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T26
+description: Execute /(a)?a/.exec("a") and check results
+---*/
+
+var __string = "a";
+
+var __executed = /(a)?a/.exec(__string);
+
+var __expected = ["a",undefined];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T27.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T27.js
new file mode 100644
index 0000000000..2cd86fb3e8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T27.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T27
+description: Execute /a|(b)/.exec("a") and check results
+---*/
+
+var __string = "a";
+
+var __executed = /a|(b)/.exec(__string);
+
+var __expected = ["a",undefined];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T28.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T28.js
new file mode 100644
index 0000000000..08d6919c8a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T28.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T28
+description: Execute /(a)?(a)/.exec("a") and check results
+---*/
+
+var __string = "a";
+
+var __executed = /(a)?(a)/.exec(__string);
+
+var __expected = ['a', undefined, 'a'];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T29.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T29.js
new file mode 100644
index 0000000000..b0e0906fe1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T29.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T29
+description: "See bug http:bugzilla.mozilla.org/show_bug.cgi?id=165353"
+---*/
+
+var __string = "a";
+
+var __executed = /^([a-z]+)*[a-z]$/.exec(__string);
+
+var __expected = ['a', undefined];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T3.js
new file mode 100644
index 0000000000..2a8065a982
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T3
+description: >
+ Execute /([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/.test("Developing
+ with JavaScript is dangerous, do not try it without assistance")
+ and check results
+---*/
+
+var __executed = /([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/.test("Developing with JavaScript is dangerous, do not try it without assistance");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T30.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T30.js
new file mode 100644
index 0000000000..2eeccafe13
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T30.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T30
+description: "See bug http:bugzilla.mozilla.org/show_bug.cgi?id=165353"
+---*/
+
+var __string = "ab";
+
+var __executed = /^([a-z]+)*[a-z]$/.exec(__string);
+
+var __expected = ['ab', "a"];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T31.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T31.js
new file mode 100644
index 0000000000..0ea67e6548
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T31.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T31
+description: "See bug http:bugzilla.mozilla.org/show_bug.cgi?id=165353"
+---*/
+
+var __string = "abc";
+
+var __executed = /^([a-z]+)*[a-z]$/.exec(__string);
+
+var __expected = ['abc', "ab"];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T32.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T32.js
new file mode 100644
index 0000000000..82df62b732
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T32.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T32
+description: "See bug http:bugzilla.mozilla.org/show_bug.cgi?id=165353"
+---*/
+
+var __string = "www.netscape.com";
+
+var __executed = /^(([a-z]+)*[a-z]\.)+[a-z]{2,}$/.exec(__string);
+
+var __expected = ['www.netscape.com', 'netscape.', 'netscap'];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T33.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T33.js
new file mode 100644
index 0000000000..8d4c4ca701
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T33.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T33
+description: "See bug http:bugzilla.mozilla.org/show_bug.cgi?id=165353"
+---*/
+
+var __string = "www.netscape.com";
+
+var __executed = /^(([a-z]+)*([a-z])\.)+[a-z]{2,}$/.exec(__string);
+
+var __expected = ['www.netscape.com', 'netscape.', 'netscap', 'e'];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T4.js
new file mode 100644
index 0000000000..c5cc745c44
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T4.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T4
+description: Execute /(abc)/.exec("abc") and check results
+---*/
+
+var __executed = /(abc)/.exec("abc");
+
+var __expected = ["abc","abc"];
+__expected.index = 0;
+__expected.input = "abc";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T5.js
new file mode 100644
index 0000000000..c7653979c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T5.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T5
+description: Execute /a(bc)d(ef)g/.exec("abcdefg") and check results
+---*/
+
+var __executed = /a(bc)d(ef)g/.exec("abcdefg");
+
+var __expected = ["abcdefg","bc","ef"];
+__expected.index = 0;
+__expected.input = "abcdefg";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T6.js
new file mode 100644
index 0000000000..ef359a9be9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T6.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T6
+description: Execute /(.{3})(.{4})/.exec("abcdefgh") and check results
+---*/
+
+var __executed = /(.{3})(.{4})/.exec("abcdefgh");
+
+var __expected = ["abcdefg","abc","defg"];
+__expected.index = 0;
+__expected.input = "abcdefgh";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T7.js
new file mode 100644
index 0000000000..97ba72a590
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T7.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T7
+description: Execute /(aa)bcd\1/.exec("aabcdaabcd") and check results
+---*/
+
+var __executed = /(aa)bcd\1/.exec("aabcdaabcd");
+
+var __expected = ["aabcdaa","aa"];
+__expected.index = 0;
+__expected.input = "aabcdaabcd";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T8.js
new file mode 100644
index 0000000000..6432cbbec9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T8.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T8
+description: Execute /(aa).+\1/.exec("aabcdaabcd") and check results
+---*/
+
+var __executed = /(aa).+\1/.exec("aabcdaabcd");
+
+var __expected = ["aabcdaa","aa"];
+__expected.index = 0;
+__expected.input = "aabcdaabcd";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T9.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T9.js
new file mode 100644
index 0000000000..5d59ba7bdf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A3_T9.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match.
+ The result can be used either in a backreference (\ followed by a nonzero decimal number),
+ referenced in a replace string,
+ or returned as part of an array from the regular expression matching function
+es5id: 15.10.2.8_A3_T9
+description: Execute /(.{2}).+\1/.exec("aabcdaabcd") and check results
+---*/
+
+var __executed = /(.{2}).+\1/.exec("aabcdaabcd");
+
+var __expected = ["aabcdaa","aa"];
+__expected.index = 0;
+__expected.input = "aabcdaabcd";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T1.js
new file mode 100644
index 0000000000..4553d6d264
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T1.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Atom :: . evaluates as follows:
+ i) Let A be the set of all characters except the four line terminator characters <LF>, <CR>, <LS>, or <PS>
+ ii) Call CharacterSetMatcher(A, false) and return its Matcher result
+es5id: 15.10.2.8_A4_T1
+description: Execute /ab.de/.exec("abcde") and check results
+---*/
+
+var __string = "abcde";
+var __executed = /ab.de/.exec(__string);
+
+var __expected = ["abcde"];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T2.js
new file mode 100644
index 0000000000..d455db1226
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T2.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Atom :: . evaluates as follows:
+ i) Let A be the set of all characters except the four line terminator characters <LF>, <CR>, <LS>, or <PS>
+ ii) Call CharacterSetMatcher(A, false) and return its Matcher result
+es5id: 15.10.2.8_A4_T2
+description: Execute /.+/.exec("line 1\nline 2") and check results
+---*/
+
+var __string = "line 1\nline 2";
+var __executed = /.+/.exec(__string);
+
+var __expected = ["line 1"];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T3.js
new file mode 100644
index 0000000000..57a9cc0b95
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T3.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Atom :: . evaluates as follows:
+ i) Let A be the set of all characters except the four line terminator characters <LF>, <CR>, <LS>, or <PS>
+ ii) Call CharacterSetMatcher(A, false) and return its Matcher result
+es5id: 15.10.2.8_A4_T3
+description: Execute /.*a.* /.exec("this is a test") and check results
+---*/
+
+var __string = "this is a test";
+var __executed = /.*a.*/.exec(__string);
+
+var __expected = ["this is a test"];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T4.js
new file mode 100644
index 0000000000..eb141a1878
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T4.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Atom :: . evaluates as follows:
+ i) Let A be the set of all characters except the four line terminator characters <LF>, <CR>, <LS>, or <PS>
+ ii) Call CharacterSetMatcher(A, false) and return its Matcher result
+es5id: 15.10.2.8_A4_T4
+description: Execute /.+/.exec("this is a *&^%$# test") and check results
+---*/
+
+var __string = "this is a *&^%$# test";
+var __executed = /.+/.exec(__string);
+
+var __expected = ["this is a *&^%$# test"];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T5.js
new file mode 100644
index 0000000000..1beaa1ebad
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T5.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Atom :: . evaluates as follows:
+ i) Let A be the set of all characters except the four line terminator characters <LF>, <CR>, <LS>, or <PS>
+ ii) Call CharacterSetMatcher(A, false) and return its Matcher result
+es5id: 15.10.2.8_A4_T5
+description: Execute /.+/.exec("....") and check results
+---*/
+
+var __string = "....";
+var __executed = /.+/.exec(__string);
+
+var __expected = ["...."];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T6.js
new file mode 100644
index 0000000000..eaa7d66da1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T6.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Atom :: . evaluates as follows:
+ i) Let A be the set of all characters except the four line terminator characters <LF>, <CR>, <LS>, or <PS>
+ ii) Call CharacterSetMatcher(A, false) and return its Matcher result
+es5id: 15.10.2.8_A4_T6
+description: Execute /.+/.exec("abcdefghijklmnopqrstuvwxyz") and check results
+---*/
+
+var __string = "abcdefghijklmnopqrstuvwxyz";
+var __executed = /.+/.exec(__string);
+
+var __expected = ["abcdefghijklmnopqrstuvwxyz"];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T7.js
new file mode 100644
index 0000000000..227a1d577c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T7.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Atom :: . evaluates as follows:
+ i) Let A be the set of all characters except the four line terminator characters <LF>, <CR>, <LS>, or <PS>
+ ii) Call CharacterSetMatcher(A, false) and return its Matcher result
+es5id: 15.10.2.8_A4_T7
+description: Execute /.+/.exec("ABCDEFGHIJKLMNOPQRSTUVWXYZ") and check results
+---*/
+
+var __string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+var __executed = /.+/.exec(__string);
+
+var __expected = ["ABCDEFGHIJKLMNOPQRSTUVWXYZ"];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T8.js
new file mode 100644
index 0000000000..8b94b062d0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T8.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Atom :: . evaluates as follows:
+ i) Let A be the set of all characters except the four line terminator characters <LF>, <CR>, <LS>, or <PS>
+ ii) Call CharacterSetMatcher(A, false) and return its Matcher result
+es5id: 15.10.2.8_A4_T8
+description: Execute /.+/.exec("`1234567890-=~!@#$%^&*()_+") and check results
+---*/
+
+var __string = "`1234567890-=~!@#$%^&*()_+";
+var __executed = /.+/.exec(__string);
+
+var __expected = ["`1234567890-=~!@#$%^&*()_+"];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T9.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T9.js
new file mode 100644
index 0000000000..3b5060ff54
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A4_T9.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The production Atom :: . evaluates as follows:
+ i) Let A be the set of all characters except the four line terminator characters <LF>, <CR>, <LS>, or <PS>
+ ii) Call CharacterSetMatcher(A, false) and return its Matcher result
+es5id: 15.10.2.8_A4_T9
+description: "Execute /.+/.exec(\"|\\\\[{]};:\\\"\\',<>.?/\") and check results"
+---*/
+
+var __string = "|\\[{]};:\"\',<>.?/";
+var __executed = /.+/.exec(__string);
+
+var __expected = ["|\\[{]};:\"\',<>.?/"];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A5_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A5_T1.js
new file mode 100644
index 0000000000..f68b8c0ff9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A5_T1.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ In case-insignificant matches all characters are implicitly converted to
+ upper case immediately before they are compared
+es5id: 15.10.2.8_A5_T1
+description: Execute /[a-z]+/ig.exec("ABC def ghi") and check results
+---*/
+
+var __string = "ABC def ghi";
+var __executed = /[a-z]+/ig.exec(__string);
+
+var __expected = ["ABC"];
+__expected.index = 0;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A5_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A5_T2.js
new file mode 100644
index 0000000000..e193e1c6dc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.8_A5_T2.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ In case-insignificant matches all characters are implicitly converted to
+ upper case immediately before they are compared
+es5id: 15.10.2.8_A5_T2
+description: Execute /[a-z]+/.exec("ABC def ghi") and check results
+---*/
+
+var __string = "ABC def ghi";
+var __executed = /[a-z]+/.exec(__string);
+
+var __expected = ["def"];
+__expected.index = 4;
+__expected.input = __string;
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.9_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.9_A1_T1.js
new file mode 100644
index 0000000000..dd3b69b516
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.9_A1_T1.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ An escape sequence of the form \ followed by a nonzero decimal number n
+ matches the result of the nth set of capturing parentheses (see
+ 15.10.2.11)
+es5id: 15.10.2.9_A1_T1
+description: >
+ Execute /\b(\w+) \1\b/.exec("do you listen the the band") and
+ check results
+---*/
+
+var __executed = /\b(\w+) \1\b/.exec("do you listen the the band");
+
+var __expected = ["the the", "the"];
+__expected.index = 14;
+__expected.input = "do you listen the the band";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.9_A1_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.9_A1_T2.js
new file mode 100644
index 0000000000..cf1749de1b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.9_A1_T2.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ An escape sequence of the form \ followed by a nonzero decimal number n
+ matches the result of the nth set of capturing parentheses (see
+ 15.10.2.11)
+es5id: 15.10.2.9_A1_T2
+description: >
+ Execute
+ /([xu]\d{2}([A-H]{2})?)\1/.exec("x09x12x01x01u00FFu00FFx04x04x23")
+ and check results
+---*/
+
+var __executed = /([xu]\d{2}([A-H]{2})?)\1/.exec("x09x12x01x01u00FFu00FFx04x04x23");
+
+var __expected = ["x01x01", "x01", undefined];
+__expected.index = 6;
+__expected.input = "x09x12x01x01u00FFu00FFx04x04x23";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.9_A1_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.9_A1_T3.js
new file mode 100644
index 0000000000..a85b267c4b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.9_A1_T3.js
@@ -0,0 +1,48 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ An escape sequence of the form \ followed by a nonzero decimal number n
+ matches the result of the nth set of capturing parentheses (see
+ 15.10.2.11)
+es5id: 15.10.2.9_A1_T3
+description: >
+ Execute
+ /([xu]\d{2}([A-H]{2})?)\1/.exec("x09x12x01x05u00FFu00FFx04x04x23")
+ and check results
+---*/
+
+var __executed = /([xu]\d{2}([A-H]{2})?)\1/.exec("x09x12x01x05u00FFu00FFx04x04x23");
+
+var __expected = ["u00FFu00FF", "u00FF", "FF"];
+__expected.index = 12;
+__expected.input = "x09x12x01x05u00FFu00FFx04x04x23";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2.9_A1_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2.9_A1_T5.js
new file mode 100644
index 0000000000..b7b229137d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2.9_A1_T5.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ An escape sequence of the form \ followed by a nonzero decimal number n
+ matches the result of the nth set of capturing parentheses (see
+ 15.10.2.11)
+es5id: 15.10.2.9_A1_T5
+description: Execute /(a*)b\1+/.exec("baaac") and check results
+---*/
+
+var __executed = /(a*)b\1+/.exec("baaac");
+
+var __expected = ["b", ""];
+__expected.index = 0;
+__expected.input = "baaac";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.2_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.2_A1_T1.js
new file mode 100644
index 0000000000..3e12893222
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.2_A1_T1.js
@@ -0,0 +1,89 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: XML Shallow Parsing with Regular Expressions
+es5id: 15.10.2_A1_T1
+description: "See bug http://bugzilla.mozilla.org/show_bug.cgi?id=103087"
+---*/
+
+// REX/Javascript 1.0
+// Robert D. Cameron "REX: XML Shallow Parsing with Regular Expressions",
+// Technical Report TR 1998-17, School of Computing Science, Simon Fraser
+// University, November, 1998.
+// Copyright (c) 1998, Robert D. Cameron.
+// The following code may be freely used and distributed provided that
+// this copyright and citation notice remains intact and that modifications
+// or additions are clearly identified.
+
+var TextSE = "[^<]+";
+var UntilHyphen = "[^-]*-";
+var Until2Hyphens = UntilHyphen + "([^-]" + UntilHyphen + ")*-";
+var CommentCE = Until2Hyphens + ">?";
+var UntilRSBs = "[^\\]]*\\]([^\\]]+\\])*\\]+";
+var CDATA_CE = UntilRSBs + "([^\\]>]" + UntilRSBs + ")*>";
+var S = "[ \\n\\t\\r]+";
+var NameStrt = "[A-Za-z_:]|[^\\x00-\\x7F]";
+var NameChar = "[A-Za-z0-9_:.-]|[^\\x00-\\x7F]";
+var Name = "(" + NameStrt + ")(" + NameChar + ")*";
+var QuoteSE = '"[^"]' + "*" + '"' + "|'[^']*'";
+var DT_IdentSE = S + Name + "(" + S + "(" + Name + "|" + QuoteSE + "))*";
+var MarkupDeclCE = "([^\\]\"'><]+|" + QuoteSE + ")*>";
+var S1 = "[\\n\\r\\t ]";
+var UntilQMs = "[^?]*\\?+";
+var PI_Tail = "\\?>|" + S1 + UntilQMs + "([^>?]" + UntilQMs + ")*>";
+var DT_ItemSE = "<(!(--" + Until2Hyphens + ">|[^-]" + MarkupDeclCE + ")|\\?" + Name + "(" + PI_Tail + "))|%" + Name + ";|" + S;
+var DocTypeCE = DT_IdentSE + "(" + S + ")?(\\[(" + DT_ItemSE + ")*\\](" + S + ")?)?>?";
+var DeclCE = "--(" + CommentCE + ")?|\\[CDATA\\[(" + CDATA_CE + ")?|DOCTYPE(" + DocTypeCE + ")?";
+var PI_CE = Name + "(" + PI_Tail + ")?";
+var EndTagCE = Name + "(" + S + ")?>?";
+var AttValSE = '"[^<"]' + "*" + '"' + "|'[^<']*'";
+var ElemTagCE = Name + "(" + S + Name + "(" + S + ")?=(" + S + ")?(" + AttValSE + "))*(" + S + ")?/?>?";
+var MarkupSPE = "<(!(" + DeclCE + ")?|\\?(" + PI_CE + ")?|/(" + EndTagCE + ")?|(" + ElemTagCE + ")?)";
+var XML_SPE = TextSE + "|" + MarkupSPE;
+
+///
+////
+/////
+
+var __patterns = [TextSE,UntilHyphen,Until2Hyphens,CommentCE,UntilRSBs,CDATA_CE,S,NameStrt, NameChar,
+Name, QuoteSE, DT_IdentSE, MarkupDeclCE, S1,UntilQMs, PI_Tail, DT_ItemSE, DocTypeCE, DeclCE,
+PI_CE, EndTagCE, AttValSE, ElemTagCE, MarkupSPE, XML_SPE];
+
+var __html=""+
+'<html xmlns="http://www.w3.org/1999/xhtml"\n' +
+' xmlns:xlink="http://www.w3.org/XML/XLink/0.9">\n' +
+' <head><title>Three Namespaces</title></head>\n' +
+' <body>\n' +
+' <h1 align="center">An Ellipse and a Rectangle</h1>\n' +
+' <svg xmlns="http://www.w3.org/Graphics/SVG/SVG-19991203.dtd"\n' +
+' width="12cm" height="10cm">\n' +
+' <ellipse rx="110" ry="130" />\n' +
+' <rect x="4cm" y="1cm" width="3cm" height="6cm" />\n' +
+' </svg>\n' +
+' <p xlink:type="simple" xlink:href="ellipses.html">\n' +
+' More about ellipses\n' +
+' </p>\n' +
+' <p xlink:type="simple" xlink:href="rectangles.html">\n' +
+' More about rectangles\n' +
+' </p>\n' +
+' <hr/>\n' +
+' <p>Last Modified February 13, 2000</p>\n' +
+' </body>\n' +
+'</html>';
+
+//////////////////////////////////////////////////////////////////////////////
+try {
+ for(var index=0; index<__patterns.length; index++) {
+ var __re = new RegExp(__patterns[index]);
+ __re.test(__html);
+ }
+} catch (e) {
+ throw new Test262Error('#'+index+": XML Shallow Parsing with Regular Expression: "+__patterns[index]);
+}
+//
+//////////////////////////////////////////////////////////////////////////////
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T1.js
new file mode 100644
index 0000000000..8f8f6684db
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T1.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If pattern is an object R whose [[Class]] property is "RegExp" and flags
+ is undefined, then return R unchanged
+es5id: 15.10.3.1_A1_T1
+description: R is /x/i and instance is RegExp(R)
+---*/
+
+var __re = /x/i;
+var __instance = RegExp(__re);
+__re.indicator = 1;
+
+assert.sameValue(__instance.indicator, 1, 'The value of __instance.indicator is expected to be 1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T2.js
new file mode 100644
index 0000000000..11475d9489
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T2.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If pattern is an object R whose [[Class]] property is "RegExp" and flags
+ is undefined, then return R unchanged
+es5id: 15.10.3.1_A1_T2
+description: R is new RegExp and instance is RegExp(R, function(){}())
+---*/
+
+var __re = new RegExp;
+var __instance = RegExp(__re, function(){}());
+__re.indicator = 1;
+
+assert.sameValue(__instance.indicator, 1, 'The value of __instance.indicator is expected to be 1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T3.js
new file mode 100644
index 0000000000..1a874b169d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T3.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If pattern is an object R whose [[Class]] property is "RegExp" and flags
+ is undefined, then return R unchanged
+es5id: 15.10.3.1_A1_T3
+description: >
+ R is new RegExp() and instance is RegExp(R, x), where x is
+ undefined variable
+---*/
+
+var __re = new RegExp();
+var __instance = RegExp(__re, x);
+__re.indicator = 1;
+
+assert.sameValue(__instance.indicator, 1, 'The value of __instance.indicator is expected to be 1');
+
+var x;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T4.js
new file mode 100644
index 0000000000..8f8d32b5a4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T4.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If pattern is an object R whose [[Class]] property is "RegExp" and flags
+ is undefined, then return R unchanged
+es5id: 15.10.3.1_A1_T4
+description: R is new RegExp() and instance is RegExp(R, void 0)
+---*/
+
+var __re = RegExp();
+var __instance = RegExp(__re, void 0);
+__re.indicator = 1;
+
+assert.sameValue(__instance.indicator, 1, 'The value of __instance.indicator is expected to be 1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T5.js
new file mode 100644
index 0000000000..cd727579ea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A1_T5.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If pattern is an object R whose [[Class]] property is "RegExp" and flags
+ is undefined, then return R unchanged
+es5id: 15.10.3.1_A1_T5
+description: R is /\b/m and instance is RegExp(R, undefined)
+---*/
+
+var __re = /\b/m;
+var __instance = RegExp(__re, undefined);
+__re.indicator = 1;
+
+assert.sameValue(__instance.indicator, 1, 'The value of __instance.indicator is expected to be 1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A2_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A2_T1.js
new file mode 100644
index 0000000000..c0665191da
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A2_T1.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If pattern is an object R whose [[Class]] property is "RegExp" and flags is defined, then
+ call the RegExp constructor (15.10.4.1), passing it the pattern and flags arguments and return the object constructed by that constructor
+es5id: 15.10.3.1_A2_T1
+description: >
+ Checking if using "1" as flags leads to throwing the correct
+ exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: RegExp(new RegExp("\\d"), "1")) throw SyntaxError. Actual: ' + (RegExp(new RegExp("\d"), "1")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A2_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A2_T2.js
new file mode 100644
index 0000000000..9b4b4c8bc1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A2_T2.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If pattern is an object R whose [[Class]] property is "RegExp" and flags is defined, then
+ call the RegExp constructor (15.10.4.1), passing it the pattern and flags arguments and return the object constructed by that constructor
+es5id: 15.10.3.1_A2_T2
+description: >
+ Checking if using dafined variable "x = 1" as flags leads to
+ throwing the correct exception
+---*/
+
+var x = 1;
+
+try {
+ throw new Test262Error('#1.1: var x = 1; RegExp(/[a-b]?/, x) throw SyntaxError. Actual: ' + (RegExp(/[a-b]?/, x)));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A3_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A3_T1.js
new file mode 100644
index 0000000000..cedc3e13e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A3_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If pattern and flags are defined, then
+ call the RegExp constructor (15.10.4.1), passing it the pattern and flags arguments and return the object constructed by that constructor
+es5id: 15.10.3.1_A3_T1
+description: R is "d+" and instance is RegExp(R,"i")
+---*/
+
+var __re = "d+";
+var __instance = RegExp(__re, "i");
+
+assert.sameValue(
+ __instance.constructor,
+ RegExp,
+ 'The value of __instance.constructor is expected to equal the value of RegExp'
+);
+
+assert.sameValue(__instance.source, __re, 'The value of __instance.source is expected to equal the value of __re');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A3_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A3_T2.js
new file mode 100644
index 0000000000..85cc4f867b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.3.1_A3_T2.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If pattern and flags are defined, then
+ call the RegExp constructor (15.10.4.1), passing it the pattern and flags arguments and return the object constructed by that constructor
+es5id: 15.10.3.1_A3_T2
+description: >
+ R is {toString:function(){return "[a-c]*";}} and instance is
+ RegExp(R,"gm")
+---*/
+
+var __instance = RegExp({toString:function(){return "[a-c]*";}}, "gm");
+
+assert.sameValue(
+ __instance.constructor,
+ RegExp,
+ 'The value of __instance.constructor is expected to equal the value of RegExp'
+);
+
+assert.sameValue(__instance.source, "[a-c]*", 'The value of __instance.source is expected to be "[a-c]*"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T1.js
new file mode 100644
index 0000000000..ae28f243d3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T1.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If pattern is an object R whose [[Class]] property is "RegExp" and flags is undefined, then let P be
+ the pattern used to construct R and let F be the flags used to construct R
+es5id: 15.10.4.1_A1_T1
+description: Pattern is /./i and RegExp is new RegExp(pattern)
+---*/
+
+var __pattern = /./i;
+var __re = new RegExp(__pattern);
+
+assert.sameValue(
+ __re.source,
+ __pattern.source,
+ 'The value of __re.source is expected to equal the value of __pattern.source'
+);
+
+assert.sameValue(
+ __re.multiline,
+ __pattern.multiline,
+ 'The value of __re.multiline is expected to equal the value of __pattern.multiline'
+);
+
+assert.sameValue(
+ __re.global,
+ __pattern.global,
+ 'The value of __re.global is expected to equal the value of __pattern.global'
+);
+
+assert.sameValue(
+ __re.ignoreCase,
+ __pattern.ignoreCase,
+ 'The value of __re.ignoreCase is expected to equal the value of __pattern.ignoreCase'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T2.js
new file mode 100644
index 0000000000..00c78df977
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T2.js
@@ -0,0 +1,43 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If pattern is an object R whose [[Class]] property is "RegExp" and flags is undefined, then let P be
+ the pattern used to construct R and let F be the flags used to construct R
+es5id: 15.10.4.1_A1_T2
+description: >
+ Pattern is /\t/m and RegExp is new RegExp(pattern,x), where x is
+ undefined variable
+---*/
+
+var __pattern = /\t/m;
+var __re = new RegExp(__pattern, x);
+
+assert.sameValue(
+ __re.source,
+ __pattern.source,
+ 'The value of __re.source is expected to equal the value of __pattern.source'
+);
+
+assert.sameValue(
+ __re.multiline,
+ __pattern.multiline,
+ 'The value of __re.multiline is expected to equal the value of __pattern.multiline'
+);
+
+assert.sameValue(
+ __re.global,
+ __pattern.global,
+ 'The value of __re.global is expected to equal the value of __pattern.global'
+);
+
+assert.sameValue(
+ __re.ignoreCase,
+ __pattern.ignoreCase,
+ 'The value of __re.ignoreCase is expected to equal the value of __pattern.ignoreCase'
+);
+
+var x;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T3.js
new file mode 100644
index 0000000000..10162ef282
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T3.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If pattern is an object R whose [[Class]] property is "RegExp" and flags is undefined, then let P be
+ the pattern used to construct R and let F be the flags used to construct R
+es5id: 15.10.4.1_A1_T3
+description: Pattern is /[a-b]/g and RegExp is new RegExp(pattern,void 0)
+---*/
+
+var __pattern = /[a-b]/g;
+var __re = new RegExp(__pattern, void 0);
+
+assert.sameValue(
+ __re.source,
+ __pattern.source,
+ 'The value of __re.source is expected to equal the value of __pattern.source'
+);
+
+assert.sameValue(
+ __re.multiline,
+ __pattern.multiline,
+ 'The value of __re.multiline is expected to equal the value of __pattern.multiline'
+);
+
+assert.sameValue(
+ __re.global,
+ __pattern.global,
+ 'The value of __re.global is expected to equal the value of __pattern.global'
+);
+
+assert.sameValue(
+ __re.ignoreCase,
+ __pattern.ignoreCase,
+ 'The value of __re.ignoreCase is expected to equal the value of __pattern.ignoreCase'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T4.js
new file mode 100644
index 0000000000..a66ead1e94
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T4.js
@@ -0,0 +1,39 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If pattern is an object R whose [[Class]] property is "RegExp" and flags is undefined, then let P be
+ the pattern used to construct R and let F be the flags used to construct R
+es5id: 15.10.4.1_A1_T4
+description: Pattern is new RegExp and RegExp is new RegExp(pattern,undefined)
+---*/
+
+var __pattern = new RegExp;
+var __re = new RegExp(__pattern, undefined);
+
+assert.sameValue(
+ __re.source,
+ __pattern.source,
+ 'The value of __re.source is expected to equal the value of __pattern.source'
+);
+
+assert.sameValue(
+ __re.multiline,
+ __pattern.multiline,
+ 'The value of __re.multiline is expected to equal the value of __pattern.multiline'
+);
+
+assert.sameValue(
+ __re.global,
+ __pattern.global,
+ 'The value of __re.global is expected to equal the value of __pattern.global'
+);
+
+assert.sameValue(
+ __re.ignoreCase,
+ __pattern.ignoreCase,
+ 'The value of __re.ignoreCase is expected to equal the value of __pattern.ignoreCase'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T5.js
new file mode 100644
index 0000000000..226928eed8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A1_T5.js
@@ -0,0 +1,41 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If pattern is an object R whose [[Class]] property is "RegExp" and flags is undefined, then let P be
+ the pattern used to construct R and let F be the flags used to construct R
+es5id: 15.10.4.1_A1_T5
+description: >
+ Pattern is RegExp("1?","mig") and RegExp is new
+ RegExp(pattern,(function(){})())
+---*/
+
+var __pattern = RegExp("1?","mig");
+var __re = new RegExp(__pattern, (function(){})());
+
+assert.sameValue(
+ __re.source,
+ __pattern.source,
+ 'The value of __re.source is expected to equal the value of __pattern.source'
+);
+
+assert.sameValue(
+ __re.multiline,
+ __pattern.multiline,
+ 'The value of __re.multiline is expected to equal the value of __pattern.multiline'
+);
+
+assert.sameValue(
+ __re.global,
+ __pattern.global,
+ 'The value of __re.global is expected to equal the value of __pattern.global'
+);
+
+assert.sameValue(
+ __re.ignoreCase,
+ __pattern.ignoreCase,
+ 'The value of __re.ignoreCase is expected to equal the value of __pattern.ignoreCase'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A2_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A2_T1.js
new file mode 100644
index 0000000000..87ebc9ab9a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A2_T1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ pattern is an object R whose [[Class]] property is "RegExp" and flags
+ is not undefined
+es5id: 15.10.4.1_A2_T1
+description: >
+ Checking if execution of "new RegExp(pattern, "i")", where the
+ pattern is "/\u0042/i", does not fail
+---*/
+
+var regExpObj = new RegExp(/\u0042/i, "i");
+assert(regExpObj.ignoreCase);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A2_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A2_T2.js
new file mode 100644
index 0000000000..16b8117f17
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A2_T2.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ pattern is an object R whose [[Class]] property is "RegExp" and flags
+ is not undefined. If ToString(pattern) is not a valid flags arguments,
+ then throw a SyntaxError exception
+es5id: 15.10.4.1_A2_T2
+description: >
+ Checking if execution of "new RegExp(pattern, {})", where the
+ pattern is "/1?1/mig", fails
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp(/1?1/mig, {}) throw SyntaxError. Actual: ' + (new RegExp(/1?1/mig, {})));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T1.js
new file mode 100644
index 0000000000..a183be27f8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T1.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be the empty string if pattern is undefined
+es5id: 15.10.4.1_A3_T1
+description: RegExp is new RegExp
+---*/
+
+var __re = new RegExp;
+
+assert.sameValue(__re.multiline, false, 'The value of __re.multiline is expected to be false');
+assert.sameValue(__re.global, false, 'The value of __re.global is expected to be false');
+assert.sameValue(__re.ignoreCase, false, 'The value of __re.ignoreCase is expected to be false');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T2.js
new file mode 100644
index 0000000000..725d2df8f4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T2.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be the empty string if pattern is undefined
+es5id: 15.10.4.1_A3_T2
+description: RegExp is new RegExp(void 0)
+---*/
+
+var __re = new RegExp(void 0);
+
+assert.sameValue(__re.multiline, false, 'The value of __re.multiline is expected to be false');
+assert.sameValue(__re.global, false, 'The value of __re.global is expected to be false');
+assert.sameValue(__re.ignoreCase, false, 'The value of __re.ignoreCase is expected to be false');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T3.js
new file mode 100644
index 0000000000..0e6d50a054
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T3.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be the empty string if pattern is undefined
+es5id: 15.10.4.1_A3_T3
+description: RegExp is new RegExp(x), where x is undefined variable
+---*/
+
+var __re = new RegExp(x);
+
+assert.sameValue(__re.multiline, false, 'The value of __re.multiline is expected to be false');
+assert.sameValue(__re.global, false, 'The value of __re.global is expected to be false');
+assert.sameValue(__re.ignoreCase, false, 'The value of __re.ignoreCase is expected to be false');
+
+var x;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T4.js
new file mode 100644
index 0000000000..9e90bd2c8c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T4.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be the empty string if pattern is undefined
+es5id: 15.10.4.1_A3_T4
+description: RegExp is new RegExp(undefined)
+---*/
+
+var __re = new RegExp(undefined);
+
+assert.sameValue(__re.multiline, false, 'The value of __re.multiline is expected to be false');
+assert.sameValue(__re.global, false, 'The value of __re.global is expected to be false');
+assert.sameValue(__re.ignoreCase, false, 'The value of __re.ignoreCase is expected to be false');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T5.js
new file mode 100644
index 0000000000..158ee29c55
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A3_T5.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be the empty string if pattern is undefined
+es5id: 15.10.4.1_A3_T5
+description: RegExp is new RegExp((function(){})())
+---*/
+
+var __re = new RegExp((function(){})());
+
+assert.sameValue(__re.multiline, false, 'The value of __re.multiline is expected to be false');
+assert.sameValue(__re.global, false, 'The value of __re.global is expected to be false');
+assert.sameValue(__re.ignoreCase, false, 'The value of __re.ignoreCase is expected to be false');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T1.js
new file mode 100644
index 0000000000..5a26e2ecee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let F be the empty string if flags is undefined
+es5id: 15.10.4.1_A4_T1
+description: RegExp is new RegExp(undefined)
+---*/
+
+var __re = new RegExp(null, void 0);
+
+assert.sameValue(__re.source, "null", 'The value of __re.source is expected to be "null"');
+assert.sameValue(__re.multiline, false, 'The value of __re.multiline is expected to be false');
+assert.sameValue(__re.global, false, 'The value of __re.global is expected to be false');
+assert.sameValue(__re.ignoreCase, false, 'The value of __re.ignoreCase is expected to be false');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T2.js
new file mode 100644
index 0000000000..260be26a6d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T2.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let F be the empty string if flags is undefined
+es5id: 15.10.4.1_A4_T2
+description: RegExp is new RegExp(undefined,undefined)
+---*/
+
+var __re = new RegExp(undefined, undefined);
+
+assert.sameValue(__re.multiline, false, 'The value of __re.multiline is expected to be false');
+assert.sameValue(__re.global, false, 'The value of __re.global is expected to be false');
+assert.sameValue(__re.ignoreCase, false, 'The value of __re.ignoreCase is expected to be false');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T3.js
new file mode 100644
index 0000000000..18a1f4b2d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T3.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let F be the empty string if flags is undefined
+es5id: 15.10.4.1_A4_T3
+description: Use undefined properties of object as flags of RegExp
+---*/
+
+var __re = new RegExp({}.p, {}.q);
+
+assert.sameValue(__re.multiline, false, 'The value of __re.multiline is expected to be false');
+assert.sameValue(__re.global, false, 'The value of __re.global is expected to be false');
+assert.sameValue(__re.ignoreCase, false, 'The value of __re.ignoreCase is expected to be false');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T4.js
new file mode 100644
index 0000000000..49e69243eb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T4.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let F be the empty string if flags is undefined
+es5id: 15.10.4.1_A4_T4
+description: RegExp is new RegExp(null,void 0)
+---*/
+
+var __re = new RegExp(null, void 0);
+
+assert.sameValue(__re.source, "null", 'The value of __re.source is expected to be "null"');
+assert.sameValue(__re.multiline, false, 'The value of __re.multiline is expected to be false');
+assert.sameValue(__re.global, false, 'The value of __re.global is expected to be false');
+assert.sameValue(__re.ignoreCase, false, 'The value of __re.ignoreCase is expected to be false');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T5.js
new file mode 100644
index 0000000000..b80072b70f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A4_T5.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let F be the empty string if flags is undefined
+es5id: 15.10.4.1_A4_T5
+description: RegExp is new RegExp("",(function(){})())
+---*/
+
+var __re = new RegExp("", (function(){})());
+
+assert.sameValue(__re.multiline, false, 'The value of __re.multiline is expected to be false');
+assert.sameValue(__re.global, false, 'The value of __re.global is expected to be false');
+assert.sameValue(__re.ignoreCase, false, 'The value of __re.ignoreCase is expected to be false');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T1.js
new file mode 100644
index 0000000000..9cf576d2e0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If F contains any character other than 'g', 'i', or 'm', or if it
+ contains the same one more than once, then throw a SyntaxError exception
+es5id: 15.10.4.1_A5_T1
+description: Checking if using "ii" as F leads to throwing the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp(undefined,"ii") throw SyntaxError. Actual: ' + (new RegExp(undefined,"ii")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T3.js
new file mode 100644
index 0000000000..cd5f9408da
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T3.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If F contains any character other than 'g', 'i', or 'm', or if it
+ contains the same one more than once, then throw a SyntaxError exception
+es5id: 15.10.4.1_A5_T3
+description: Checking by using eval, try to use eval("\"migr\"") as F
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("",eval("\\"migr\\"")) throw SyntaxError. Actual: ' + (new RegExp("",eval("\"migr\""))));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T4.js
new file mode 100644
index 0000000000..79a64437da
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T4.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If F contains any character other than 'g', 'i', or 'm', or if it
+ contains the same one more than once, then throw a SyntaxError exception
+es5id: 15.10.4.1_A5_T4
+description: Checking if using "z" as F leads to throwing the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("a|b","z") throw SyntaxError. Actual: ' + (new RegExp("a|b","z")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T6.js
new file mode 100644
index 0000000000..9fbf1e496f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T6.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If F contains any character other than 'g', 'i', or 'm', or if it
+ contains the same one more than once, then throw a SyntaxError exception
+es5id: 15.10.4.1_A5_T6
+description: >
+ Checking if using "null" as F leads to throwing the correct
+ exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp(".",null) throw SyntaxError. Actual: ' + (new RegExp(".",null)));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T7.js
new file mode 100644
index 0000000000..af6bcd43c4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T7.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If F contains any character other than 'g', 'i', or 'm', or if it
+ contains the same one more than once, then throw a SyntaxError exception
+es5id: 15.10.4.1_A5_T7
+description: Checking if using 1.0 as F leads to throwing the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("^",1.0) throw SyntaxError. Actual: ' + (new RegExp("^",1.0)));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T8.js
new file mode 100644
index 0000000000..9457a6f641
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T8.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If F contains any character other than 'g', 'i', or 'm', or if it
+ contains the same one more than once, then throw a SyntaxError exception
+es5id: 15.10.4.1_A5_T8
+description: >
+ Checking if using "true" as F leads to throwing the correct
+ exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("|",true) throw SyntaxError. Actual: ' + (new RegExp("|",true)));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T9.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T9.js
new file mode 100644
index 0000000000..e752f8ffbf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A5_T9.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If F contains any character other than 'g', 'i', or 'm', or if it
+ contains the same one more than once, then throw a SyntaxError exception
+es5id: 15.10.4.1_A5_T9
+description: >
+ Checking if using "{toString:function(){}}" as F leads to throwing
+ the correct exception
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("$sup",{toString:function(){}}) throw SyntaxError. Actual: ' + (new RegExp("$sup",{toString:function(){}})));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A6_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A6_T1.js
new file mode 100644
index 0000000000..f69a1a04fd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A6_T1.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The [[Class]] property of the newly constructed object is set to "RegExp"
+es5id: 15.10.4.1_A6_T1
+description: Checking [[Class]] property of the newly constructed object
+---*/
+
+var __re = new RegExp;
+__re.toString = Object.prototype.toString;
+
+assert.sameValue(__re.toString(), "[object "+"RegExp"+"]", '__re.toString() must return "[object "+"RegExp"+"]"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A7_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A7_T1.js
new file mode 100644
index 0000000000..aaed68b46b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A7_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The [[Prototype]] property of the newly constructed object is set to the
+ original RegExp prototype object, the one that is the initial value of
+ RegExp.prototype
+es5id: 15.10.4.1_A7_T1
+description: >
+ Add new property to [[Prototype]] of REgExp and check this
+ property of the newly constructed object
+---*/
+
+var __re = new RegExp;
+RegExp.prototype.indicator = 1;
+
+assert.sameValue(__re.indicator, 1, 'The value of __re.indicator is expected to be 1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A7_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A7_T2.js
new file mode 100644
index 0000000000..d5e50cf780
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A7_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The [[Prototype]] property of the newly constructed object is set to the
+ original RegExp prototype object, the one that is the initial value of
+ RegExp.prototype
+es5id: 15.10.4.1_A7_T2
+description: Checking [[Prototype]] property of the newly constructed object
+---*/
+
+var __re = new RegExp();
+
+assert.sameValue(
+ RegExp.prototype.isPrototypeOf(__re),
+ true,
+ 'RegExp.prototype.isPrototypeOf(new RegExp()) must return true'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T1.js
new file mode 100644
index 0000000000..129f2f6973
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T1.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be ToString(pattern) and let F be ToString(flags)
+es5id: 15.10.4.1_A8_T1
+description: Pattern is "a|b" and flags is "i"
+---*/
+
+var __re = new RegExp("a|b","i");
+
+assert.sameValue(__re.ignoreCase, true, 'The value of __re.ignoreCase is expected to be true');
+assert.sameValue(__re.multiline, false, 'The value of __re.multiline is expected to be false');
+assert.sameValue(__re.global, false, 'The value of __re.global is expected to be false');
+assert.sameValue(__re.lastIndex, 0, 'The value of __re.lastIndex is expected to be 0');
+assert.notSameValue(typeof __re.source, "undefined", 'The value of typeof __re.source is not "undefined"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T10.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T10.js
new file mode 100644
index 0000000000..a7e4d64f09
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T10.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be ToString(pattern) and let F be ToString(flags)
+es5id: 15.10.4.1_A8_T10
+description: Pattern is true and flags is "m"
+---*/
+
+var __re = new RegExp(true,"m");
+
+assert.sameValue(__re.ignoreCase, false, 'The value of __re.ignoreCase is expected to be false');
+assert.sameValue(__re.multiline, true, 'The value of __re.multiline is expected to be true');
+assert.sameValue(__re.global, false, 'The value of __re.global is expected to be false');
+assert.sameValue(__re.lastIndex, 0, 'The value of __re.lastIndex is expected to be 0');
+assert.notSameValue(typeof __re.source, "undefined", 'The value of typeof __re.source is not "undefined"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T11.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T11.js
new file mode 100644
index 0000000000..fa3071355e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T11.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be ToString(pattern) and let F be ToString(flags)
+es5id: 15.10.4.1_A8_T11
+description: Checking by using eval, pattern is Math and flags is eval("\"g\"")
+---*/
+
+var __re = new RegExp(Math,eval("\"g\""));
+
+assert.sameValue(__re.ignoreCase, false, 'The value of __re.ignoreCase is expected to be false');
+assert.sameValue(__re.multiline, false, 'The value of __re.multiline is expected to be false');
+assert.sameValue(__re.global, true, 'The value of __re.global is expected to be true');
+assert.sameValue(__re.lastIndex, 0, 'The value of __re.lastIndex is expected to be 0');
+assert.notSameValue(typeof __re.source, "undefined", 'The value of typeof __re.source is not "undefined"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T12.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T12.js
new file mode 100644
index 0000000000..a180108d15
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T12.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be ToString(pattern) and let F be ToString(flags)
+es5id: 15.10.4.1_A8_T12
+description: >
+ Pattern is "\u0042" and flags is {toString:void 0,
+ valueOf:function(){throw "invalof";} }
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("\\u0042", {toString:void 0, valueOf:function(){throw "invalof";}}) throw "invalof". Actual: ' + (new RegExp("\u0042", {toString:void 0, valueOf:function(){throw "invalof";}})));
+} catch (e) {
+ assert.sameValue(e, "invalof", 'The value of e is expected to be "invalof"');
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T13.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T13.js
new file mode 100644
index 0000000000..c61d99a950
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T13.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be ToString(pattern) and let F be ToString(flags)
+es5id: 15.10.4.1_A8_T13
+description: >
+ Pattern is "1" and flags is {toString:function(){throw "intostr";}
+ }
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("1", {toString:function(){throw "intostr";}}) throw "intostr". Actual: ' + (new RegExp("1", {toString:function(){throw "intostr";}})));
+} catch (e) {
+ assert.sameValue(e, "intostr", 'The value of e is expected to be "intostr"');
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T2.js
new file mode 100644
index 0000000000..dd91000ceb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T2.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be ToString(pattern) and let F be ToString(flags)
+es5id: 15.10.4.1_A8_T2
+description: Pattern is function(){return "a|b|[]";}() and flags is "ig"
+---*/
+
+var __re = new RegExp(function(){return "a|b|[]";}(),"ig");
+
+assert.sameValue(__re.ignoreCase, true, 'The value of __re.ignoreCase is expected to be true');
+assert.sameValue(__re.multiline, false, 'The value of __re.multiline is expected to be false');
+assert.sameValue(__re.global, true, 'The value of __re.global is expected to be true');
+assert.sameValue(__re.lastIndex, 0, 'The value of __re.lastIndex is expected to be 0');
+assert.notSameValue(typeof __re.source, "undefined", 'The value of typeof __re.source is not "undefined"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T3.js
new file mode 100644
index 0000000000..518410e0c6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T3.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be ToString(pattern) and let F be ToString(flags)
+es5id: 15.10.4.1_A8_T3
+description: >
+ Pattern is {toString:function(){return "[0-9]";}} and flags is
+ (function(){return "m";})()
+---*/
+
+var __re = new RegExp({toString:function(){return "[0-9]";}}, (function(){return "m";})());
+
+assert.sameValue(__re.ignoreCase, false, 'The value of __re.ignoreCase is expected to be false');
+assert.sameValue(__re.multiline, true, 'The value of __re.multiline is expected to be true');
+assert.sameValue(__re.global, false, 'The value of __re.global is expected to be false');
+assert.sameValue(__re.lastIndex, 0, 'The value of __re.lastIndex is expected to be 0');
+assert.notSameValue(typeof __re.source, "undefined", 'The value of typeof __re.source is not "undefined"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T4.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T4.js
new file mode 100644
index 0000000000..1a69326139
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be ToString(pattern) and let F be ToString(flags)
+es5id: 15.10.4.1_A8_T4
+description: >
+ Pattern is {toString:void 0,valueOf:function(){return "[z-z]";}}
+ and flags is {toString:void 0,valueOf:function(){return "mig";}}
+---*/
+
+var __re = new RegExp({toString:void 0,valueOf:function(){return "[z-z]";}}, {toString:void 0,valueOf:function(){return "mig";}});
+
+assert.sameValue(__re.ignoreCase, true, 'The value of __re.ignoreCase is expected to be true');
+assert.sameValue(__re.multiline, true, 'The value of __re.multiline is expected to be true');
+assert.sameValue(__re.global, true, 'The value of __re.global is expected to be true');
+assert.sameValue(__re.lastIndex, 0, 'The value of __re.lastIndex is expected to be 0');
+assert.notSameValue(typeof __re.source, "undefined", 'The value of typeof __re.source is not "undefined"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T5.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T5.js
new file mode 100644
index 0000000000..dee87d5e66
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T5.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be ToString(pattern) and let F be ToString(flags)
+es5id: 15.10.4.1_A8_T5
+description: >
+ Pattern is new Object("abc{1}") and flags is
+ {toString:function(){return "";}}
+---*/
+
+var __re = new RegExp(new Object("abc{1}"), {toString:function(){return "";}});
+
+assert.sameValue(__re.ignoreCase, false, 'The value of __re.ignoreCase is expected to be false');
+assert.sameValue(__re.multiline, false, 'The value of __re.multiline is expected to be false');
+assert.sameValue(__re.global, false, 'The value of __re.global is expected to be false');
+assert.sameValue(__re.lastIndex, 0, 'The value of __re.lastIndex is expected to be 0');
+assert.notSameValue(typeof __re.source, "undefined", 'The value of typeof __re.source is not "undefined"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T6.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T6.js
new file mode 100644
index 0000000000..0a810c3d09
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T6.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be ToString(pattern) and let F be ToString(flags)
+es5id: 15.10.4.1_A8_T6
+description: >
+ Pattern is {toString:function(){throw "intostr";} } and flags is
+ "i"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp({toString:function(){throw "intostr";}}, "i") throw "intostr". Actual: ' + (new RegExp({toString:function(){throw "intostr";}}, "i")));
+} catch (e) {
+ assert.sameValue(e, "intostr", 'The value of e is expected to be "intostr"');
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T7.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T7.js
new file mode 100644
index 0000000000..94265063db
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T7.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be ToString(pattern) and let F be ToString(flags)
+es5id: 15.10.4.1_A8_T7
+description: >
+ Pattern is {toString:void 0, valueOf:function(){throw "invalof";}
+ } and flags is "i"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp({toString:void 0, valueOf:function(){throw "invalof";}}) throw "invalof". Actual: ' + (new RegExp({toString:void 0, valueOf:function(){throw "invalof";}})));
+} catch (e) {
+ assert.sameValue(e, "invalof", 'The value of e is expected to be "invalof"');
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T8.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T8.js
new file mode 100644
index 0000000000..f97e2c6f9c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T8.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be ToString(pattern) and let F be ToString(flags)
+es5id: 15.10.4.1_A8_T8
+description: >
+ Pattern is {toString:function(){throw "intostr";} } and flags is
+ "error"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp({toString:function(){throw "intostr";}}, "error") throw "intostr". Actual: ' + (new RegExp({toString:function(){throw "intostr";}}, "error")));
+} catch (e) {
+ assert.sameValue(e, "intostr", 'The value of e is expected to be "intostr"');
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T9.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T9.js
new file mode 100644
index 0000000000..c42f79e4c4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A8_T9.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: let P be ToString(pattern) and let F be ToString(flags)
+es5id: 15.10.4.1_A8_T9
+description: Pattern is 1 and flags is new Object("gi")
+---*/
+
+var __re = new RegExp(1, new Object("gi"));
+
+assert.sameValue(__re.ignoreCase, true, 'The value of __re.ignoreCase is expected to be true');
+assert.sameValue(__re.multiline, false, 'The value of __re.multiline is expected to be false');
+assert.sameValue(__re.global, true, 'The value of __re.global is expected to be true');
+assert.sameValue(__re.lastIndex, 0, 'The value of __re.lastIndex is expected to be 0');
+assert.notSameValue(typeof __re.source, "undefined", 'The value of typeof __re.source is not "undefined"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A9_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A9_T1.js
new file mode 100644
index 0000000000..f8a44404da
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A9_T1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If P's characters do not have the form Pattern, then throw a SyntaxError
+ exception
+es5id: 15.10.4.1_A9_T1
+description: Pattern is "??"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("??") throw SyntaxError. Actual: ' + (new RegExp("??")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A9_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A9_T2.js
new file mode 100644
index 0000000000..8b77e39b35
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A9_T2.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If P's characters do not have the form Pattern, then throw a SyntaxError
+ exception
+es5id: 15.10.4.1_A9_T2
+description: Pattern is "[{-z]"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("[{-z]") throw SyntaxError. Actual: ' + (new RegExp("[{-z]")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A9_T3.js b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A9_T3.js
new file mode 100644
index 0000000000..847ae1ab1b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.4.1_A9_T3.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If P's characters do not have the form Pattern, then throw a SyntaxError
+ exception
+es5id: 15.10.4.1_A9_T3
+description: Pattern is "[a--z]"
+---*/
+
+try {
+ throw new Test262Error('#1.1: new RegExp("[a--z]") throw SyntaxError. Actual: ' + (new RegExp("[a--z]")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof SyntaxError,
+ true,
+ 'The result of evaluating (e instanceof SyntaxError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.5_A1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.5_A1.js
new file mode 100644
index 0000000000..9288221078
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.5_A1.js
@@ -0,0 +1,11 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp constructor has length property whose value is 2
+es5id: 15.10.5_A1
+description: Checking RegExp.length property
+---*/
+assert.sameValue(RegExp.length, 2, 'The value of RegExp.length is expected to be 2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.5_A2_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.5_A2_T1.js
new file mode 100644
index 0000000000..c081cf7175
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.5_A2_T1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The value of the internal [[Prototype]] property of the RegExp
+ constructor is the Function prototype object
+es5id: 15.10.5_A2_T1
+description: Checking Function.prototype.isPrototypeOf(RegExp)
+---*/
+assert.sameValue(
+ Function.prototype.isPrototypeOf(RegExp),
+ true,
+ 'Function.prototype.isPrototypeOf(RegExp) must return true'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.5_A2_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.5_A2_T2.js
new file mode 100644
index 0000000000..d63649431a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.5_A2_T2.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The value of the internal [[Prototype]] property of the RegExp
+ constructor is the Function prototype object
+es5id: 15.10.5_A2_T2
+description: >
+ Add new property to Function.prototype and then check this
+ property of RegExp
+---*/
+
+Function.prototype.indicator = 1;
+
+assert.sameValue(RegExp.indicator, 1, 'The value of RegExp.indicator is expected to be 1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.7_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.7_A1_T1.js
new file mode 100644
index 0000000000..eb138e590e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.7_A1_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp instance has no [[Call]] internal method
+es5id: 15.10.7_A1_T1
+description: Checking if call of RegExp instance fails
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[^a]*/() throw TypeError. Actual: ' + (/[^a]*/()));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.7_A1_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.7_A1_T2.js
new file mode 100644
index 0000000000..5ae0061f9a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.7_A1_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp instance has no [[Call]] internal method
+es5id: 15.10.7_A1_T2
+description: Checking if call of RegExp("a|b","g")() fails
+---*/
+
+try {
+ throw new Test262Error('#1.1: RegExp("a|b","g")() throw TypeError. Actual: ' + (RegExp("a|b","g")()));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.7_A2_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.7_A2_T1.js
new file mode 100644
index 0000000000..b0df3705a2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.7_A2_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp instance has no [[Construct]] internal method
+es5id: 15.10.7_A2_T1
+description: Checking if creating new RegExp instance fails
+---*/
+
+try {
+ throw new Test262Error('#1.1: new /z/() throw TypeError. Actual: ' + (new /z/()));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.7_A2_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.7_A2_T2.js
new file mode 100644
index 0000000000..e966a1421d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.7_A2_T2.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp instance has no [[Construct]] internal method
+es5id: 15.10.7_A2_T2
+description: Checking if creating "new RegExp" instance fails
+---*/
+
+try {
+ throw new Test262Error('#1.1: new new RegExp throw TypeError. Actual: ' + (new new RegExp));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.7_A3_T1.js b/js/src/tests/test262/built-ins/RegExp/S15.10.7_A3_T1.js
new file mode 100644
index 0000000000..68d7c293f0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.7_A3_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp instance type is RegExp
+es5id: 15.10.7_A3_T1
+description: >
+ Checking type of RegExp instance with operators typeof, instanceof
+ and check it constructor. RegExp instance is /[^a]* /
+---*/
+
+var __re = /[^a]*/;
+
+assert.sameValue(typeof __re, "object", 'The value of `typeof __re` is expected to be "object"');
+assert.sameValue(__re.constructor, RegExp, 'The value of __re.constructor is expected to equal the value of RegExp');
+
+assert.sameValue(
+ __re instanceof RegExp,
+ true,
+ 'The result of evaluating (__re instanceof RegExp) is expected to be true'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/S15.10.7_A3_T2.js b/js/src/tests/test262/built-ins/RegExp/S15.10.7_A3_T2.js
new file mode 100644
index 0000000000..ad62441e4f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/S15.10.7_A3_T2.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp instance type is RegExp
+es5id: 15.10.7_A3_T2
+description: >
+ Checking type of RegExp instance with operators typeof, instanceof
+ and check it constructor. RegExp instance is new RegExp
+---*/
+
+var __re = new RegExp;
+
+assert.sameValue(typeof __re, "object", 'The value of `typeof __re` is expected to be "object"');
+assert.sameValue(__re.constructor, RegExp, 'The value of __re.constructor is expected to equal the value of RegExp');
+
+assert.sameValue(
+ __re instanceof RegExp,
+ true,
+ 'The result of evaluating (__re instanceof RegExp) is expected to be true'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/Symbol.species/browser.js b/js/src/tests/test262/built-ins/RegExp/Symbol.species/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/Symbol.species/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/Symbol.species/length.js b/js/src/tests/test262/built-ins/RegExp/Symbol.species/length.js
new file mode 100644
index 0000000000..c38cb495a3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/Symbol.species/length.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.4.2
+description: >
+ get RegExp [ @@species ].length is 0.
+info: |
+ get RegExp [ @@species ]
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this
+ value is equal to the largest number of named arguments shown in the
+ subclause headings for the function description, including optional
+ parameters. However, rest parameters shown using the form “...name”
+ are not included in the default argument count.
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [Symbol.species]
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp, Symbol.species);
+
+assert.sameValue(desc.get.length, 0);
+
+verifyNotEnumerable(desc.get, "length");
+verifyNotWritable(desc.get, "length");
+verifyConfigurable(desc.get, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/Symbol.species/return-value.js b/js/src/tests/test262/built-ins/RegExp/Symbol.species/return-value.js
new file mode 100644
index 0000000000..5eec628c6b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/Symbol.species/return-value.js
@@ -0,0 +1,16 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp-@@species
+description: Return value of @@species accessor method
+info: |
+ 1. Return the this value.
+features: [Symbol.species]
+---*/
+
+var thisVal = {};
+var accessor = Object.getOwnPropertyDescriptor(RegExp, Symbol.species).get;
+
+assert.sameValue(accessor.call(thisVal), thisVal);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/Symbol.species/shell.js b/js/src/tests/test262/built-ins/RegExp/Symbol.species/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/Symbol.species/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/Symbol.species/symbol-species-name.js b/js/src/tests/test262/built-ins/RegExp/Symbol.species/symbol-species-name.js
new file mode 100644
index 0000000000..c7069365a6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/Symbol.species/symbol-species-name.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 21.2.4.2
+description: >
+ RegExp[Symbol.species] accessor property get name
+info: |
+ 21.2.4.2 get RegExp [ @@species ]
+
+ ...
+ The value of the name property of this function is "get [Symbol.species]".
+features: [Symbol.species]
+includes: [propertyHelper.js]
+---*/
+
+var descriptor = Object.getOwnPropertyDescriptor(RegExp, Symbol.species);
+
+assert.sameValue(
+ descriptor.get.name,
+ 'get [Symbol.species]'
+);
+
+verifyNotEnumerable(descriptor.get, 'name');
+verifyNotWritable(descriptor.get, 'name');
+verifyConfigurable(descriptor.get, 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/Symbol.species/symbol-species.js b/js/src/tests/test262/built-ins/RegExp/Symbol.species/symbol-species.js
new file mode 100644
index 0000000000..8a2a8be11d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/Symbol.species/symbol-species.js
@@ -0,0 +1,23 @@
+// Copyright 2015 Cubane Canada, Inc. All rights reserved.
+// See LICENSE for details.
+
+/*---
+info: |
+ RegExp has a property at `Symbol.species`
+esid: sec-get-regexp-@@species
+author: Sam Mikes
+description: RegExp[Symbol.species] exists per spec
+includes: [propertyHelper.js]
+features: [Symbol.species]
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp, Symbol.species);
+
+assert.sameValue(desc.set, undefined);
+assert.sameValue(typeof desc.get, 'function');
+
+verifyNotWritable(RegExp, Symbol.species, Symbol.species);
+verifyNotEnumerable(RegExp, Symbol.species);
+verifyConfigurable(RegExp, Symbol.species);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/browser.js b/js/src/tests/test262/built-ins/RegExp/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/call_with_non_regexp_same_constructor.js b/js/src/tests/test262/built-ins/RegExp/call_with_non_regexp_same_constructor.js
new file mode 100644
index 0000000000..c50a5a202b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/call_with_non_regexp_same_constructor.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: RegExp returns its input argument if constructor is same-value
+info: |
+ 21.2.3.1 RegExp ( pattern, flags )
+
+ ...
+ 4. Else,
+ a. Let newTarget be the active function object.
+ b. If patternIsRegExp is true and flags is undefined, then
+ i. Let patternConstructor be Get(pattern, "constructor").
+ ii. ReturnIfAbrupt(patternConstructor).
+ iii. If SameValue(newTarget, patternConstructor) is true, return pattern.
+es6id: 21.2.3.1
+features: [Symbol.match]
+---*/
+
+var obj = {
+ constructor: RegExp
+};
+obj[Symbol.match] = true;
+
+assert.sameValue(RegExp(obj), obj, "RegExp returns its input argument");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/call_with_regexp_match_falsy.js b/js/src/tests/test262/built-ins/RegExp/call_with_regexp_match_falsy.js
new file mode 100644
index 0000000000..15dca37be3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/call_with_regexp_match_falsy.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: RegExp returns a new object if constructor is not same-value
+info: |
+ 21.2.3.1 RegExp ( pattern, flags )
+
+ ...
+ 4. Else,
+ a. Let newTarget be the active function object.
+ b. If patternIsRegExp is true and flags is undefined, then
+ i. Let patternConstructor be Get(pattern, "constructor").
+ ii. ReturnIfAbrupt(patternConstructor).
+ iii. If SameValue(newTarget, patternConstructor) is true, return pattern.
+es6id: 21.2.3.1
+features: [Symbol.match]
+---*/
+
+var regExpObj = /(?:)/;
+regExpObj[Symbol.match] = false;
+
+assert.notSameValue(RegExp(regExpObj), regExpObj, "RegExp returns new object");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/call_with_regexp_not_same_constructor.js b/js/src/tests/test262/built-ins/RegExp/call_with_regexp_not_same_constructor.js
new file mode 100644
index 0000000000..92569c6e52
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/call_with_regexp_not_same_constructor.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: RegExp returns a new object if constructor is not same-value
+info: |
+ 21.2.3.1 RegExp ( pattern, flags )
+
+ ...
+ 4. Else,
+ a. Let newTarget be the active function object.
+ b. If patternIsRegExp is true and flags is undefined, then
+ i. Let patternConstructor be Get(pattern, "constructor").
+ ii. ReturnIfAbrupt(patternConstructor).
+ iii. If SameValue(newTarget, patternConstructor) is true, return pattern.
+es6id: 21.2.3.1
+---*/
+
+var regExpObj = /(?:)/;
+regExpObj.constructor = null;
+
+assert.notSameValue(RegExp(regExpObj), regExpObj, "RegExp returns new object");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/character-class-escape-non-whitespace-u180e.js b/js/src/tests/test262/built-ins/RegExp/character-class-escape-non-whitespace-u180e.js
new file mode 100644
index 0000000000..d7d51c4c71
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/character-class-escape-non-whitespace-u180e.js
@@ -0,0 +1,24 @@
+// Copyright 2018 Leonardo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-characterclassescape
+description: Detect non WhiteSpace using \S+
+info: |
+ The production CharacterClassEscape :: S evaluates by returning
+ the set of all characters not included in the set returned by
+ CharacterClassEscape :: s
+
+ The Mongolian Vowel Separator (u180e) became a non whitespace character
+ since Unicode 6.3.0
+features: [u180e]
+---*/
+
+var str = String.fromCharCode(0x180E);
+assert.sameValue(
+ str.replace(/\S+/g, "test262"),
+ "test262",
+ "Non WhiteSpace character: \\u180E"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/character-class-escape-non-whitespace.js b/js/src/tests/test262/built-ins/RegExp/character-class-escape-non-whitespace.js
new file mode 100644
index 0000000000..0db2ab6ae3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/character-class-escape-non-whitespace.js
@@ -0,0 +1,57 @@
+// Copyright 2018 Leonardo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-characterclassescape
+description: Detect non WhiteSpace using \S+
+info: |
+ The production CharacterClassEscape :: S evaluates by returning
+ the set of all characters not included in the set returned by
+ CharacterClassEscape :: s
+---*/
+
+var j;
+var i;
+var str;
+var res;
+
+var whitespaceChars = [
+ 0x0009,
+ 0x000A,
+ 0x000B,
+ 0x000C,
+ 0x000D,
+ 0x0020,
+ 0x00A0,
+ 0x1680,
+ 0x2000,
+ 0x2001,
+ 0x2002,
+ 0x2003,
+ 0x2004,
+ 0x2005,
+ 0x2006,
+ 0x2007,
+ 0x2008,
+ 0x2009,
+ 0x200A,
+ 0x2028,
+ 0x2029,
+ 0x202F,
+ 0x205F,
+ 0x3000,
+];
+
+for (j = 0x0000; j < 0x10000; j++) {
+ if (j === 0x180E) { continue; } // Skip 0x180E, current test in a separate file
+ if (j === 0xFEFF) { continue; } // Ignore BOM
+ str = String.fromCharCode(j);
+ res = str.replace(/\S+/g, "test262");
+ if (whitespaceChars.indexOf(j) >= 0) {
+ assert.sameValue(res, str, "WhiteSpace character, charCode: " + j);
+ } else {
+ assert.sameValue(res, "test262", "Non WhiteSpace character, charCode: " + j);
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/dotall/browser.js b/js/src/tests/test262/built-ins/RegExp/dotall/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/dotall/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/dotall/shell.js b/js/src/tests/test262/built-ins/RegExp/dotall/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/dotall/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/dotall/with-dotall-unicode.js b/js/src/tests/test262/built-ins/RegExp/dotall/with-dotall-unicode.js
new file mode 100644
index 0000000000..f0d4995b2c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/dotall/with-dotall-unicode.js
@@ -0,0 +1,37 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Test the characters included by . in dotAll and unicode mode
+info: |
+ 21.2.2.8 Atom
+ The production Atom::. evaluates as follows:
+ 1. If DotAll is true, then
+ a. Let A be the set of all characters.
+ 2. Otherwise, let A be the set of all characters except LineTerminator.
+ 3. Call CharacterSetMatcher(A, false) and return its Matcher result.
+
+esid: sec-atom
+features: [regexp-dotall, u180e]
+---*/
+
+// The behavior is the same regardless of the m flag
+for (let re of [/^.$/su, /^.$/sum]) {
+ assert(re.test("a"));
+ assert(re.test("3"));
+ assert(re.test("π"));
+ assert(re.test("\u2027"));
+ assert(re.test("\u0085"));
+ assert(re.test("\v"));
+ assert(re.test("\f"));
+ assert(re.test("\u180E"));
+ assert(re.test("\u{10300}"), "Supplementary plane matched by a single .");
+ assert(re.test("\n"));
+ assert(re.test("\r"));
+ assert(re.test("\u2028"));
+ assert(re.test("\u2029"));
+ assert(re.test("\uD800"));
+ assert(re.test("\uDFFF"));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/dotall/with-dotall.js b/js/src/tests/test262/built-ins/RegExp/dotall/with-dotall.js
new file mode 100644
index 0000000000..d56fc6f3a4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/dotall/with-dotall.js
@@ -0,0 +1,37 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Test the characters included by . in dotAll and non-unicode mode
+info: |
+ 21.2.2.8 Atom
+ The production Atom::. evaluates as follows:
+ 1. If DotAll is true, then
+ a. Let A be the set of all characters.
+ 2. Otherwise, let A be the set of all characters except LineTerminator.
+ 3. Call CharacterSetMatcher(A, false) and return its Matcher result.
+
+esid: sec-atom
+features: [regexp-dotall, u180e]
+---*/
+
+// The behavior is the same regardless of the m flag
+for (let re of [/^.$/s, /^.$/sm]) {
+ assert(re.test("a"));
+ assert(re.test("3"));
+ assert(re.test("π"));
+ assert(re.test("\u2027"));
+ assert(re.test("\u0085"));
+ assert(re.test("\v"));
+ assert(re.test("\f"));
+ assert(re.test("\u180E"));
+ assert(!re.test("\u{10300}"), "Supplementary plane not matched by a single .");
+ assert(re.test("\n"));
+ assert(re.test("\r"));
+ assert(re.test("\u2028"));
+ assert(re.test("\u2029"));
+ assert(re.test("\uD800"));
+ assert(re.test("\uDFFF"));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/dotall/without-dotall-unicode.js b/js/src/tests/test262/built-ins/RegExp/dotall/without-dotall-unicode.js
new file mode 100644
index 0000000000..d8b61272be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/dotall/without-dotall-unicode.js
@@ -0,0 +1,37 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Without the dotAll flag, . does not match newlines in Unicode mode
+info: |
+ 21.2.2.8 Atom
+ The production Atom::. evaluates as follows:
+ 1. If DotAll is true, then
+ a. Let A be the set of all characters.
+ 2. Otherwise, let A be the set of all characters except LineTerminator.
+ 3. Call CharacterSetMatcher(A, false) and return its Matcher result.
+
+esid: sec-atom
+features: [u180e]
+---*/
+
+// The behavior is the same regardless of the m flag
+for (let re of [/^.$/u, /^.$/um]) {
+ assert(re.test("a"));
+ assert(re.test("3"));
+ assert(re.test("π"));
+ assert(re.test("\u2027"));
+ assert(re.test("\u0085"));
+ assert(re.test("\v"));
+ assert(re.test("\f"));
+ assert(re.test("\u180E"));
+ assert(re.test("\u{10300}"), "Supplementary plane matched by a single .");
+ assert(!re.test("\n"));
+ assert(!re.test("\r"));
+ assert(!re.test("\u2028"));
+ assert(!re.test("\u2029"));
+ assert(re.test("\uD800"));
+ assert(re.test("\uDFFF"));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/dotall/without-dotall.js b/js/src/tests/test262/built-ins/RegExp/dotall/without-dotall.js
new file mode 100644
index 0000000000..6e27e8081e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/dotall/without-dotall.js
@@ -0,0 +1,37 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Without the dotAll flag, . does not match newlines
+info: |
+ 21.2.2.8 Atom
+ The production Atom::. evaluates as follows:
+ 1. If DotAll is true, then
+ a. Let A be the set of all characters.
+ 2. Otherwise, let A be the set of all characters except LineTerminator.
+ 3. Call CharacterSetMatcher(A, false) and return its Matcher result.
+
+esid: sec-atom
+features: [u180e]
+---*/
+
+// The behavior is the same regardless of the m flag
+for (let re of [/^.$/, /^.$/m]) {
+ assert(re.test("a"));
+ assert(re.test("3"));
+ assert(re.test("π"));
+ assert(re.test("\u2027"));
+ assert(re.test("\u0085"));
+ assert(re.test("\v"));
+ assert(re.test("\f"));
+ assert(re.test("\u180E"));
+ assert(!re.test("\u{10300}"), "Supplementary plane matched by a single .");
+ assert(!re.test("\n"));
+ assert(!re.test("\r"));
+ assert(!re.test("\u2028"));
+ assert(!re.test("\u2029"));
+ assert(re.test("\uD800"));
+ assert(re.test("\uDFFF"));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/duplicate-flags.js b/js/src/tests/test262/built-ins/RegExp/duplicate-flags.js
new file mode 100644
index 0000000000..a36c45fa49
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/duplicate-flags.js
@@ -0,0 +1,34 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExpInitialize ( obj, pattern, flags )
+ 5. If F contains any code unit other than "g", "i", "m", "s", "u", or "y" or if it contains the same code unit more than once, throw a SyntaxError exception.
+esid: sec-regexpinitialize
+description: Check that duplicate RegExp flags are disallowed
+features: [regexp-dotall, regexp-match-indices]
+---*/
+
+new RegExp("", "mig"); // single g will not throw SyntaxError
+assert.throws(SyntaxError, () => new RegExp("", "migg"), "duplicate g");
+
+new RegExp("", "i"); // single i will not throw SyntaxError
+assert.throws(SyntaxError, () => new RegExp("", "ii"), "duplicate i");
+
+new RegExp("", "m"); // single m will not throw SyntaxError
+assert.throws(SyntaxError, () => new RegExp("", "mm"), "duplicate m");
+
+new RegExp("", "s"); // single s will not throw SyntaxError
+assert.throws(SyntaxError, () => new RegExp("", "ss"), "duplicate s");
+
+new RegExp("", "u"); // single u will not throw SyntaxError
+assert.throws(SyntaxError, () => new RegExp("", "uu"), "duplicate u");
+
+new RegExp("", "y"); // single y will not throw SyntaxError
+assert.throws(SyntaxError, () => new RegExp("", "yy"), "duplicate y");
+
+new RegExp("", "d"); // single d will not throw SyntaxError
+assert.throws(SyntaxError, () => new RegExp("", "dd"), "duplicate d");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/duplicate-named-capturing-groups-syntax.js b/js/src/tests/test262/built-ins/RegExp/duplicate-named-capturing-groups-syntax.js
new file mode 100644
index 0000000000..4064af92a3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/duplicate-named-capturing-groups-syntax.js
@@ -0,0 +1,21 @@
+// |reftest| skip -- regexp-duplicate-named-groups is not supported
+// Copyright 2022 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp-pattern-flags
+description: Runtime parsing of syntax for duplicate named capturing groups
+features: [regexp-duplicate-named-groups]
+---*/
+
+assert.throws(
+ SyntaxError,
+ () => new RegExp("(?<x>a)(?<x>b)"),
+ "Duplicate named capturing groups in the same alternative do not parse"
+);
+
+let source = "(?<x>a)|(?<x>b)";
+let parsed = new RegExp(source);
+assert.sameValue(parsed.source, source, "Duplicate named capturing groups in separate alternatives parse correctly");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/from-regexp-like-flag-override.js b/js/src/tests/test262/built-ins/RegExp/from-regexp-like-flag-override.js
new file mode 100644
index 0000000000..09bc9e01a7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/from-regexp-like-flag-override.js
@@ -0,0 +1,69 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Initialization from a RegExp-like object (with flag overrides)
+es6id: 21.2.3.1
+info: |
+ 1. Let patternIsRegExp be IsRegExp(pattern).
+ [...]
+ 6. Else if patternIsRegExp is true, then
+ a. Let P be Get(pattern, "source").
+ b. ReturnIfAbrupt(P).
+ c. If flags is undefined, then
+ [...]
+ d. Else, let F be flags.
+ [...]
+ 10. Return RegExpInitialize(O, P, F).
+features: [Symbol, Symbol.match]
+---*/
+
+var obj = {
+ source: 'source text'
+};
+var result;
+
+Object.defineProperty(obj, 'flags', {
+ get: function() {
+ throw new Test262Error('The `flags` property value should not be referenced.');
+ }
+});
+
+obj[Symbol.match] = true;
+result = new RegExp(obj, 'g');
+assert.sameValue(
+ result.source, 'source text', '@@match specified as a primitive boolean'
+);
+assert.sameValue(
+ result.flags, 'g', '@@match specified as a primitive boolean'
+);
+
+obj[Symbol.match] = 'string';
+result = new RegExp(obj, 'g');
+assert.sameValue(
+ result.source, 'source text', '@@match specified as a primitive string'
+);
+assert.sameValue(result.flags, 'g', '@@match specified as a primitive string');
+
+obj[Symbol.match] = [];
+result = new RegExp(obj, 'g');
+assert.sameValue(
+ result.source, 'source text', '@@match specified as an array'
+);
+assert.sameValue(result.flags, 'g', '@@match specified as an array');
+
+obj[Symbol.match] = Symbol();
+result = new RegExp(obj, 'g');
+assert.sameValue(
+ result.source, 'source text', '@@match specified as a Symbol'
+);
+assert.sameValue(result.flags, 'g', '@@match specified as a Symbol');
+
+obj[Symbol.match] = 86;
+result = new RegExp(obj, 'g');
+assert.sameValue(
+ result.source, 'source text', '@@match specified as a primitive number'
+);
+assert.sameValue(result.flags, 'g', '@@match specified as a primitive number');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/from-regexp-like-get-ctor-err.js b/js/src/tests/test262/built-ins/RegExp/from-regexp-like-get-ctor-err.js
new file mode 100644
index 0000000000..cc905363ec
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/from-regexp-like-get-ctor-err.js
@@ -0,0 +1,53 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when accessing `constructor` property of RegExp-like objects
+es6id: 21.2.3.1
+info: |
+ 1. Let patternIsRegExp be IsRegExp(pattern).
+ [...]
+ 3. If NewTarget is not undefined, let newTarget be NewTarget.
+ 4. Else,
+ a. Let newTarget be the active function object.
+ b. If patternIsRegExp is true and flags is undefined, then
+ i. Let patternConstructor be Get(pattern, "constructor").
+ ii. ReturnIfAbrupt(patternConstructor).
+ iii. If SameValue(newTarget, patternConstructor) is true, return
+ pattern.
+features: [Symbol, Symbol.match]
+---*/
+
+var obj = Object.defineProperty({}, 'constructor', {
+ get: function() {
+ throw new Test262Error();
+ }
+});
+
+obj[Symbol.match] = true;
+assert.throws(Test262Error, function() {
+ RegExp(obj);
+});
+
+obj[Symbol.match] = 'string';
+assert.throws(Test262Error, function() {
+ RegExp(obj);
+});
+
+obj[Symbol.match] = [];
+assert.throws(Test262Error, function() {
+ RegExp(obj);
+});
+
+obj[Symbol.match] = Symbol()
+assert.throws(Test262Error, function() {
+ RegExp(obj);
+});
+
+obj[Symbol.match] = 86;
+assert.throws(Test262Error, function() {
+ RegExp(obj);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/from-regexp-like-get-flags-err.js b/js/src/tests/test262/built-ins/RegExp/from-regexp-like-get-flags-err.js
new file mode 100644
index 0000000000..11c81f0894
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/from-regexp-like-get-flags-err.js
@@ -0,0 +1,51 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error thrown from `flags` property of a RegExp-like object
+es6id: 21.2.3.1
+info: |
+ 1. Let patternIsRegExp be IsRegExp(pattern).
+ [...]
+ 6. Else if patternIsRegExp is true, then
+ [...]
+ c. If flags is undefined, then
+ i. Let F be Get(pattern, "flags").
+ ii. ReturnIfAbrupt(F).
+features: [Symbol, Symbol.match]
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 'flags', {
+ get: function() {
+ throw new Test262Error();
+ }
+});
+
+obj[Symbol.match] = true;
+assert.throws(Test262Error, function() {
+ new RegExp(obj);
+});
+
+obj[Symbol.match] = 'string';
+assert.throws(Test262Error, function() {
+ new RegExp(obj);
+});
+
+obj[Symbol.match] = [];
+assert.throws(Test262Error, function() {
+ new RegExp(obj);
+});
+
+obj[Symbol.match] = Symbol();
+assert.throws(Test262Error, function() {
+ new RegExp(obj);
+});
+
+obj[Symbol.match] = 86;
+assert.throws(Test262Error, function() {
+ new RegExp(obj);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/from-regexp-like-get-source-err.js b/js/src/tests/test262/built-ins/RegExp/from-regexp-like-get-source-err.js
new file mode 100644
index 0000000000..a660202dd2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/from-regexp-like-get-source-err.js
@@ -0,0 +1,55 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error thrown from `source` property of a RegExp-like object
+es6id: 21.2.3.1
+info: |
+ 1. Let patternIsRegExp be IsRegExp(pattern).
+ [...]
+ 6. Else if patternIsRegExp is true, then
+ a. Let P be Get(pattern, "source").
+ b. ReturnIfAbrupt(P).
+features: [Symbol, Symbol.match]
+---*/
+
+var obj = {};
+function CustomError() {}
+Object.defineProperty(obj, 'source', {
+ get: function() {
+ throw new CustomError();
+ }
+});
+Object.defineProperty(obj, 'flags', {
+ get: function() {
+ throw new Test262Error('the `flags` property should not be referenced before `source`');
+ }
+});
+
+obj[Symbol.match] = true;
+assert.throws(CustomError, function() {
+ new RegExp(obj);
+});
+
+obj[Symbol.match] = 'string';
+assert.throws(CustomError, function() {
+ new RegExp(obj);
+});
+
+obj[Symbol.match] = [];
+assert.throws(CustomError, function() {
+ new RegExp(obj);
+});
+
+obj[Symbol.match] = Symbol();
+assert.throws(CustomError, function() {
+ new RegExp(obj);
+});
+
+obj[Symbol.match] = 86;
+assert.throws(CustomError, function() {
+ new RegExp(obj);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/from-regexp-like-short-circuit.js b/js/src/tests/test262/built-ins/RegExp/from-regexp-like-short-circuit.js
new file mode 100644
index 0000000000..f3ddd01bcf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/from-regexp-like-short-circuit.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Skipping construction from RegExp-like objects
+es6id: 21.2.3.1
+info: |
+ 1. Let patternIsRegExp be IsRegExp(pattern).
+ [...]
+ 3. If NewTarget is not undefined, let newTarget be NewTarget.
+ 4. Else,
+ a. Let newTarget be the active function object.
+ b. If patternIsRegExp is true and flags is undefined, then
+ i. Let patternConstructor be Get(pattern, "constructor").
+ ii. ReturnIfAbrupt(patternConstructor).
+ iii. If SameValue(newTarget, patternConstructor) is true, return
+ pattern.
+features: [Symbol, Symbol.match]
+---*/
+
+var obj = {
+ constructor: RegExp
+};
+
+obj[Symbol.match] = true;
+assert.sameValue(RegExp(obj), obj);
+
+obj[Symbol.match] = 'string';
+assert.sameValue(RegExp(obj), obj);
+
+obj[Symbol.match] = [];
+assert.sameValue(RegExp(obj), obj);
+
+obj[Symbol.match] = Symbol();
+assert.sameValue(RegExp(obj), obj);
+
+obj[Symbol.match] = 86;
+assert.sameValue(RegExp(obj), obj);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/from-regexp-like.js b/js/src/tests/test262/built-ins/RegExp/from-regexp-like.js
new file mode 100644
index 0000000000..27a124e3d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/from-regexp-like.js
@@ -0,0 +1,58 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Initialization from a RegExp-like object
+es6id: 21.2.3.1
+info: |
+ 1. Let patternIsRegExp be IsRegExp(pattern).
+ [...]
+ 6. Else if patternIsRegExp is true, then
+ a. Let P be Get(pattern, "source").
+ b. ReturnIfAbrupt(P).
+ c. If flags is undefined, then
+ i. Let F be Get(pattern, "flags").
+ ii. ReturnIfAbrupt(F).
+ d. Else, let F be flags.
+ [...]
+ 10. Return RegExpInitialize(O, P, F).
+features: [Symbol, Symbol.match]
+---*/
+
+var obj = {
+ source: 'source text',
+ flags: 'i'
+};
+var result;
+
+obj[Symbol.match] = true;
+result = new RegExp(obj);
+assert.sameValue(Object.getPrototypeOf(result), RegExp.prototype);
+assert.sameValue(result.source, 'source text');
+assert.sameValue(result.flags, 'i');
+
+obj[Symbol.match] = 'string';
+result = new RegExp(obj);
+assert.sameValue(Object.getPrototypeOf(result), RegExp.prototype);
+assert.sameValue(result.source, 'source text');
+assert.sameValue(result.flags, 'i');
+
+obj[Symbol.match] = [];
+result = new RegExp(obj);
+assert.sameValue(Object.getPrototypeOf(result), RegExp.prototype);
+assert.sameValue(result.source, 'source text');
+assert.sameValue(result.flags, 'i');
+
+obj[Symbol.match] = Symbol();
+result = new RegExp(obj);
+assert.sameValue(Object.getPrototypeOf(result), RegExp.prototype);
+assert.sameValue(result.source, 'source text');
+assert.sameValue(result.flags, 'i');
+
+obj[Symbol.match] = 86;
+result = new RegExp(obj);
+assert.sameValue(Object.getPrototypeOf(result), RegExp.prototype);
+assert.sameValue(result.source, 'source text');
+assert.sameValue(result.flags, 'i');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/is-a-constructor.js b/js/src/tests/test262/built-ins/RegExp/is-a-constructor.js
new file mode 100644
index 0000000000..3c0b70951d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/is-a-constructor.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ The RegExp constructor implements [[Construct]]
+info: |
+ IsConstructor ( argument )
+
+ The abstract operation IsConstructor takes argument argument (an ECMAScript language value).
+ It determines if argument is a function object with a [[Construct]] internal method.
+ It performs the following steps when called:
+
+ If Type(argument) is not Object, return false.
+ If argument has a [[Construct]] internal method, return true.
+ Return false.
+includes: [isConstructor.js]
+features: [Reflect.construct]
+---*/
+
+assert.sameValue(isConstructor(RegExp), true, 'isConstructor(RegExp) must return true');
+new RegExp('');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lastIndex.js b/js/src/tests/test262/built-ins/RegExp/lastIndex.js
new file mode 100644
index 0000000000..77df89e5ab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lastIndex.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-regexp-pattern-flags
+description: Initial state of the `lastIndex` property
+info: |
+ [...]
+ 7. Let O be ? RegExpAlloc(newTarget).
+ 8. Return ? RegExpInitialize(O, P, F).
+
+ 21.2.3.2.2 Runtime Semantics: RegExpInitialize
+
+ [...]
+ 12. Perform ? Set(obj, "lastIndex", 0, true).
+ [...]
+
+ 21.2.3.2.1 Runtime Semantics: RegExpAlloc
+
+ [...]
+ 2. Perform ! DefinePropertyOrThrow(obj, "lastIndex", PropertyDescriptor
+ {[[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false}).
+ [...]
+includes: [propertyHelper.js]
+---*/
+
+var re = new RegExp('');
+
+assert.sameValue(re.lastIndex, 0);
+
+verifyNotEnumerable(re, 'lastIndex');
+verifyWritable(re, 'lastIndex');
+verifyNotConfigurable(re, 'lastIndex');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/alternations.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/alternations.js
new file mode 100644
index 0000000000..64c4247043
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/alternations.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assertion
+description: Alternations are tried left to right, and we do not backtrack into a lookbehind.
+info: |
+ The production Assertion :: (?<=Disjunction) evaluates as follows:
+ 1. Evaluate Disjunction with -1 as its direction argument to obtain a Matcher m.
+ 2. Return an internal Matcher closure that takes two arguments, a State x and a Continuation
+ c, and performs the following steps:
+ a. Let d be a Continuation that always returns its State argument as a successful MatchResult.
+ b. Call m(x, d) and let r be its result.
+ c. If r is failure, return failure.
+ d. Let y be r's State.
+ e. Let cap be y's captures List.
+ f. Let xe be x's endIndex.
+ g. Let z be the State (xe, cap).
+ h. Call c(z) and return its result.
+features: [regexp-lookbehind]
+includes: [compareArray.js]
+---*/
+
+assert.compareArray("xabcd".match(/.*(?<=(..|...|....))(.*)/), ["xabcd", "cd", ""], "#1");
+assert.compareArray("xabcd".match(/.*(?<=(xx|...|....))(.*)/), ["xabcd", "bcd", ""], "#2");
+assert.compareArray("xxabcd".match(/.*(?<=(xx|...))(.*)/), ["xxabcd", "bcd", ""], "#3");
+assert.compareArray("xxabcd".match(/.*(?<=(xx|xxx))(.*)/), ["xxabcd", "xx", "abcd"], "#4");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/back-references-to-captures.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/back-references-to-captures.js
new file mode 100644
index 0000000000..0f1f853ecc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/back-references-to-captures.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assertion
+description: Back references to captures inside the lookbehind.
+info: |
+ The production Assertion :: (?<=Disjunction) evaluates as follows:
+ 1. Evaluate Disjunction with -1 as its direction argument to obtain a Matcher m.
+ 2. Return an internal Matcher closure that takes two arguments, a State x and a Continuation
+ c, and performs the following steps:
+ a. Let d be a Continuation that always returns its State argument as a successful MatchResult.
+ b. Call m(x, d) and let r be its result.
+ c. If r is failure, return failure.
+ d. Let y be r's State.
+ e. Let cap be y's captures List.
+ f. Let xe be x's endIndex.
+ g. Let z be the State (xe, cap).
+ h. Call c(z) and return its result.
+features: [regexp-lookbehind]
+includes: [compareArray.js]
+---*/
+
+assert.compareArray("abcCd".match(/(?<=\1(\w))d/i), ["d", "C"], "#1");
+assert.compareArray("abxxd".match(/(?<=\1([abx]))d/), ["d", "x"], "#2");
+assert.compareArray("ababc".match(/(?<=\1(\w+))c/), ["c", "ab"], "#3");
+assert.compareArray("ababbc".match(/(?<=\1(\w+))c/), ["c", "b"], "#4");
+assert.sameValue("ababdc".match(/(?<=\1(\w+))c/), null, "#5");
+assert.compareArray("ababc".match(/(?<=(\w+)\1)c/), ["c", "abab"], "#6");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/back-references.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/back-references.js
new file mode 100644
index 0000000000..f6a3f7c842
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/back-references.js
@@ -0,0 +1,45 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assertion
+description: Back references
+info: |
+ The production Assertion :: (?<=Disjunction) evaluates as follows:
+ 1. Evaluate Disjunction with -1 as its direction argument to obtain a Matcher m.
+ 2. Return an internal Matcher closure that takes two arguments, a State x and a Continuation
+ c, and performs the following steps:
+ a. Let d be a Continuation that always returns its State argument as a successful MatchResult.
+ b. Call m(x, d) and let r be its result.
+ c. If r is failure, return failure.
+ d. Let y be r's State.
+ e. Let cap be y's captures List.
+ f. Let xe be x's endIndex.
+ g. Let z be the State (xe, cap).
+ h. Call c(z) and return its result.
+features: [regexp-lookbehind]
+includes: [compareArray.js]
+---*/
+
+assert.compareArray("abb".match(/(.)(?<=(\1\1))/), ["b", "b", "bb"], "#1");
+assert.compareArray("abB".match(/(.)(?<=(\1\1))/i), ["B", "B", "bB"], "#2");
+assert.compareArray("aabAaBa".match(/((\w)\w)(?<=\1\2\1)/i), ["aB", "aB", "a"], "#3");
+assert.compareArray("aabAaBa".match(/(\w(\w))(?<=\1\2\1)/i), ["Ba", "Ba", "a"], "#4");
+assert.compareArray("abaBbAa".match(/(?=(\w))(?<=(\1))./i), ["b", "b", "B"], "#5");
+assert.compareArray(" 'foo' ".match(/(?<=(.))(\w+)(?=\1)/), ["foo", "'", "foo"], "#6");
+assert.compareArray(" \"foo\" ".match(/(?<=(.))(\w+)(?=\1)/), ["foo", "\"", "foo"], "#7");
+assert.compareArray("abbb".match(/(.)(?<=\1\1\1)/), ["b", "b"], "#8");
+assert.compareArray("fababab".match(/(..)(?<=\1\1\1)/), ["ab", "ab"], "#9");
+
+assert.sameValue(" .foo\" ".match(/(?<=(.))(\w+)(?=\1)/), null, "#10");
+assert.sameValue("ab".match(/(.)(?<=\1\1\1)/), null, "#11");
+assert.sameValue("abb".match(/(.)(?<=\1\1\1)/), null, "#12");
+assert.sameValue("ab".match(/(..)(?<=\1\1\1)/), null, "#13");
+assert.sameValue("abb".match(/(..)(?<=\1\1\1)/), null, "#14");
+assert.sameValue("aabb".match(/(..)(?<=\1\1\1)/), null, "#15");
+assert.sameValue("abab".match(/(..)(?<=\1\1\1)/), null, "#16");
+assert.sameValue("fabxbab".match(/(..)(?<=\1\1\1)/), null, "#17");
+assert.sameValue("faxabab".match(/(..)(?<=\1\1\1)/), null, "#18");
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/browser.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/captures-negative.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/captures-negative.js
new file mode 100644
index 0000000000..966d505910
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/captures-negative.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assertion
+description: >
+ Captures inside negative lookbehind. (They never capture.)
+info: |
+ The production Assertion :: (?<=Disjunction) evaluates as follows:
+ 1. Evaluate Disjunction with -1 as its direction argument to obtain a Matcher m.
+ 2. Return an internal Matcher closure that takes two arguments, a State x and a Continuation
+ c, and performs the following steps:
+ a. Let d be a Continuation that always returns its State argument as a successful MatchResult.
+ b. Call m(x, d) and let r be its result.
+ c. If r is failure, return failure.
+ d. Let y be r's State.
+ e. Let cap be y's captures List.
+ f. Let xe be x's endIndex.
+ g. Let z be the State (xe, cap).
+ h. Call c(z) and return its result.
+features: [regexp-lookbehind]
+includes: [compareArray.js]
+---*/
+
+assert.compareArray("abcdef".match(/(?<!(^|[ab]))\w{2}/), ["de", undefined]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/captures.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/captures.js
new file mode 100644
index 0000000000..7e72785dc3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/captures.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assertion
+description: >
+ Capturing matches
+info: |
+ The production Assertion :: (?<=Disjunction) evaluates as follows:
+ 1. Evaluate Disjunction with -1 as its direction argument to obtain a Matcher m.
+ 2. Return an internal Matcher closure that takes two arguments, a State x and a Continuation
+ c, and performs the following steps:
+ a. Let d be a Continuation that always returns its State argument as a successful MatchResult.
+ b. Call m(x, d) and let r be its result.
+ c. If r is failure, return failure.
+ d. Let y be r's State.
+ e. Let cap be y's captures List.
+ f. Let xe be x's endIndex.
+ g. Let z be the State (xe, cap).
+ h. Call c(z) and return its result.
+features: [regexp-lookbehind]
+includes: [compareArray.js]
+---*/
+
+var str = "abcdef";
+assert.compareArray(str.match(/(?<=(c))def/), ["def", "c"], "#1");
+assert.compareArray(str.match(/(?<=(\w{2}))def/), ["def", "bc"], "#2");
+assert.compareArray(str.match(/(?<=(\w(\w)))def/), ["def", "bc", "c"], "#3");
+assert.compareArray(str.match(/(?<=(\w){3})def/), ["def", "a"], "#4");
+assert.compareArray(str.match(/(?<=(bc)|(cd))./), ["d", "bc", undefined], "#5");
+assert.compareArray(str.match(/(?<=([ab]{1,2})\D|(abc))\w/), ["c", "a", undefined], "#6");
+assert.compareArray(str.match(/\D(?<=([ab]+))(\w)/), ["ab", "a", "b"], "#7");
+assert.compareArray(str.match(/(?<=b|c)\w/g), ["c", "d"], "#8");
+assert.compareArray(str.match(/(?<=[b-e])\w{2}/g), ["cd", "ef"], "#9");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/do-not-backtrack.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/do-not-backtrack.js
new file mode 100644
index 0000000000..ee44a50ea6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/do-not-backtrack.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assertion
+description: Do not backtrack into a lookbehind.
+info: |
+ The production Assertion :: (?<=Disjunction) evaluates as follows:
+ 1. Evaluate Disjunction with -1 as its direction argument to obtain a Matcher m.
+ 2. Return an internal Matcher closure that takes two arguments, a State x and a Continuation
+ c, and performs the following steps:
+ a. Let d be a Continuation that always returns its State argument as a successful MatchResult.
+ b. Call m(x, d) and let r be its result.
+ c. If r is failure, return failure.
+ d. Let y be r's State.
+ e. Let cap be y's captures List.
+ f. Let xe be x's endIndex.
+ g. Let z be the State (xe, cap).
+ h. Call c(z) and return its result.
+features: [regexp-lookbehind]
+---*/
+
+// The lookbehind captures "abc" so that \1 does not match. We do not backtrack
+// to capture only "bc" in the lookbehind.
+assert.sameValue("abcdbc".match(/(?<=([abc]+)).\1/), null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/greedy-loop.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/greedy-loop.js
new file mode 100644
index 0000000000..bd8285a740
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/greedy-loop.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assertion
+description: Greedy loop
+info: |
+ The production Assertion :: (?<=Disjunction) evaluates as follows:
+ 1. Evaluate Disjunction with -1 as its direction argument to obtain a Matcher m.
+ 2. Return an internal Matcher closure that takes two arguments, a State x and a Continuation
+ c, and performs the following steps:
+ a. Let d be a Continuation that always returns its State argument as a successful MatchResult.
+ b. Call m(x, d) and let r be its result.
+ c. If r is failure, return failure.
+ d. Let y be r's State.
+ e. Let cap be y's captures List.
+ f. Let xe be x's endIndex.
+ g. Let z be the State (xe, cap).
+ h. Call c(z) and return its result.
+features: [regexp-lookbehind]
+includes: [compareArray.js]
+---*/
+
+assert.compareArray("abbbbbbc".match(/(?<=(b+))c/), ["c", "bbbbbb"], "#1");
+assert.compareArray("ab1234c".match(/(?<=(b\d+))c/), ["c", "b1234"], "#2");
+assert.compareArray("ab12b23b34c".match(/(?<=((?:b\d{2})+))c/), ["c", "b12b23b34"], "#3");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/misc.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/misc.js
new file mode 100644
index 0000000000..b925a5c49c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/misc.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assertion
+description: Misc RegExp lookbehind tests
+info: |
+ The production Assertion :: (?<=Disjunction) evaluates as follows:
+ 1. Evaluate Disjunction with -1 as its direction argument to obtain a Matcher m.
+ 2. Return an internal Matcher closure that takes two arguments, a State x and a Continuation
+ c, and performs the following steps:
+ a. Let d be a Continuation that always returns its State argument as a successful MatchResult.
+ b. Call m(x, d) and let r be its result.
+ c. If r is failure, return failure.
+ d. Let y be r's State.
+ e. Let cap be y's captures List.
+ f. Let xe be x's endIndex.
+ g. Let z be the State (xe, cap).
+ h. Call c(z) and return its result.
+features: [regexp-lookbehind]
+includes: [compareArray.js]
+---*/
+
+assert.sameValue("abcdef".match(/(?<=$abc)def/), null, "#1");
+assert.sameValue("fno".match(/^f.o(?<=foo)$/), null, "#2");
+assert.sameValue("foo".match(/^foo(?<!foo)$/), null, "#3");
+assert.sameValue("foo".match(/^f.o(?<!foo)$/), null, "#4");
+
+assert.compareArray("foo".match(/^foo(?<=foo)$/), ["foo"], "#5");
+assert.compareArray("foo".match(/^f.o(?<=foo)$/), ["foo"], "#6");
+assert.compareArray("fno".match(/^f.o(?<!foo)$/), ["fno"], "#7");
+assert.compareArray("foooo".match(/^foooo(?<=fo+)$/), ["foooo"], "#8");
+assert.compareArray("foooo".match(/^foooo(?<=fo*)$/), ["foooo"], "#9");
+assert.compareArray(/(abc\1)/.exec("abc"), ["abc", "abc"], "#10");
+assert.compareArray(/(abc\1)/.exec("abc\u1234"), ["abc", "abc"], "#11");
+assert.compareArray(/(abc\1)/i.exec("abc"), ["abc", "abc"], "#12");
+assert.compareArray(/(abc\1)/i.exec("abc\u1234"), ["abc", "abc"], "#13");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/mutual-recursive.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/mutual-recursive.js
new file mode 100644
index 0000000000..973e204082
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/mutual-recursive.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assertion
+description: Mutual recursive capture/back references
+info: |
+ The production Assertion :: (?<=Disjunction) evaluates as follows:
+ 1. Evaluate Disjunction with -1 as its direction argument to obtain a Matcher m.
+ 2. Return an internal Matcher closure that takes two arguments, a State x and a Continuation
+ c, and performs the following steps:
+ a. Let d be a Continuation that always returns its State argument as a successful MatchResult.
+ b. Call m(x, d) and let r be its result.
+ c. If r is failure, return failure.
+ d. Let y be r's State.
+ e. Let cap be y's captures List.
+ f. Let xe be x's endIndex.
+ g. Let z be the State (xe, cap).
+ h. Call c(z) and return its result.
+features: [regexp-lookbehind]
+includes: [compareArray.js]
+---*/
+
+assert.compareArray(/(?<=a(.\2)b(\1)).{4}/.exec("aabcacbc"), ["cacb", "a", ""], "#1");
+assert.compareArray(/(?<=a(\2)b(..\1))b/.exec("aacbacb"), ["b", "ac", "ac"], "#2");
+assert.compareArray(/(?<=(?:\1b)(aa))./.exec("aabaax"), ["x", "aa"], "#3");
+assert.compareArray(/(?<=(?:\1|b)(aa))./.exec("aaaax"), ["x", "aa"], "#4");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/negative.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/negative.js
new file mode 100644
index 0000000000..68de46042b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/negative.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assertion
+description: RegExp negative lookbehind
+info: |
+ The production Assertion :: (?<!Disjunction) evaluates as follows:
+ 1. Evaluate Disjunction with -1 as its direction argument to obtain a Matcher m.
+ 2. Return an internal Matcher closure that takes two arguments, a State x and a
+ Continuation c, and performs the following steps:
+ a. Let d be a Continuation that always returns its State argument as a successful
+ MatchResult.
+ b. Call m(x, d) and let r be its result.
+ c. If r is not failure, return failure.
+ d. Call c(x) and return its result.
+features: [regexp-lookbehind]
+includes: [compareArray.js]
+---*/
+
+assert.compareArray("abcdef".match(/(?<!abc)\w\w\w/), ["abc"], "#1");
+assert.compareArray("abcdef".match(/(?<!a.c)\w\w\w/), ["abc"], "#2");
+assert.compareArray("abcdef".match(/(?<!a\wc)\w\w\w/), ["abc"], "#3");
+assert.compareArray("abcdef".match(/(?<!a[a-z])\w\w\w/), ["abc"], "#4");
+assert.compareArray("abcdef".match(/(?<!a[a-z]{2})\w\w\w/), ["abc"], "#5");
+assert.sameValue("abcdef".match(/(?<!abc)def/), null, "#6");
+assert.sameValue("abcdef".match(/(?<!a.c)def/), null, "#7");
+assert.sameValue("abcdef".match(/(?<!a\wc)def/), null, "#8");
+assert.sameValue("abcdef".match(/(?<!a[a-z][a-z])def/), null, "#9");
+assert.sameValue("abcdef".match(/(?<!a[a-z]{2})def/), null, "#10");
+assert.sameValue("abcdef".match(/(?<!a{1}b{1})cde/), null, "#11");
+assert.sameValue("abcdef".match(/(?<!a{1}[a-z]{2})def/), null, "#12");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/nested-lookaround.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/nested-lookaround.js
new file mode 100644
index 0000000000..0448085d35
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/nested-lookaround.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assertion
+description: Nested lookaround
+info: |
+ The production Assertion :: (?<=Disjunction) evaluates as follows:
+ 1. Evaluate Disjunction with -1 as its direction argument to obtain a Matcher m.
+ 2. Return an internal Matcher closure that takes two arguments, a State x and a Continuation
+ c, and performs the following steps:
+ a. Let d be a Continuation that always returns its State argument as a successful MatchResult.
+ b. Call m(x, d) and let r be its result.
+ c. If r is failure, return failure.
+ d. Let y be r's State.
+ e. Let cap be y's captures List.
+ f. Let xe be x's endIndex.
+ g. Let z be the State (xe, cap).
+ h. Call c(z) and return its result.
+features: [regexp-lookbehind]
+includes: [compareArray.js]
+---*/
+
+assert.compareArray("abcdef".match(/(?<=ab(?=c)\wd)\w\w/), ["ef"], "#1");
+assert.compareArray("abcdef".match(/(?<=a(?=([^a]{2})d)\w{3})\w\w/), ["ef", "bc"], "#2");
+assert.compareArray("abcdef".match(/(?<=a(?=([bc]{2}(?<!a{2}))d)\w{3})\w\w/), ["ef", "bc"], "#3");
+assert.compareArray("faaao".match(/^faaao?(?<=^f[oa]+(?=o))/), ["faaa"], "#4");
+
+assert.sameValue("abcdef".match(/(?<=a(?=([bc]{2}(?<!a*))d)\w{3})\w\w/), null, "#5");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/shell.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/simple-fixed-length.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/simple-fixed-length.js
new file mode 100644
index 0000000000..6e9a3cd14a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/simple-fixed-length.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assertion
+description: Simple fixed-length matches
+info: |
+ The production Assertion :: (?<=Disjunction) evaluates as follows:
+ 1. Evaluate Disjunction with -1 as its direction argument to obtain a Matcher m.
+ 2. Return an internal Matcher closure that takes two arguments, a State x and a Continuation
+ c, and performs the following steps:
+ a. Let d be a Continuation that always returns its State argument as a successful MatchResult.
+ b. Call m(x, d) and let r be its result.
+ c. If r is failure, return failure.
+ d. Let y be r's State.
+ e. Let cap be y's captures List.
+ f. Let xe be x's endIndex.
+ g. Let z be the State (xe, cap).
+ h. Call c(z) and return its result.
+features: [regexp-lookbehind]
+includes: [compareArray.js]
+---*/
+
+assert.sameValue("b".match(/^.(?<=a)/), null, "#1");
+assert.sameValue("boo".match(/^f\w\w(?<=\woo)/), null, "#2");
+assert.sameValue("fao".match(/^f\w\w(?<=\woo)/), null, "#3");
+assert.sameValue("foa".match(/^f\w\w(?<=\woo)/), null, "#4");
+
+assert.compareArray("a".match(/^.(?<=a)/), ["a"], "#5");
+assert.compareArray("foo1".match(/^f..(?<=.oo)/), ["foo"], "#6");
+assert.compareArray("foo2".match(/^f\w\w(?<=\woo)/), ["foo"], "#7");
+assert.compareArray("abcdef".match(/(?<=abc)\w\w\w/), ["def"], "#8");
+assert.compareArray("abcdef".match(/(?<=a.c)\w\w\w/), ["def"], "#9");
+assert.compareArray("abcdef".match(/(?<=a\wc)\w\w\w/), ["def"], "#10");
+assert.compareArray("abcdef".match(/(?<=a[a-z])\w\w\w/), ["cde"], "#11");
+assert.compareArray("abcdef".match(/(?<=a[a-z][a-z])\w\w\w/), ["def"], "#12");
+assert.compareArray("abcdef".match(/(?<=a[a-z]{2})\w\w\w/), ["def"], "#13");
+assert.compareArray("abcdef".match(/(?<=a{1})\w\w\w/), ["bcd"], "#14");
+assert.compareArray("abcdef".match(/(?<=a{1}b{1})\w\w\w/), ["cde"], "#15");
+assert.compareArray("abcdef".match(/(?<=a{1}[a-z]{2})\w\w\w/), ["def"], "#16");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/sliced-strings.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/sliced-strings.js
new file mode 100644
index 0000000000..1e3b5f6367
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/sliced-strings.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assertion
+description: Sliced strings
+info: |
+ Rationale from https://github.com/tc39/test262/pull/999#discussion_r113807747
+
+ Since this test originates from V8, this targets V8's sliced strings, which are used for
+ substrings above a length of 13 characters. I wrote this test for exactly the reason
+ @littledan mentioned. That's why the variable name is called oob_subject. The underlying string
+ backing store extends beyond the actual boundary of the sliced string.
+features: [regexp-lookbehind]
+---*/
+
+var oob_subject = "abcdefghijklmnabcdefghijklmn".slice(14);
+assert.sameValue(oob_subject.match(/(?=(abcdefghijklmn))(?<=\1)a/i), null, "");
+assert.sameValue(oob_subject.match(/(?=(abcdefghijklmn))(?<=\1)a/), null, "");
+assert.sameValue("abcdefgabcdefg".slice(1).match(/(?=(abcdefg))(?<=\1)/), null, "");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/start-of-line.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/start-of-line.js
new file mode 100644
index 0000000000..de7c2bc762
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/start-of-line.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assertion
+description: Start of line matches
+info: |
+ The production Assertion :: (?<=Disjunction) evaluates as follows:
+ 1. Evaluate Disjunction with -1 as its direction argument to obtain a Matcher m.
+ 2. Return an internal Matcher closure that takes two arguments, a State x and a Continuation
+ c, and performs the following steps:
+ a. Let d be a Continuation that always returns its State argument as a successful MatchResult.
+ b. Call m(x, d) and let r be its result.
+ c. If r is failure, return failure.
+ d. Let y be r's State.
+ e. Let cap be y's captures List.
+ f. Let xe be x's endIndex.
+ g. Let z be the State (xe, cap).
+ h. Call c(z) and return its result.
+features: [regexp-lookbehind]
+includes: [compareArray.js]
+---*/
+
+assert.sameValue("abcdef".match(/(?<=^[^a-c]{3})def/), null, "#1");
+assert.sameValue("foooo".match(/"^foooo(?<=^o+)$/), null, "#2");
+assert.sameValue("foooo".match(/"^foooo(?<=^o*)$/), null, "#3");
+
+assert.compareArray("abcdef".match(/(?<=^abc)def/), ["def"], "#4");
+assert.compareArray("abcdef".match(/(?<=^[a-c]{3})def/), ["def"], "#5");
+assert.compareArray("xyz\nabcdef".match(/(?<=^[a-c]{3})def/m), ["def"], "#6");
+assert.compareArray("ab\ncd\nefg".match(/(?<=^)\w+/gm), ["ab", "cd", "efg"], "#7");
+assert.compareArray("ab\ncd\nefg".match(/\w+(?<=$)/gm), ["ab", "cd", "efg"], "#8");
+assert.compareArray("ab\ncd\nefg".match(/(?<=^)\w+(?<=$)/gm), ["ab", "cd", "efg"], "#9");
+
+assert.compareArray("foo".match(/^foo(?<=^fo+)$/), ["foo"], "#10");
+assert.compareArray("foooo".match(/^foooo(?<=^fo*)/), ["foooo"], "#11");
+assert.compareArray("foo".match(/^(f)oo(?<=^\1o+)$/), ["foo", "f"], "#12");
+assert.compareArray("foo".match(/^(f)oo(?<=^\1o+)$/i), ["foo", "f"], "#13");
+assert.compareArray("foo\u1234".match(/^(f)oo(?<=^\1o+).$/i), ["foo\u1234", "f"], "#14");
+assert.compareArray("abcdefdef".match(/(?<=^\w+)def/), ["def"], "#15");
+assert.compareArray("abcdefdef".match(/(?<=^\w+)def/g), ["def", "def"], "#16");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/sticky.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/sticky.js
new file mode 100644
index 0000000000..a7e83a0e2e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/sticky.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assertion
+description: Sticky
+info: |
+ The production Assertion :: (?<=Disjunction) evaluates as follows:
+ 1. Evaluate Disjunction with -1 as its direction argument to obtain a Matcher m.
+ 2. Return an internal Matcher closure that takes two arguments, a State x and a Continuation
+ c, and performs the following steps:
+ a. Let d be a Continuation that always returns its State argument as a successful MatchResult.
+ b. Call m(x, d) and let r be its result.
+ c. If r is failure, return failure.
+ d. Let y be r's State.
+ e. Let cap be y's captures List.
+ f. Let xe be x's endIndex.
+ g. Let z be the State (xe, cap).
+ h. Call c(z) and return its result.
+features: [regexp-lookbehind]
+includes: [compareArray.js]
+---*/
+
+var re1 = /(?<=^(\w+))def/g;
+assert.compareArray(re1.exec("abcdefdef"), ["def", "abc"], "#1");
+assert.compareArray(re1.exec("abcdefdef"), ["def", "abcdef"], "#2");
+
+var re2 = /\Bdef/g;
+assert.compareArray(re2.exec("abcdefdef"), ["def"], "#3");
+assert.compareArray(re2.exec("abcdefdef"), ["def"], "#4");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/variable-length.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/variable-length.js
new file mode 100644
index 0000000000..fcfa84a164
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/variable-length.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assertion
+description: Variable-length matches
+info: |
+ The production Assertion :: (?<=Disjunction) evaluates as follows:
+ 1. Evaluate Disjunction with -1 as its direction argument to obtain a Matcher m.
+ 2. Return an internal Matcher closure that takes two arguments, a State x and a Continuation
+ c, and performs the following steps:
+ a. Let d be a Continuation that always returns its State argument as a successful MatchResult.
+ b. Call m(x, d) and let r be its result.
+ c. If r is failure, return failure.
+ d. Let y be r's State.
+ e. Let cap be y's captures List.
+ f. Let xe be x's endIndex.
+ g. Let z be the State (xe, cap).
+ h. Call c(z) and return its result.
+features: [regexp-lookbehind]
+includes: [compareArray.js]
+---*/
+
+assert.compareArray("abcdef".match(/(?<=[a|b|c]*)[^a|b|c]{3}/), ["def"], "#1");
+assert.compareArray("abcdef".match(/(?<=\w*)[^a|b|c]{3}/), ["def"], "#2");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookBehind/word-boundary.js b/js/src/tests/test262/built-ins/RegExp/lookBehind/word-boundary.js
new file mode 100644
index 0000000000..7e91b52e07
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookBehind/word-boundary.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-assertion
+description: Word boundary
+info: |
+ The production Assertion :: (?<=Disjunction) evaluates as follows:
+ 1. Evaluate Disjunction with -1 as its direction argument to obtain a Matcher m.
+ 2. Return an internal Matcher closure that takes two arguments, a State x and a Continuation
+ c, and performs the following steps:
+ a. Let d be a Continuation that always returns its State argument as a successful MatchResult.
+ b. Call m(x, d) and let r be its result.
+ c. If r is failure, return failure.
+ d. Let y be r's State.
+ e. Let cap be y's captures List.
+ f. Let xe be x's endIndex.
+ g. Let z be the State (xe, cap).
+ h. Call c(z) and return its result.
+features: [regexp-lookbehind]
+includes: [compareArray.js]
+---*/
+
+// Word boundary matches.
+assert.compareArray("abc def".match(/(?<=\b)[d-f]{3}/), ["def"], "#1");
+assert.compareArray("ab cdef".match(/(?<=\B)\w{3}/), ["def"], "#2");
+assert.compareArray("ab cdef".match(/(?<=\B)(?<=c(?<=\w))\w{3}/), ["def"], "#3");
+assert.sameValue("abcdef".match(/(?<=\b)[d-f]{3}/), null, "#4");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/lookahead-quantifier-match-groups.js b/js/src/tests/test262/built-ins/RegExp/lookahead-quantifier-match-groups.js
new file mode 100644
index 0000000000..3dead6284c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/lookahead-quantifier-match-groups.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2023 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-runtime-semantics-repeatmatcher-abstract-operation
+description: 0-length matches update the captures list if and only if they are not followed by a quantifier which allows them to match 0 times.
+info: |
+ RepeatMatcher
+ 1. If max = 0, return c(x).
+ 2. Let d be a new MatcherContinuation with parameters (y) that captures m, min, max, greedy, x, c, parenIndex, and parenCount and performs the following steps when called:
+ [...]
+ b. If min = 0 and y's endIndex = x's endIndex, return failure.
+ c. If min = 0, let min2 be 0; otherwise let min2 be min - 1.
+ d. If max = +∞, let max2 be +∞; otherwise let max2 be max - 1.
+ e. Return RepeatMatcher(m, min2, max2, greedy, y, c, parenIndex, parenCount).
+ 3. Let cap be a copy of x's captures List.
+ 4. For each integer k in the inclusive interval from parenIndex + 1 to parenIndex + parenCount, set cap[k] to undefined.
+ [...]
+ 7. Let xr be the MatchState (Input, e, cap).
+ [...]
+ 10. Let z be m(xr, d).
+ 11. If z is not failure, return z.
+ 12. Return c(x).
+includes: [compareArray.js]
+---*/
+
+assert.compareArray("abc".match(/(?:(?=(abc)))a/), ["a", "abc"], "unquantified");
+assert.compareArray("abc".match(/(?:(?=(abc)))?a/), ["a", undefined], "? quantifier");
+assert.compareArray("abc".match(/(?:(?=(abc))){1,1}a/), ["a", "abc"], "{1,1} quantifier");
+assert.compareArray("abc".match(/(?:(?=(abc))){0,1}a/), ["a", undefined], "{0,1} quantifier");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/match-indices/browser.js b/js/src/tests/test262/built-ins/RegExp/match-indices/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/match-indices/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-element.js b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-element.js
new file mode 100644
index 0000000000..197694c8f4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-element.js
@@ -0,0 +1,29 @@
+// Copyright 2019 Ron Buckton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: A matching element of indices is an Array with exactly two number properties.
+esid: sec-getmatchindicesarray
+features: [regexp-match-indices]
+info: |
+ GetMatchIndicesArray ( S, match )
+ 5. Return CreateArrayFromList(« _match_.[[StartIndex]], _match_.[[EndIndex]] »).
+---*/
+
+let input = "abcd";
+let match = /b(c)/d.exec(input);
+let indices = match.indices;
+
+// `indices[0]` is an array
+assert.sameValue(Object.getPrototypeOf(indices[0]), Array.prototype);
+assert.sameValue(indices[0].length, 2);
+assert.sameValue(typeof indices[0][0], "number");
+assert.sameValue(typeof indices[0][1], "number");
+
+// `indices[1]` is an array
+assert.sameValue(Object.getPrototypeOf(indices[1]), Array.prototype);
+assert.sameValue(indices[1].length, 2);
+assert.sameValue(typeof indices[1][0], "number");
+assert.sameValue(typeof indices[1][1], "number");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-matched.js b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-matched.js
new file mode 100644
index 0000000000..81b2e7dd3b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-matched.js
@@ -0,0 +1,40 @@
+// Copyright 2019 Ron Buckton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: The properties of the "indices" array correspond to the start/end indices of the same values in the match.
+includes: [compareArray.js]
+esid: sec-makeindicesarray
+features: [regexp-match-indices]
+info: |
+ MakeIndicesArray ( S, indices, groupNames, hasIndices )
+ 4. Let _n_ be the number of elements in _indices_.
+ ...
+ 8. Set _A_ to ! ArrayCreate(_n_).
+ ...
+ 13. For each integer _i_ such that _i_ >= 0 and _i_ < _n_, do
+ a. Let _matchIndices_ be _indices_[_i_].
+ b. If _matchIndices_ is not *undefined*, then
+ i. Let _matchIndicesArray_ be ! GetMatchIndicesArray(_S_, _matchIndices_).
+ c. Else,
+ i. Let _matchIndicesArray_ be *undefined*.
+ d. Perform ! CreateDataProperty(_A_, ! ToString(_n_), _matchIndicesArray_).
+ ...
+---*/
+
+let input = "abcd";
+let match = /b(c)/d.exec(input);
+let indices = match.indices;
+
+// `indices` has the same length as match
+assert.sameValue(indices.length, match.length);
+
+// The first element of `indices` contains the start/end indices of the match
+assert.compareArray(indices[0], [1, 3]);
+assert.sameValue(input.slice(indices[0][0], indices[0][1]), match[0]);
+
+// The second element of `indices` contains the start/end indices of the first capture
+assert.compareArray(indices[1], [2, 3]);
+assert.sameValue(input.slice(indices[1][0], indices[1][1]), match[1]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-non-unicode-match.js b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-non-unicode-match.js
new file mode 100644
index 0000000000..8e167d35b9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-non-unicode-match.js
@@ -0,0 +1,81 @@
+// Copyright 2019 Ron Buckton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Basic matching cases with non-unicode matches.
+includes: [compareArray.js, propertyHelper.js, deepEqual.js]
+esid: sec-regexpbuiltinexec
+features: [regexp-named-groups, regexp-match-indices]
+info: |
+ Runtime Semantics: RegExpBuiltinExec ( R, S )
+ ...
+ 4. Let _lastIndex_ be ? ToLength(? Get(_R_, `"lastIndex")).
+ ...
+ 8. If _flags_ contains `"d"`, let _hasIndices_ be *true*, else let _hasIndices_ be *false*.
+ ...
+ 26. Let _match_ be the Match { [[StartIndex]]: _lastIndex_, [[EndIndex]]: _e_ }.
+ 27. Let _indices_ be a new empty List.
+ 29. Add _match_ as the last element of _indices_.
+ ...
+ 35. For each integer _i_ such that _i_ > 0 and _i_ <= _n_, in ascending order, do
+ ...
+ f. Else,
+ i. Let _captureStart_ be _captureI_'s _startIndex_.
+ ii. Let _captureEnd_ be _captureI_'s _endIndex_.
+ ...
+ iv. Let _capture_ be the Match { [[StartIndex]]: _captureStart_, [[EndIndex]]: _captureEnd_ }.
+ v. Append _capture_ to _indices_.
+ ...
+ 36. If _hasIndices_ is *true*, then
+ a. Let _indicesArray_ be MakeIndicesArray( _S_, _indices_, _groupNames_).
+ b. Perform ! CreateDataProperty(_A_, `"indices"`, _indicesArray_).
+---*/
+
+assert.deepEqual([[1, 2], [1, 2]], "bab".match(/(a)/d).indices);
+assert.deepEqual([[0, 3], [1, 2]], "bab".match(/.(a)./d).indices);
+assert.deepEqual([[0, 3], [1, 2], [2, 3]], "bab".match(/.(a)(.)/d).indices);
+assert.deepEqual([[0, 3], [1, 3]], "bab".match(/.(\w\w)/d).indices);
+assert.deepEqual([[0, 3], [0, 3]], "bab".match(/(\w\w\w)/d).indices);
+assert.deepEqual([[0, 3], [0, 2], [2, 3]], "bab".match(/(\w\w)(\w)/d).indices);
+assert.deepEqual([[0, 2], [0, 2], undefined], "bab".match(/(\w\w)(\W)?/d).indices);
+
+let groups = /(?<a>.)(?<b>.)(?<c>.)\k<c>\k<b>\k<a>/d.exec("abccba").indices.groups;
+assert.compareArray([0, 1], groups.a);
+assert.compareArray([1, 2], groups.b);
+assert.compareArray([2, 3], groups.c);
+verifyProperty(groups, "a", {
+ enumerable: true,
+ writable: true,
+ configurable: true
+});
+verifyProperty(groups, "b", {
+ enumerable: true,
+ writable: true,
+ configurable: true
+});
+verifyProperty(groups, "c", {
+ enumerable: true,
+ writable: true,
+ configurable: true
+});
+
+// "𝐁" is U+1d401 MATHEMATICAL BOLD CAPITAL B
+// - Also representable as the code point "\u{1d401}"
+// - Also representable as the surrogate pair "\uD835\uDC01"
+
+// Verify assumptions:
+assert.sameValue("𝐁".length, 2, 'The length of "𝐁" is 2');
+assert.sameValue("\u{1d401}".length, 2, 'The length of "\\u{1d401}" is 2');
+assert.sameValue("\uD835\uDC01".length, 2, 'The length of "\\uD835\\uDC01" is 2');
+assert.sameValue("𝐁".match(/./)[0].length, 1, 'The length of a single code unit match against "𝐁" is 1 (without /u flag)');
+assert.sameValue("\u{1d401}".match(/./)[0].length, 1, 'The length of a single code unit match against "\\u{1d401}" is 1 (without /u flag)');
+assert.sameValue("\uD835\uDC01".match(/./)[0].length, 1, 'The length of a single code unit match against "\\ud835\\udc01" is 1 (without /u flag)');
+
+assert.compareArray([0, 1], "𝐁".match(/./d).indices[0], 'Indices for non-unicode match against "𝐁" (without /u flag)');
+assert.compareArray([0, 1], "\u{1d401}".match(/./d).indices[0], 'Indices for non-unicode match against "\\u{1d401}" (without /u flag)');
+assert.compareArray([0, 1], "\uD835\uDC01".match(/./d).indices[0], 'Indices for non-unicode match against "\\ud835\\udc01" (without /u flag)');
+assert.compareArray([0, 1], "𝐁".match(/(?<a>.)/d).indices.groups.a, 'Indices for non-unicode match against "𝐁" in groups.a (without /u flag)');
+assert.compareArray([0, 1], "\u{1d401}".match(/(?<a>.)/d).indices.groups.a, 'Indices for non-unicode match against "\\u{1d401}" in groups.a (without /u flag)');
+assert.compareArray([0, 1], "\uD835\uDC01".match(/(?<a>.)/d).indices.groups.a, 'Indices for non-unicode match against "\\ud835\\udc01" in groups.a (without /u flag)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-properties.js b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-properties.js
new file mode 100644
index 0000000000..c050976f54
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-properties.js
@@ -0,0 +1,31 @@
+// Copyright 2019 Ron Buckton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: The properties of the "indices" array are created with CreateDataProperty.
+includes: [propertyHelper.js]
+esid: sec-makeindicesarray
+features: [regexp-match-indices]
+info: |
+ MakeIndicesArray ( S, indices, groupNames, hasGroups )
+ 13. For each integer _i_ such that _i_ >= 0 and _i_ < _n_, do
+ d. Perform ! CreateDataProperty(_A_, ! ToString(_n_), _matchIndicesArray_).
+---*/
+
+let input = "abcd";
+let match = /b(c)/d.exec(input);
+let indices = match.indices;
+
+verifyProperty(indices, '0', {
+ enumerable: true,
+ configurable: true,
+ writable: true
+});
+
+verifyProperty(indices, '1', {
+ enumerable: true,
+ configurable: true,
+ writable: true
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-unicode-match.js b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-unicode-match.js
new file mode 100644
index 0000000000..7b68980397
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-unicode-match.js
@@ -0,0 +1,89 @@
+// Copyright 2019 Ron Buckton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Basic matching cases with non-unicode matches.
+includes: [compareArray.js, propertyHelper.js, deepEqual.js]
+esid: sec-regexpbuiltinexec
+features: [regexp-named-groups, regexp-match-indices]
+info: |
+ Runtime Semantics: RegExpBuiltinExec ( R, S )
+ ...
+ 4. Let _lastIndex_ be ? ToLength(? Get(_R_, `"lastIndex")).
+ ...
+ 16. If _fullUnicode_ is *true*, set _e_ to ! GetStringIndex(_S_, _Input_, _e_).
+ ...
+ 26. Let _match_ be the Match { [[StartIndex]]: _lastIndex_, [[EndIndex]]: _e_ }.
+ 27. Let _indices_ be a new empty List.
+ ...
+ 29. Add _match_ as the last element of _indices_.
+ ...
+ 35. For each integer _i_ such that _i_ > 0 and _i_ <= _n_, in ascending order, do
+ ...
+ f. Else,
+ i. Let _captureStart_ be _captureI_'s _startIndex_.
+ ii. Let _captureEnd_ be _captureI_'s _endIndex_.
+ iii. If _fullUnicode_ is *true*, then
+ 1. Set _captureStart_ to ! GetStringIndex(_S_, _Input_, _captureStart_).
+ 1. Set _captureEnd_ to ! GetStringIndex(_S_, _Input_, _captureEnd_).
+ iv. Let _capture_ be the Match { [[StartIndex]]: _captureStart_, [[EndIndex]]: _captureEnd_ }.
+ v. Append _capture_ to _indices_.
+ ...
+ 36. If _hasIndices_ is *true*, then
+ a. Let _indicesArray_ be MakeIndicesArray(_S_, _indices_, _groupNames_, _hasGroups_).
+ b. Perform ! CreateDataProperty(_A_, `"indices"`, _indicesArray_).
+
+ GetStringIndex ( S, Input, e )
+ ...
+ 4. Let _eUTF_ be the smallest index into _S_ that corresponds to the character at element _e_ of _Input_. If _e_ is greater than or equal to the number of elements in _Input_, then _eUTF_ is the number of code units in _S_.
+ 5. Return _eUTF_.
+---*/
+
+assert.deepEqual([[1, 2], [1, 2]], "bab".match(/(a)/du).indices);
+assert.deepEqual([[0, 3], [1, 2]], "bab".match(/.(a)./du).indices);
+assert.deepEqual([[0, 3], [1, 2], [2, 3]], "bab".match(/.(a)(.)/du).indices);
+assert.deepEqual([[0, 3], [1, 3]], "bab".match(/.(\w\w)/du).indices);
+assert.deepEqual([[0, 3], [0, 3]], "bab".match(/(\w\w\w)/du).indices);
+assert.deepEqual([[0, 3], [0, 2], [2, 3]], "bab".match(/(\w\w)(\w)/du).indices);
+assert.deepEqual([[0, 2], [0, 2], undefined], "bab".match(/(\w\w)(\W)?/du).indices);
+
+let groups = /(?<a>.)(?<b>.)(?<c>.)\k<c>\k<b>\k<a>/du.exec("abccba").indices.groups;
+assert.compareArray([0, 1], groups.a);
+assert.compareArray([1, 2], groups.b);
+assert.compareArray([2, 3], groups.c);
+verifyProperty(groups, "a", {
+ enumerable: true,
+ writable: true,
+ configurable: true
+});
+verifyProperty(groups, "b", {
+ enumerable: true,
+ writable: true,
+ configurable: true
+});
+verifyProperty(groups, "c", {
+ enumerable: true,
+ writable: true,
+ configurable: true
+});
+
+// "𝐁" is U+1d401 MATHEMATICAL BOLD CAPITAL B
+// - Also representable as the code point "\u{1d401}"
+// - Also representable as the surrogate pair "\uD835\uDC01"
+
+// Verify assumptions:
+assert.sameValue("𝐁".length, 2, 'The length of "𝐁" is 2');
+assert.sameValue("\u{1d401}".length, 2, 'The length of "\\u{1d401}" is 2');
+assert.sameValue("\uD835\uDC01".length, 2, 'The length of "\\uD835\\uDC01" is 2');
+assert.sameValue(2, "𝐁".match(/./u)[0].length, 'The length of a single code point match against "𝐁" is 2 (with /du flag)');
+assert.sameValue(2, "\u{1d401}".match(/./u)[0].length, 'The length of a single code point match against "\\u{1d401}" is 2 (with /du flag)');
+assert.sameValue(2, "\uD835\uDC01".match(/./u)[0].length, 'The length of a single code point match against "\\ud835\\udc01" is 2 (with /du flag)');
+
+assert.compareArray([0, 2], "𝐁".match(/./du).indices[0], 'Indices for unicode match against "𝐁" (with /du flag)');
+assert.compareArray([0, 2], "\u{1d401}".match(/./du).indices[0], 'Indices for unicode match against \\u{1d401} (with /du flag)');
+assert.compareArray([0, 2], "\uD835\uDC01".match(/./du).indices[0], 'Indices for unicode match against \\ud835\\udc01 (with /du flag)');
+assert.compareArray([0, 2], "𝐁".match(/(?<a>.)/du).indices.groups.a, 'Indices for unicode match against 𝐁 in groups.a (with /du flag)');
+assert.compareArray([0, 2], "\u{1d401}".match(/(?<a>.)/du).indices.groups.a, 'Indices for unicode match against \\u{1d401} in groups.a (with /du flag)');
+assert.compareArray([0, 2], "\uD835\uDC01".match(/(?<a>.)/du).indices.groups.a, 'Indices for unicode match against \\ud835\\udc01 in groups.a (with /du flag)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-unicode-property-names.js b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-unicode-property-names.js
new file mode 100644
index 0000000000..8eba7355d8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-unicode-property-names.js
@@ -0,0 +1,22 @@
+// Copyright 2019 Ron Buckton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Basic matching cases with non-unicode matches.
+includes: [compareArray.js]
+esid: sec-makeindicesarray
+features: [regexp-named-groups, regexp-match-indices]
+---*/
+
+assert.compareArray([1, 2], /(?<π>a)/du.exec("bab").indices.groups.π);
+assert.compareArray([1, 2], /(?<\u{03C0}>a)/du.exec("bab").indices.groups.π);
+assert.compareArray([1, 2], /(?<π>a)/du.exec("bab").indices.groups.\u03C0);
+assert.compareArray([1, 2], /(?<\u{03C0}>a)/du.exec("bab").indices.groups.\u03C0);
+assert.compareArray([1, 2], /(?<$>a)/du.exec("bab").indices.groups.$);
+assert.compareArray([1, 2], /(?<_>a)/du.exec("bab").indices.groups._);
+assert.compareArray([1, 2], /(?<$𐒤>a)/du.exec("bab").indices.groups.$𐒤);
+assert.compareArray([1, 2], /(?<_\u200C>a)/du.exec("bab").indices.groups._\u200C);
+assert.compareArray([1, 2], /(?<_\u200D>a)/du.exec("bab").indices.groups._\u200D);
+assert.compareArray([1, 2], /(?<ಠ_ಠ>a)/du.exec("bab").indices.groups.ಠ_ಠ);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-unmatched.js b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-unmatched.js
new file mode 100644
index 0000000000..43c18f69e3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array-unmatched.js
@@ -0,0 +1,34 @@
+// Copyright 2019 Ron Buckton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: An unmatched capture in a match corresponds to an unmatched capture in "indices"
+esid: sec-makeindicesarray
+features: [regexp-match-indices]
+info: |
+ MakeIndicesArray ( S, indices, groupNames )
+ 4. Let _n_ be the number of elements in _indices_.
+ ...
+ 6. Set _A_ to ! ArrayCreate(_n_).
+ ...
+ 11. For each integer _i_ such that _i_ >= 0 and _i_ < _n_, do
+ a. Let _matchIndices_ be _indices_[_i_].
+ b. If _matchIndices_ is not *undefined*, then
+ i. Let _matchIndicesArray_ be ! GetMatchIndicesArray(_S_, _matchIndices_).
+ c. Else,
+ i. Let _matchIndicesArray_ be *undefined*.
+ d. Perform ! CreateDataProperty(_A_, ! ToString(_n_), _matchIndicesArray_).
+ ...
+---*/
+
+let input = "abd";
+let match = /b(c)?/d.exec(input);
+let indices = match.indices;
+
+// `indices` has the same length as match
+assert.sameValue(indices.length, match.length);
+
+// The second element of `indices` should be undefined.
+assert.sameValue(indices[1], undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array.js b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array.js
new file mode 100644
index 0000000000..ee0a7d27ab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-array.js
@@ -0,0 +1,20 @@
+// Copyright 2019 Ron Buckton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: The "indices" property is an Array.
+esid: sec-makeindicesarray
+features: [regexp-match-indices]
+info: |
+ MakeIndicesArray ( S, indices, groupNames, hasGroups )
+ 6. Set _A_ to ! ArrayCreate(_n_).
+---*/
+
+let match = /a/d.exec("a");
+let indices = match.indices;
+
+// `indices` is an array
+assert.sameValue(Object.getPrototypeOf(indices), Array.prototype);
+assert(Array.isArray(indices));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/match-indices/indices-groups-object-undefined.js b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-groups-object-undefined.js
new file mode 100644
index 0000000000..1be5fdb626
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-groups-object-undefined.js
@@ -0,0 +1,28 @@
+// Copyright 2019 Ron Buckton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: The groups object of indices is created unconditionally.
+includes: [propertyHelper.js]
+esid: sec-makeindicesarray
+features: [regexp-named-groups, regexp-match-indices]
+info: |
+ MakeIndicesArray ( S, indices, groupNames, hasGroups )
+ 10. If _hasGroups_ is *true*, then
+ a. Let _groups_ be ! ObjectCreate(*null*).
+ 11. Else,
+ a. Let _groups_ be *undefined*.
+ 12. Perform ! CreateDataProperty(_A_, `"groups"`, _groups_).
+---*/
+
+
+const re = /./d;
+const indices = re.exec("a").indices;
+verifyProperty(indices, 'groups', {
+ writable: true,
+ enumerable: true,
+ configurable: true,
+ value: undefined
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/match-indices/indices-groups-object-unmatched.js b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-groups-object-unmatched.js
new file mode 100644
index 0000000000..00c0f24297
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-groups-object-unmatched.js
@@ -0,0 +1,22 @@
+// Copyright 2019 Ron Buckton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Test the groups object of indices with matched and unmatched named captures.
+includes: [compareArray.js]
+esid: sec-makeindicesarray
+features: [regexp-named-groups, regexp-match-indices]
+info: |
+ MakeIndicesArray ( S, indices, groupNames, hasGroups )
+ 11. For each integer _i_ such that _i_ >= 0 and _i_ < _n_, do
+ e. If _i_ > 0 and _groupNames_[_i_ - 1] is not *undefined*, then
+ i. Perform ! CreateDataProperty(_groups_, _groupNames_[_i_ - 1], _matchIndicesArray_).
+---*/
+
+
+const re = /(?<a>a).|(?<x>x)/d;
+const result = re.exec("ab").indices;
+assert.compareArray([0, 1], result.groups.a);
+assert.sameValue(undefined, result.groups.x);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/match-indices/indices-groups-object.js b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-groups-object.js
new file mode 100644
index 0000000000..41fa94412f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-groups-object.js
@@ -0,0 +1,41 @@
+// Copyright 2019 Ron Buckton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: The groups object of indices is created with CreateDataProperty
+includes: [propertyHelper.js, compareArray.js]
+esid: sec-makeindicesarray
+features: [regexp-named-groups, regexp-match-indices]
+info: |
+ MakeIndicesArray ( S, indices, groupNames, hasIndices )
+ 10. If _hasIndices_ is *true*, then
+ a. Let _groups_ be ! ObjectCreate(*null*).
+ 11. Else,
+ a. Let _groups_ be *undefined*.
+ 12. Perform ! CreateDataProperty(_A_, `"groups"`, _groups_).
+---*/
+
+// `groups` is created with Define, not Set.
+let counter = 0;
+Object.defineProperty(Array.prototype, "groups", {
+ set() { counter++; }
+});
+
+let indices = /(?<x>.)/d.exec("a").indices;
+assert.sameValue(counter, 0);
+
+// `groups` is writable, enumerable and configurable
+// (from CreateDataProperty).
+verifyProperty(indices, 'groups', {
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+// The `__proto__` property on the groups object is not special,
+// and does not affect the [[Prototype]] of the resulting groups object.
+let {groups} = /(?<__proto__>.)/d.exec("a").indices;
+assert.compareArray([0, 1], groups.__proto__);
+assert.sameValue(null, Object.getPrototypeOf(groups));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/match-indices/indices-groups-properties.js b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-groups-properties.js
new file mode 100644
index 0000000000..83e51de27d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-groups-properties.js
@@ -0,0 +1,37 @@
+// Copyright 2019 Ron Buckton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Properties of the groups object of indices are created with CreateDataProperty
+includes: [compareArray.js, propertyHelper.js]
+esid: sec-makeindicesarray
+features: [regexp-named-groups, regexp-match-indices]
+info: |
+ MakeIndicesArray ( S, indices, groupNames, hasIndices )
+ 13. For each integer _i_ such that _i_ >= 0 and _i_ < _n_, do
+ e. If _i_ > 0 and _groupNames_[_i_ - 1] is not *undefined*, then
+ i. Perform ! CreateDataProperty(_groups_, _groupNames_[_i_ - 1], _matchIndicesArray_).
+---*/
+
+
+// Properties created on result.groups in textual order.
+let groupNames = Object.getOwnPropertyNames(/(?<fst>.)|(?<snd>.)/du.exec("abcd").indices.groups);
+assert.compareArray(groupNames, ["fst", "snd"]);
+
+// Properties are created with Define, not Set
+let counter = 0;
+Object.defineProperty(Object.prototype, 'x', {set() { counter++; }});
+
+let indices = /(?<x>.)/d.exec('a').indices;
+let groups = indices.groups;
+assert.sameValue(counter, 0);
+
+// Properties are writable, enumerable and configurable
+// (from CreateDataProperty)
+verifyProperty(groups, 'x', {
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/match-indices/indices-property.js b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-property.js
new file mode 100644
index 0000000000..9ec6da8998
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/match-indices/indices-property.js
@@ -0,0 +1,34 @@
+// Copyright 2019 Ron Buckton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: The "indices" property is created with DefinePropertyOrThrow
+includes: [propertyHelper.js]
+esid: sec-regexpbuiltinexec
+features: [regexp-match-indices]
+info: |
+ Runtime Semantics: RegExpBuiltinExec ( R, S )
+ 8. If _flags_ contains `"d"`, let _hasIndices_ be *true*, else let _hasIndices_ be *false*.
+ ...
+ 36. If _hasIndices_ is *true*, then
+ a. Let _indicesArray_ be MakeIndicesArray(_S_, _indices_, _groupNames_, _hasGroups_).
+ b. Perform ! CreateDataProperty(_A_, `"indices"`, _indicesArray_).
+---*/
+
+// `indices` is created with Define, not Set.
+let counter = 0;
+Object.defineProperty(Array.prototype, "indices", {
+ set() { counter++; }
+});
+
+let match = /a/d.exec("a");
+assert.sameValue(counter, 0);
+
+// `indices` is a non-writable, non-enumerable, and configurable data-property.
+verifyProperty(match, 'indices', {
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/match-indices/no-indices-array.js b/js/src/tests/test262/built-ins/RegExp/match-indices/no-indices-array.js
new file mode 100644
index 0000000000..ab075537dd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/match-indices/no-indices-array.js
@@ -0,0 +1,21 @@
+// Copyright 2019 Ron Buckton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: The "indices" property is an Array.
+esid: sec-regexpbuiltinexec
+features: [regexp-match-indices]
+info: |
+ RegExpBuiltinExec ( R, S )
+
+ 8. If _flags_ contains `"d"`, let _hasIndices_ be *true*, else let _hasIndices_ be *false*.
+ 36. If _hasIndices_ is *true*, then
+ b. Perform ! CreateDataProperty(_A_, `"indices"`, _indicesArray_).
+---*/
+
+let match = /a/.exec("a");
+
+// `indices` is not defined by default
+assert(!match.hasOwnProperty("indices"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/match-indices/shell.js b/js/src/tests/test262/built-ins/RegExp/match-indices/shell.js
new file mode 100644
index 0000000000..276ee734ff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/match-indices/shell.js
@@ -0,0 +1,329 @@
+// GENERATED, DO NOT EDIT
+// file: deepEqual.js
+// Copyright 2019 Ron Buckton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: >
+ Compare two values structurally
+defines: [assert.deepEqual]
+---*/
+
+assert.deepEqual = function(actual, expected, message) {
+ var format = assert.deepEqual.format;
+ assert(
+ assert.deepEqual._compare(actual, expected),
+ `Expected ${format(actual)} to be structurally equal to ${format(expected)}. ${(message || '')}`
+ );
+};
+
+assert.deepEqual.format = function(value, seen) {
+ switch (typeof value) {
+ case 'string':
+ return typeof JSON !== "undefined" ? JSON.stringify(value) : `"${value}"`;
+ case 'number':
+ case 'boolean':
+ case 'symbol':
+ case 'bigint':
+ return value.toString();
+ case 'undefined':
+ return 'undefined';
+ case 'function':
+ return `[Function${value.name ? `: ${value.name}` : ''}]`;
+ case 'object':
+ if (value === null) return 'null';
+ if (value instanceof Date) return `Date "${value.toISOString()}"`;
+ if (value instanceof RegExp) return value.toString();
+ if (!seen) {
+ seen = {
+ counter: 0,
+ map: new Map()
+ };
+ }
+
+ let usage = seen.map.get(value);
+ if (usage) {
+ usage.used = true;
+ return `[Ref: #${usage.id}]`;
+ }
+
+ usage = { id: ++seen.counter, used: false };
+ seen.map.set(value, usage);
+
+ if (typeof Set !== "undefined" && value instanceof Set) {
+ return `Set {${Array.from(value).map(value => assert.deepEqual.format(value, seen)).join(', ')}}${usage.used ? ` as #${usage.id}` : ''}`;
+ }
+ if (typeof Map !== "undefined" && value instanceof Map) {
+ return `Map {${Array.from(value).map(pair => `${assert.deepEqual.format(pair[0], seen)} => ${assert.deepEqual.format(pair[1], seen)}}`).join(', ')}}${usage.used ? ` as #${usage.id}` : ''}`;
+ }
+ if (Array.isArray ? Array.isArray(value) : value instanceof Array) {
+ return `[${value.map(value => assert.deepEqual.format(value, seen)).join(', ')}]${usage.used ? ` as #${usage.id}` : ''}`;
+ }
+ let tag = Symbol.toStringTag in value ? value[Symbol.toStringTag] : 'Object';
+ if (tag === 'Object' && Object.getPrototypeOf(value) === null) {
+ tag = '[Object: null prototype]';
+ }
+ return `${tag ? `${tag} ` : ''}{ ${Object.keys(value).map(key => `${key.toString()}: ${assert.deepEqual.format(value[key], seen)}`).join(', ')} }${usage.used ? ` as #${usage.id}` : ''}`;
+ default:
+ return typeof value;
+ }
+};
+
+assert.deepEqual._compare = (function () {
+ var EQUAL = 1;
+ var NOT_EQUAL = -1;
+ var UNKNOWN = 0;
+
+ function deepEqual(a, b) {
+ return compareEquality(a, b) === EQUAL;
+ }
+
+ function compareEquality(a, b, cache) {
+ return compareIf(a, b, isOptional, compareOptionality)
+ || compareIf(a, b, isPrimitiveEquatable, comparePrimitiveEquality)
+ || compareIf(a, b, isObjectEquatable, compareObjectEquality, cache)
+ || NOT_EQUAL;
+ }
+
+ function compareIf(a, b, test, compare, cache) {
+ return !test(a)
+ ? !test(b) ? UNKNOWN : NOT_EQUAL
+ : !test(b) ? NOT_EQUAL : cacheComparison(a, b, compare, cache);
+ }
+
+ function tryCompareStrictEquality(a, b) {
+ return a === b ? EQUAL : UNKNOWN;
+ }
+
+ function tryCompareTypeOfEquality(a, b) {
+ return typeof a !== typeof b ? NOT_EQUAL : UNKNOWN;
+ }
+
+ function tryCompareToStringTagEquality(a, b) {
+ var aTag = Symbol.toStringTag in a ? a[Symbol.toStringTag] : undefined;
+ var bTag = Symbol.toStringTag in b ? b[Symbol.toStringTag] : undefined;
+ return aTag !== bTag ? NOT_EQUAL : UNKNOWN;
+ }
+
+ function isOptional(value) {
+ return value === undefined
+ || value === null;
+ }
+
+ function compareOptionality(a, b) {
+ return tryCompareStrictEquality(a, b)
+ || NOT_EQUAL;
+ }
+
+ function isPrimitiveEquatable(value) {
+ switch (typeof value) {
+ case 'string':
+ case 'number':
+ case 'bigint':
+ case 'boolean':
+ case 'symbol':
+ return true;
+ default:
+ return isBoxed(value);
+ }
+ }
+
+ function comparePrimitiveEquality(a, b) {
+ if (isBoxed(a)) a = a.valueOf();
+ if (isBoxed(b)) b = b.valueOf();
+ return tryCompareStrictEquality(a, b)
+ || tryCompareTypeOfEquality(a, b)
+ || compareIf(a, b, isNaNEquatable, compareNaNEquality)
+ || NOT_EQUAL;
+ }
+
+ function isNaNEquatable(value) {
+ return typeof value === 'number';
+ }
+
+ function compareNaNEquality(a, b) {
+ return isNaN(a) && isNaN(b) ? EQUAL : NOT_EQUAL;
+ }
+
+ function isObjectEquatable(value) {
+ return typeof value === 'object';
+ }
+
+ function compareObjectEquality(a, b, cache) {
+ if (!cache) cache = new Map();
+ return getCache(cache, a, b)
+ || setCache(cache, a, b, EQUAL) // consider equal for now
+ || cacheComparison(a, b, tryCompareStrictEquality, cache)
+ || cacheComparison(a, b, tryCompareToStringTagEquality, cache)
+ || compareIf(a, b, isValueOfEquatable, compareValueOfEquality)
+ || compareIf(a, b, isToStringEquatable, compareToStringEquality)
+ || compareIf(a, b, isArrayLikeEquatable, compareArrayLikeEquality, cache)
+ || compareIf(a, b, isStructurallyEquatable, compareStructuralEquality, cache)
+ || compareIf(a, b, isIterableEquatable, compareIterableEquality, cache)
+ || cacheComparison(a, b, fail, cache);
+ }
+
+ function isBoxed(value) {
+ return value instanceof String
+ || value instanceof Number
+ || value instanceof Boolean
+ || typeof Symbol === 'function' && value instanceof Symbol
+ || typeof BigInt === 'function' && value instanceof BigInt;
+ }
+
+ function isValueOfEquatable(value) {
+ return value instanceof Date;
+ }
+
+ function compareValueOfEquality(a, b) {
+ return compareIf(a.valueOf(), b.valueOf(), isPrimitiveEquatable, comparePrimitiveEquality)
+ || NOT_EQUAL;
+ }
+
+ function isToStringEquatable(value) {
+ return value instanceof RegExp;
+ }
+
+ function compareToStringEquality(a, b) {
+ return compareIf(a.toString(), b.toString(), isPrimitiveEquatable, comparePrimitiveEquality)
+ || NOT_EQUAL;
+ }
+
+ function isArrayLikeEquatable(value) {
+ return (Array.isArray ? Array.isArray(value) : value instanceof Array)
+ || (typeof Uint8Array === 'function' && value instanceof Uint8Array)
+ || (typeof Uint8ClampedArray === 'function' && value instanceof Uint8ClampedArray)
+ || (typeof Uint16Array === 'function' && value instanceof Uint16Array)
+ || (typeof Uint32Array === 'function' && value instanceof Uint32Array)
+ || (typeof Int8Array === 'function' && value instanceof Int8Array)
+ || (typeof Int16Array === 'function' && value instanceof Int16Array)
+ || (typeof Int32Array === 'function' && value instanceof Int32Array)
+ || (typeof Float32Array === 'function' && value instanceof Float32Array)
+ || (typeof Float64Array === 'function' && value instanceof Float64Array)
+ || (typeof BigUint64Array === 'function' && value instanceof BigUint64Array)
+ || (typeof BigInt64Array === 'function' && value instanceof BigInt64Array);
+ }
+
+ function compareArrayLikeEquality(a, b, cache) {
+ if (a.length !== b.length) return NOT_EQUAL;
+ for (var i = 0; i < a.length; i++) {
+ if (compareEquality(a[i], b[i], cache) === NOT_EQUAL) {
+ return NOT_EQUAL;
+ }
+ }
+ return EQUAL;
+ }
+
+ function isStructurallyEquatable(value) {
+ return !(typeof Promise === 'function' && value instanceof Promise // only comparable by reference
+ || typeof WeakMap === 'function' && value instanceof WeakMap // only comparable by reference
+ || typeof WeakSet === 'function' && value instanceof WeakSet // only comparable by reference
+ || typeof Map === 'function' && value instanceof Map // comparable via @@iterator
+ || typeof Set === 'function' && value instanceof Set); // comparable via @@iterator
+ }
+
+ function compareStructuralEquality(a, b, cache) {
+ var aKeys = [];
+ for (var key in a) aKeys.push(key);
+
+ var bKeys = [];
+ for (var key in b) bKeys.push(key);
+
+ if (aKeys.length !== bKeys.length) {
+ return NOT_EQUAL;
+ }
+
+ aKeys.sort();
+ bKeys.sort();
+
+ for (var i = 0; i < aKeys.length; i++) {
+ var aKey = aKeys[i];
+ var bKey = bKeys[i];
+ if (compareEquality(aKey, bKey, cache) === NOT_EQUAL) {
+ return NOT_EQUAL;
+ }
+ if (compareEquality(a[aKey], b[bKey], cache) === NOT_EQUAL) {
+ return NOT_EQUAL;
+ }
+ }
+
+ return compareIf(a, b, isIterableEquatable, compareIterableEquality, cache)
+ || EQUAL;
+ }
+
+ function isIterableEquatable(value) {
+ return typeof Symbol === 'function'
+ && typeof value[Symbol.iterator] === 'function';
+ }
+
+ function compareIteratorEquality(a, b, cache) {
+ if (typeof Map === 'function' && a instanceof Map && b instanceof Map ||
+ typeof Set === 'function' && a instanceof Set && b instanceof Set) {
+ if (a.size !== b.size) return NOT_EQUAL; // exit early if we detect a difference in size
+ }
+
+ var ar, br;
+ while (true) {
+ ar = a.next();
+ br = b.next();
+ if (ar.done) {
+ if (br.done) return EQUAL;
+ if (b.return) b.return();
+ return NOT_EQUAL;
+ }
+ if (br.done) {
+ if (a.return) a.return();
+ return NOT_EQUAL;
+ }
+ if (compareEquality(ar.value, br.value, cache) === NOT_EQUAL) {
+ if (a.return) a.return();
+ if (b.return) b.return();
+ return NOT_EQUAL;
+ }
+ }
+ }
+
+ function compareIterableEquality(a, b, cache) {
+ return compareIteratorEquality(a[Symbol.iterator](), b[Symbol.iterator](), cache);
+ }
+
+ function cacheComparison(a, b, compare, cache) {
+ var result = compare(a, b, cache);
+ if (cache && (result === EQUAL || result === NOT_EQUAL)) {
+ setCache(cache, a, b, /** @type {EQUAL | NOT_EQUAL} */(result));
+ }
+ return result;
+ }
+
+ function fail() {
+ return NOT_EQUAL;
+ }
+
+ function setCache(cache, left, right, result) {
+ var otherCache;
+
+ otherCache = cache.get(left);
+ if (!otherCache) cache.set(left, otherCache = new Map());
+ otherCache.set(right, result);
+
+ otherCache = cache.get(right);
+ if (!otherCache) cache.set(right, otherCache = new Map());
+ otherCache.set(left, result);
+ }
+
+ function getCache(cache, left, right) {
+ var otherCache;
+ var result;
+
+ otherCache = cache.get(left);
+ result = otherCache && otherCache.get(right);
+ if (result) return result;
+
+ otherCache = cache.get(right);
+ result = otherCache && otherCache.get(left);
+ if (result) return result;
+
+ return UNKNOWN;
+ }
+
+ return deepEqual;
+})();
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/browser.js b/js/src/tests/test262/built-ins/RegExp/named-groups/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-exec.js b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-exec.js
new file mode 100644
index 0000000000..9624cc6545
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-exec.js
@@ -0,0 +1,38 @@
+// |reftest| skip -- regexp-duplicate-named-groups is not supported
+// Copyright 2022 Igalia S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Matching behavior with duplicate named capture groups
+esid: prod-GroupSpecifier
+features: [regexp-duplicate-named-groups]
+includes: [compareArray.js]
+---*/
+
+assert.compareArray(/(?<x>a)|(?<x>b)/.exec("bab"), ["b", undefined, "b"]);
+assert.compareArray(/(?<x>b)|(?<x>a)/.exec("bab"), ["b", "b", undefined]);
+
+assert.compareArray(/(?:(?<x>a)|(?<x>b))\k<x>/.exec("aa"), ["aa", "a", undefined]);
+assert.compareArray(/(?:(?<x>a)|(?<x>b))\k<x>/.exec("bb"), ["bb", undefined, "b"]);
+
+let matchResult = /(?:(?:(?<x>a)|(?<x>b))\k<x>){2}/.exec("aabb");
+assert.compareArray(matchResult, ["aabb", undefined, "b"]);
+assert.sameValue(matchResult.groups.x, "b");
+
+assert.sameValue(/(?:(?:(?<x>a)|(?<x>b))\k<x>){2}/.exec("abab"), null);
+
+assert.sameValue(/(?:(?<x>a)|(?<x>b))\k<x>/.exec("abab"), null);
+
+assert.sameValue(/(?:(?<x>a)|(?<x>b))\k<x>/.exec("cdef"), null);
+
+assert.compareArray(/^(?:(?<a>x)|(?<a>y)|z)\k<a>$/.exec("xx"), ["xx", "x", undefined]);
+assert.compareArray(/^(?:(?<a>x)|(?<a>y)|z)\k<a>$/.exec("z"), ["z", undefined, undefined]);
+assert.sameValue(/^(?:(?<a>x)|(?<a>y)|z)\k<a>$/.exec("zz"), null);
+assert.compareArray(/(?<a>x)|(?:zy\k<a>)/.exec("zy"), ["zy", undefined]);
+
+assert.compareArray(/^(?:(?<a>x)|(?<a>y)|z){2}\k<a>$/.exec("xz"), ["xz", undefined, undefined]);
+assert.compareArray(/^(?:(?<a>x)|(?<a>y)|z){2}\k<a>$/.exec("yz"), ["yz", undefined, undefined]);
+assert.sameValue(/^(?:(?<a>x)|(?<a>y)|z){2}\k<a>$/.exec("xzx"), null);
+assert.sameValue(/^(?:(?<a>x)|(?<a>y)|z){2}\k<a>$/.exec("yzy"), null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-group-property-enumeration-order.js b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-group-property-enumeration-order.js
new file mode 100644
index 0000000000..33a21cbd2e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-group-property-enumeration-order.js
@@ -0,0 +1,27 @@
+// |reftest| skip -- regexp-duplicate-named-groups is not supported
+// Copyright 2022 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Enumeration order of the groups object with duplicate named capture groups
+esid: prod-GroupSpecifier
+features: [regexp-duplicate-named-groups]
+includes: [compareArray.js]
+---*/
+
+
+let regexp = /(?<y>a)(?<x>a)|(?<x>b)(?<y>b)/;
+
+assert.compareArray(
+ Object.keys(regexp.exec("aa").groups),
+ ["y", "x"],
+ "property enumeration order of the groups object is based on source order, not match order"
+);
+
+assert.compareArray(
+ Object.keys(regexp.exec("bb").groups),
+ ["y", "x"],
+ "property enumeration order of the groups object is based on source order, not match order"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-match-indices.js b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-match-indices.js
new file mode 100644
index 0000000000..3135fd75a1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-match-indices.js
@@ -0,0 +1,18 @@
+// |reftest| skip -- regexp-duplicate-named-groups is not supported
+// Copyright 2022 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: match indices with duplicate named capture groups
+esid: sec-makematchindicesindexpairarray
+features: [regexp-duplicate-named-groups, regexp-match-indices]
+includes: [compareArray.js]
+---*/
+
+let indices = "..ab".match(/(?<x>a)|(?<x>b)/d).indices;
+assert.compareArray(indices.groups.x, [2, 3]);
+
+indices = "..ba".match(/(?<x>a)|(?<x>b)/d).indices;
+assert.compareArray(indices.groups.x, [2, 3]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-match.js b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-match.js
new file mode 100644
index 0000000000..dee2d62455
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-match.js
@@ -0,0 +1,38 @@
+// |reftest| skip -- regexp-duplicate-named-groups is not supported
+// Copyright 2022 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Matching behavior with duplicate named capture groups
+esid: prod-GroupSpecifier
+features: [regexp-duplicate-named-groups]
+includes: [compareArray.js]
+---*/
+
+assert.compareArray("bab".match(/(?<x>a)|(?<x>b)/), ["b", undefined, "b"]);
+assert.compareArray("bab".match(/(?<x>b)|(?<x>a)/), ["b", "b", undefined]);
+
+assert.compareArray("aa".match(/(?:(?<x>a)|(?<x>b))\k<x>/), ["aa", "a", undefined]);
+assert.compareArray("bb".match(/(?:(?<x>a)|(?<x>b))\k<x>/), ["bb", undefined, "b"]);
+
+let matchResult = "aabb".match(/(?:(?:(?<x>a)|(?<x>b))\k<x>){2}/);
+assert.compareArray(matchResult, ["aabb", undefined, "b"]);
+assert.sameValue(matchResult.groups.x, "b");
+
+assert.sameValue("abab".match(/(?:(?:(?<x>a)|(?<x>b))\k<x>){2}/), null);
+
+assert.sameValue("abab".match(/(?:(?<x>a)|(?<x>b))\k<x>/), null);
+
+assert.sameValue("cdef".match(/(?:(?<x>a)|(?<x>b))\k<x>/), null);
+
+assert.compareArray("xx".match(/^(?:(?<a>x)|(?<a>y)|z)\k<a>$/), ["xx", "x", undefined]);
+assert.compareArray("z".match(/^(?:(?<a>x)|(?<a>y)|z)\k<a>$/), ["z", undefined, undefined]);
+assert.sameValue("zz".match(/^(?:(?<a>x)|(?<a>y)|z)\k<a>$/), null);
+assert.compareArray("zy".match(/(?<a>x)|(?:zy\k<a>)/), ["zy", undefined]);
+
+assert.compareArray("xz".match(/^(?:(?<a>x)|(?<a>y)|z){2}\k<a>$/), ["xz", undefined, undefined]);
+assert.compareArray("yz".match(/^(?:(?<a>x)|(?<a>y)|z){2}\k<a>$/), ["yz", undefined, undefined]);
+assert.sameValue("xzx".match(/^(?:(?<a>x)|(?<a>y)|z){2}\k<a>$/), null);
+assert.sameValue("yzy".match(/^(?:(?<a>x)|(?<a>y)|z){2}\k<a>$/), null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-matchall.js b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-matchall.js
new file mode 100644
index 0000000000..fea434f83d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-matchall.js
@@ -0,0 +1,31 @@
+// |reftest| skip -- regexp-duplicate-named-groups is not supported
+// Copyright 2022 Igalia S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: String.prototype.search behavior with duplicate named capture groups
+esid: prod-GroupSpecifier
+includes: [compareArray.js,compareIterator.js]
+features: [regexp-duplicate-named-groups]
+---*/
+
+function matchesIterator(iterator, expected) {
+ assert.compareIterator(iterator, expected.map(e => {
+ return v => assert.compareArray(v, e);
+ }));
+}
+
+matchesIterator("bab".matchAll(/(?<x>a)|(?<x>b)/g),
+ [
+ ["b", undefined, "b"],
+ ["a", "a", undefined],
+ ["b", undefined, "b"],
+ ]);
+matchesIterator("bab".matchAll(/(?<x>b)|(?<x>a)/g),
+ [
+ ["b", "b", undefined],
+ ["a", undefined, "a"],
+ ["b", "b", undefined],
+ ]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-replace.js b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-replace.js
new file mode 100644
index 0000000000..76893704af
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-replace.js
@@ -0,0 +1,20 @@
+// |reftest| skip -- regexp-duplicate-named-groups is not supported
+// Copyright 2022 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: String.prototype.replace behavior with duplicate named capture groups
+esid: prod-GroupSpecifier
+features: [regexp-duplicate-named-groups]
+---*/
+
+assert.sameValue("ab".replace(/(?<x>a)|(?<x>b)/, "[$<x>]"), "[a]b");
+assert.sameValue("ba".replace(/(?<x>a)|(?<x>b)/, "[$<x>]"), "[b]a");
+
+assert.sameValue("ab".replace(/(?<x>a)|(?<x>b)/, "[$<x>][$1][$2]"), "[a][a][]b");
+assert.sameValue("ba".replace(/(?<x>a)|(?<x>b)/, "[$<x>][$1][$2]"), "[b][][b]a");
+
+assert.sameValue("ab".replace(/(?<x>a)|(?<x>b)/g, "[$<x>]"), "[a][b]");
+assert.sameValue("ba".replace(/(?<x>a)|(?<x>b)/g, "[$<x>]"), "[b][a]");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-replaceall.js b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-replaceall.js
new file mode 100644
index 0000000000..1cd45805a8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-replaceall.js
@@ -0,0 +1,18 @@
+// |reftest| skip -- regexp-duplicate-named-groups is not supported
+// Copyright 2022 Igalia S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: String.prototype.replaceAll behavior with duplicate named capture groups
+esid: prod-GroupSpecifier
+features: [regexp-duplicate-named-groups]
+---*/
+
+assert.sameValue("abxab".replaceAll(/(?<x>a)|(?<x>b)/g, "[$<x>]"), "[a][b]x[a][b]");
+assert.sameValue("baxba".replaceAll(/(?<x>a)|(?<x>b)/g, "[$<x>]"), "[b][a]x[b][a]");
+
+assert.sameValue("abxab".replaceAll(/(?<x>a)|(?<x>b)/g, "[$<x>][$1][$2]"), "[a][a][][b][][b]x[a][a][][b][][b]");
+assert.sameValue("baxba".replaceAll(/(?<x>a)|(?<x>b)/g, "[$<x>][$1][$2]"), "[b][][b][a][a][]x[b][][b][a][a][]");
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-search.js b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-search.js
new file mode 100644
index 0000000000..db6f8b7534
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-search.js
@@ -0,0 +1,14 @@
+// |reftest| skip -- regexp-duplicate-named-groups is not supported
+// Copyright 2022 Igalia S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: String.prototype.search behavior with duplicate named capture groups
+esid: prod-GroupSpecifier
+features: [regexp-duplicate-named-groups]
+---*/
+
+assert.sameValue("xab".search(/(?<x>a)|(?<x>b)/), 1);
+assert.sameValue("xba".search(/(?<x>a)|(?<x>b)/), 1);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-split.js b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-split.js
new file mode 100644
index 0000000000..ccd9c77993
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-split.js
@@ -0,0 +1,15 @@
+// |reftest| skip -- regexp-duplicate-named-groups is not supported
+// Copyright 2022 Igalia S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: String.prototype.search behavior with duplicate named capture groups
+esid: prod-GroupSpecifier
+includes: [compareArray.js]
+features: [regexp-duplicate-named-groups]
+---*/
+
+assert.compareArray("xab".split(/(?<x>a)|(?<x>b)/), ["x", "a", undefined, "", undefined, "b", ""]);
+assert.compareArray("xba".split(/(?<x>a)|(?<x>b)/), ["x", undefined, "b", "", "a", undefined, ""]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-test.js b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-test.js
new file mode 100644
index 0000000000..77a8dd4391
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/duplicate-names-test.js
@@ -0,0 +1,23 @@
+// |reftest| skip -- regexp-duplicate-named-groups is not supported
+// Copyright 2022 Igalia S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Matching behavior with duplicate named capture groups
+esid: prod-GroupSpecifier
+features: [regexp-duplicate-named-groups]
+---*/
+
+assert(/(?<x>a)|(?<x>b)/.test("bab"));
+assert(/(?<x>b)|(?<x>a)/.test("bab"));
+
+assert(/(?:(?<x>a)|(?<x>b))\k<x>/.test("aa"));
+assert(/(?:(?<x>a)|(?<x>b))\k<x>/.test("bb"));
+
+let matchResult = /(?:(?:(?<x>a)|(?<x>b))\k<x>){2}/.test("aabb");
+assert(matchResult);
+
+let notMatched = /(?:(?:(?<x>a)|(?<x>b))\k<x>){2}/.test("abab");
+assert.sameValue(notMatched, false);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/functional-replace-global.js b/js/src/tests/test262/built-ins/RegExp/named-groups/functional-replace-global.js
new file mode 100644
index 0000000000..3285bf9cf0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/functional-replace-global.js
@@ -0,0 +1,58 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Function argument to String.prototype.replace gets groups as the last argument
+esid: sec-regexp.prototype-@@replace
+features: [regexp-named-groups]
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+ 14. Repeat, for each result in results,
+ j. Let namedCaptures be ? Get(result, "groups").
+ k. If functionalReplace is true, then
+ iv. If namedCaptures is not undefined,
+ 1. Append namedCaptures as the last element of replacerArgs.
+---*/
+
+let source = "(?<fst>.)(?<snd>.)";
+let alternateSource = "(?<fst>.)|(?<snd>.)";
+
+for (let flags of ["g", "gu"]) {
+ let i = 0;
+ let re = new RegExp(source, flags);
+ let result = "abcd".replace(re,
+ (match, fst, snd, offset, str, groups) => {
+ if (i == 0) {
+ assert.sameValue("ab", match);
+ assert.sameValue("a", groups.fst);
+ assert.sameValue("b", groups.snd);
+ assert.sameValue("a", fst);
+ assert.sameValue("b", snd);
+ assert.sameValue(0, offset);
+ assert.sameValue("abcd", str);
+ } else if (i == 1) {
+ assert.sameValue("cd", match);
+ assert.sameValue("c", groups.fst);
+ assert.sameValue("d", groups.snd);
+ assert.sameValue("c", fst);
+ assert.sameValue("d", snd);
+ assert.sameValue(2, offset);
+ assert.sameValue("abcd", str);
+ } else {
+ assertUnreachable();
+ }
+ i++;
+ return `${groups.snd}${groups.fst}`;
+ });
+ assert.sameValue("badc", result);
+ assert.sameValue(i, 2);
+
+ let re2 = new RegExp(alternateSource, flags);
+ assert.sameValue("undefinedundefinedundefinedundefined",
+ "abcd".replace(re2,
+ (match, fst, snd, offset, str, groups) => groups.snd));
+}
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/functional-replace-non-global.js b/js/src/tests/test262/built-ins/RegExp/named-groups/functional-replace-non-global.js
new file mode 100644
index 0000000000..c2631d892d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/functional-replace-non-global.js
@@ -0,0 +1,45 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Function argument to String.prototype.replace gets groups as the last argument
+esid: sec-regexp.prototype-@@replace
+features: [regexp-named-groups]
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+ 14. Repeat, for each result in results,
+ j. Let namedCaptures be ? Get(result, "groups").
+ k. If functionalReplace is true, then
+ iv. If namedCaptures is not undefined,
+ 1. Append namedCaptures as the last element of replacerArgs.
+---*/
+
+let source = "(?<fst>.)(?<snd>.)";
+let alternateSource = "(?<fst>.)|(?<snd>.)";
+
+for (let flags of ["", "u"]) {
+ let i = 0;
+ let re = new RegExp(source, flags);
+ let result = "abcd".replace(re,
+ (match, fst, snd, offset, str, groups) => {
+ assert.sameValue(i++, 0);
+ assert.sameValue("ab", match);
+ assert.sameValue("a", groups.fst);
+ assert.sameValue("b", groups.snd);
+ assert.sameValue("a", fst);
+ assert.sameValue("b", snd);
+ assert.sameValue(0, offset);
+ assert.sameValue("abcd", str);
+ return `${groups.snd}${groups.fst}`;
+ });
+ assert.sameValue("bacd", result);
+ assert.sameValue(i, 1);
+
+ let re2 = new RegExp(alternateSource, flags);
+ assert.sameValue("undefinedbcd",
+ "abcd".replace(re2,
+ (match, fst, snd, offset, str, groups) => groups.snd));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-subclass-sans.js b/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-subclass-sans.js
new file mode 100644
index 0000000000..a6674a6fb1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-subclass-sans.js
@@ -0,0 +1,38 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Test the groups object on RegExp subclass results that do not have their own.
+esid: sec-regexpbuiltinexec
+features: [regexp-named-groups]
+info: |
+ Runtime Semantics: RegExpBuiltinExec ( R, S )
+ 24. If _R_ contains any |GroupName|, then
+ a. Let _groups_ be ObjectCreate(*null*).
+ 25. Else,
+ a. Let _groups_ be *undefined*.
+ 26. Perform ! CreateDataProperty(_A_, `"groups"`, _groups_).
+---*/
+
+class FakeRegExp extends RegExp {
+ exec(subject) {
+ const fakeResult = ["ab", "a"];
+ fakeResult.index = 0;
+ // `groups` is not set, triggering prototype lookup.
+ return fakeResult;
+ }
+};
+
+const re = new FakeRegExp();
+const result = re.exec("ab");
+assert.sameValue(Object.getPrototypeOf(result), Array.prototype);
+assert.sameValue(false, result.hasOwnProperty("groups"));
+
+Array.prototype.groups = { a: "b" };
+Object.getPrototypeOf(Array.prototype.groups).b = "c";
+assert.sameValue("b", "ab".replace(re, "$<a>"));
+assert.sameValue("c", "ab".replace(re, "$<b>"));
+Array.prototype.groups = undefined;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-subclass.js b/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-subclass.js
new file mode 100644
index 0000000000..a833d1f10f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-subclass.js
@@ -0,0 +1,36 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Test the groups object on RegExp subclass results that have their own.
+esid: sec-regexpbuiltinexec
+features: [regexp-named-groups]
+info: |
+ Runtime Semantics: RegExpBuiltinExec ( R, S )
+ 24. If _R_ contains any |GroupName|, then
+ a. Let _groups_ be ObjectCreate(*null*).
+ 25. Else,
+ a. Let _groups_ be *undefined*.
+ 26. Perform ! CreateDataProperty(_A_, `"groups"`, _groups_).
+---*/
+
+class FakeRegExp extends RegExp {
+ exec(subject) {
+ const fakeResult = ["ab", "a"];
+ fakeResult.index = 0;
+ fakeResult.groups = { a: "b" };
+ Object.getPrototypeOf(fakeResult.groups).b = "c";
+ return fakeResult;
+ }
+};
+
+const re = new FakeRegExp();
+const result = re.exec("ab");
+assert.sameValue(Object.getPrototypeOf(result), Array.prototype);
+assert(result.hasOwnProperty("groups"));
+assert.sameValue("b", result.groups.a);
+assert.sameValue("b", "ab".replace(re, "$<a>"));
+assert.sameValue("c", "ab".replace(re, "$<b>"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-undefined.js b/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-undefined.js
new file mode 100644
index 0000000000..06f5e49454
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-undefined.js
@@ -0,0 +1,35 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: The groups object is created unconditionally.
+includes: [propertyHelper.js]
+esid: sec-regexpbuiltinexec
+features: [regexp-named-groups]
+info: |
+ Runtime Semantics: RegExpBuiltinExec ( R, S )
+ 24. If _R_ contains any |GroupName|, then
+ a. Let _groups_ be ObjectCreate(*null*).
+ 25. Else,
+ a. Let _groups_ be *undefined*.
+ 26. Perform ! CreateDataProperty(_A_, `"groups"`, _groups_).
+---*/
+
+const re = /./;
+const result = re.exec("a");
+assert.sameValue(Object.getPrototypeOf(result), Array.prototype);
+assert(result.hasOwnProperty("groups"));
+assert.sameValue("a", result[0]);
+assert.sameValue(0, result.index);
+assert.sameValue(undefined, result.groups);
+verifyProperty(result, "groups", {
+ writable: true,
+ enumerable: true,
+ configurable: true,
+});
+
+Array.prototype.groups = { a: "b" };
+assert.sameValue("$<a>", "a".replace(re, "$<a>"));
+Array.prototype.groups = undefined;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-unmatched.js b/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-unmatched.js
new file mode 100644
index 0000000000..d43732eb06
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object-unmatched.js
@@ -0,0 +1,37 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Test the groups object with matched and unmatched named captures.
+esid: sec-regexpbuiltinexec
+features: [regexp-named-groups]
+info: |
+ Runtime Semantics: RegExpBuiltinExec ( R, S )
+ 24. If _R_ contains any |GroupName|, then
+ a. Let _groups_ be ObjectCreate(*null*).
+ 25. Else,
+ a. Let _groups_ be *undefined*.
+ 26. Perform ! CreateDataProperty(_A_, `"groups"`, _groups_).
+---*/
+
+const re = /(?<a>a).|(?<x>x)/;
+const result = re.exec("ab");
+assert.sameValue(Object.getPrototypeOf(result), Array.prototype);
+assert(result.hasOwnProperty("groups"));
+assert.sameValue("ab", result[0]);
+assert.sameValue("a", result[1]);
+assert.sameValue(undefined, result[2]);
+assert.sameValue(0, result.index);
+assert.sameValue("a", result.groups.a);
+assert.sameValue(undefined, result.groups.x);
+
+// `a` is a matched named capture, `b` is an unmatched named capture, and `z`
+// is not a named capture.
+Array.prototype.groups = { a: "b", x: "y", z: "z" };
+assert.sameValue("a", "ab".replace(re, "$<a>"));
+assert.sameValue("", "ab".replace(re, "$<x>"));
+assert.sameValue("", "ab".replace(re, "$<z>"));
+Array.prototype.groups = undefined;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object.js b/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object.js
new file mode 100644
index 0000000000..bec4ae8d59
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/groups-object.js
@@ -0,0 +1,41 @@
+// Copyright 2017 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Properties of the groups object are created with CreateDataProperty
+includes: [propertyHelper.js]
+esid: sec-regexpbuiltinexec
+features: [regexp-named-groups]
+info: |
+ Runtime Semantics: RegExpBuiltinExec ( R, S )
+ 24. If _R_ contains any |GroupName|, then
+ a. Let _groups_ be ObjectCreate(*null*).
+ 25. Else,
+ a. Let _groups_ be *undefined*.
+ 26. Perform ! CreateDataProperty(_A_, `"groups"`, _groups_).
+---*/
+
+// `groups` is created with Define, not Set.
+let counter = 0;
+Object.defineProperty(Array.prototype, "groups", {
+ set() { counter++; }
+});
+
+let match = /(?<x>.)/.exec("a");
+assert.sameValue(counter, 0);
+
+// `groups` is writable, enumerable and configurable
+// (from CreateDataProperty).
+verifyProperty(match, "groups", {
+ writable: true,
+ enumerable: true,
+ configurable: true,
+});
+
+// The `__proto__` property on the groups object is not special,
+// and does not affect the [[Prototype]] of the resulting groups object.
+let {groups} = /(?<__proto__>.)/.exec("a");
+assert.sameValue("a", groups.__proto__);
+assert.sameValue(null, Object.getPrototypeOf(groups));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/groups-properties.js b/js/src/tests/test262/built-ins/RegExp/named-groups/groups-properties.js
new file mode 100644
index 0000000000..ce971cf0b5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/groups-properties.js
@@ -0,0 +1,34 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Properties of the groups object are created with CreateDataProperty
+includes: [compareArray.js, propertyHelper.js]
+esid: sec-regexpbuiltinexec
+features: [regexp-named-groups]
+info: |
+ Runtime Semantics: RegExpBuiltinExec ( R, S )
+ 25. For each integer i such that i > 0 and i ≤ n
+ f. If the ith capture of R was defined with a GroupName,
+ i. Let s be the StringValue of the corresponding RegExpIdentifierName.
+ ii. Perform ! CreateDataProperty(groups, s, capturedValue).
+---*/
+
+// Properties created on result.groups in textual order.
+assert.compareArray(["fst", "snd"], Object.getOwnPropertyNames(
+ /(?<fst>.)|(?<snd>.)/u.exec("abcd").groups));
+
+// Properties are created with Define, not Set
+let counter = 0;
+Object.defineProperty(Object.prototype, 'x', {set() { counter++; }});
+let match = /(?<x>.)/.exec('a');
+let groups = match.groups;
+assert.sameValue(counter, 0);
+
+// Properties are writable, enumerable and configurable
+// (from CreateDataProperty)
+verifyWritable(groups, "x");
+verifyEnumerable(groups, "x");
+verifyConfigurable(groups, "x");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/lookbehind.js b/js/src/tests/test262/built-ins/RegExp/named-groups/lookbehind.js
new file mode 100644
index 0000000000..470ff342cd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/lookbehind.js
@@ -0,0 +1,47 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Named groups can be used in conjunction with lookbehind
+esid: prod-GroupSpecifier
+features: [regexp-named-groups, regexp-lookbehind]
+includes: [compareArray.js]
+---*/
+
+// Unicode mode
+assert.compareArray(["f", "c"], "abcdef".match(/(?<=(?<a>\w){3})f/u));
+assert.sameValue("c", "abcdef".match(/(?<=(?<a>\w){3})f/u).groups.a);
+assert.sameValue("b", "abcdef".match(/(?<=(?<a>\w){4})f/u).groups.a);
+assert.sameValue("a", "abcdef".match(/(?<=(?<a>\w)+)f/u).groups.a);
+assert.sameValue(null, "abcdef".match(/(?<=(?<a>\w){6})f/u));
+
+assert.compareArray(["f", ""], "abcdef".match(/((?<=\w{3}))f/u));
+assert.compareArray(["f", ""], "abcdef".match(/(?<a>(?<=\w{3}))f/u));
+
+assert.compareArray(["f", undefined], "abcdef".match(/(?<!(?<a>\d){3})f/u));
+assert.sameValue(null, "abcdef".match(/(?<!(?<a>\D){3})f/u));
+
+assert.compareArray(["f", undefined], "abcdef".match(/(?<!(?<a>\D){3})f|f/u));
+assert.compareArray(["f", undefined], "abcdef".match(/(?<a>(?<!\D{3}))f|f/u));
+
+// Non-Unicode mode
+assert.compareArray(["f", "c"], "abcdef".match(/(?<=(?<a>\w){3})f/));
+assert.sameValue("c", "abcdef".match(/(?<=(?<a>\w){3})f/).groups.a);
+assert.sameValue("b", "abcdef".match(/(?<=(?<a>\w){4})f/).groups.a);
+assert.sameValue("a", "abcdef".match(/(?<=(?<a>\w)+)f/).groups.a);
+assert.sameValue(null, "abcdef".match(/(?<=(?<a>\w){6})f/));
+
+assert.compareArray(["f", ""], "abcdef".match(/((?<=\w{3}))f/));
+assert.compareArray(["f", ""], "abcdef".match(/(?<a>(?<=\w{3}))f/));
+
+assert.compareArray(["f", undefined], "abcdef".match(/(?<!(?<a>\d){3})f/));
+assert.sameValue(null, "abcdef".match(/(?<!(?<a>\D){3})f/));
+
+assert.compareArray(["f", undefined], "abcdef".match(/(?<!(?<a>\D){3})f|f/));
+assert.compareArray(["f", undefined], "abcdef".match(/(?<a>(?<!\D{3}))f|f/));
+
+// Even within a lookbehind, properties are created in left to right order
+assert.compareArray(["fst", "snd"], Object.getOwnPropertyNames(
+ /(?<=(?<fst>.)|(?<snd>.))/u.exec("abcd").groups));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-match.js b/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-match.js
new file mode 100644
index 0000000000..bc68c12bf8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-match.js
@@ -0,0 +1,44 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Basic matching cases with non-Unicode groups
+esid: prod-GroupSpecifier
+features: [regexp-named-groups]
+includes: [compareArray.js]
+---*/
+
+assert.compareArray(["a", "a"], "bab".match(/(?<a>a)/));
+assert.compareArray(["a", "a"], "bab".match(/(?<a42>a)/));
+assert.compareArray(["a", "a"], "bab".match(/(?<_>a)/));
+assert.compareArray(["a", "a"], "bab".match(/(?<$>a)/));
+assert.compareArray(["bab", "a"], "bab".match(/.(?<$>a)./));
+assert.compareArray(["bab", "a", "b"], "bab".match(/.(?<a>a)(.)/));
+assert.compareArray(["bab", "a", "b"], "bab".match(/.(?<a>a)(?<b>.)/));
+assert.compareArray(["bab", "ab"], "bab".match(/.(?<a>\w\w)/));
+assert.compareArray(["bab", "bab"], "bab".match(/(?<a>\w\w\w)/));
+assert.compareArray(["bab", "ba", "b"], "bab".match(/(?<a>\w\w)(?<b>\w)/));
+
+let {a, b, c} = /(?<a>.)(?<b>.)(?<c>.)\k<c>\k<b>\k<a>/.exec("abccba").groups;
+assert.sameValue(a, "a");
+assert.sameValue(b, "b");
+assert.sameValue(c, "c");
+
+assert.compareArray("bab".match(/(a)/), "bab".match(/(?<a>a)/));
+assert.compareArray("bab".match(/(a)/), "bab".match(/(?<a42>a)/));
+assert.compareArray("bab".match(/(a)/), "bab".match(/(?<_>a)/));
+assert.compareArray("bab".match(/(a)/), "bab".match(/(?<$>a)/));
+assert.compareArray("bab".match(/.(a)./), "bab".match(/.(?<$>a)./));
+assert.compareArray("bab".match(/.(a)(.)/), "bab".match(/.(?<a>a)(.)/));
+assert.compareArray("bab".match(/.(a)(.)/), "bab".match(/.(?<a>a)(?<b>.)/));
+assert.compareArray("bab".match(/.(\w\w)/), "bab".match(/.(?<a>\w\w)/));
+assert.compareArray("bab".match(/(\w\w\w)/), "bab".match(/(?<a>\w\w\w)/));
+assert.compareArray("bab".match(/(\w\w)(\w)/), "bab".match(/(?<a>\w\w)(?<b>\w)/));
+
+assert.compareArray(["bab", "b"], "bab".match(/(?<b>b).\1/));
+assert.compareArray(["baba", "b", "a"], "baba".match(/(.)(?<a>a)\1\2/));
+assert.compareArray(["baba", "b", "a", "b", "a"], "baba".match(/(.)(?<a>a)(?<b>\1)(\2)/));
+assert.compareArray(["<a", "<"], "<a".match(/(?<lt><)a/));
+assert.compareArray([">a", ">"], ">a".match(/(?<gt>>)a/));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-property-names-invalid.js b/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-property-names-invalid.js
new file mode 100644
index 0000000000..b2523652af
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-property-names-invalid.js
@@ -0,0 +1,57 @@
+// Copyright (C) 2020 Apple Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+author: Michael Saboff
+description: Invalid exotic named group names in non-Unicode RegExps
+esid: prod-GroupSpecifier
+features: [regexp-named-groups]
+---*/
+
+/*
+ Valid ID_Continue Unicode characters (Can't be first identifier character.)
+
+ 𝟚 \u{1d7da} \ud835 \udfda
+
+ Invalid ID_Start / ID_Continue
+
+ (fox face emoji) 🦊 \u{1f98a} \ud83e \udd8a
+ (dog emoji) 🐕 \u{1f415} \ud83d \udc15
+*/
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<🦊>fox)");
+});
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<\u{1f98a}>fox)");
+});
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<\ud83e\udd8a>fox)");
+});
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<🐕>dog)");
+});
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<\u{1f415}>dog)");
+});
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<\ud83d \udc15>dog)");
+});
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<𝟚the>the)");
+});
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<\u{1d7da}the>the)");
+});
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<\ud835\udfdathe>the)");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-property-names-valid.js b/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-property-names-valid.js
new file mode 100644
index 0000000000..eb568a1ee0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-property-names-valid.js
@@ -0,0 +1,96 @@
+// Copyright (C) 2020 Apple Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+author: Michael Saboff
+description: Exotic named group names in non-Unicode RegExps
+esid: prod-GroupSpecifier
+features: [regexp-named-groups]
+---*/
+
+/*
+ Valid ID_Start / ID_Continue Unicode characters
+
+ 𝑓 \u{1d453} \ud835 \udc53
+ 𝑜 \u{1d45c} \ud835 \udc5c
+ 𝑥 \u{id465} \ud835 \udc65
+
+ 𝓓 \u{1d4d3} \ud835 \udcd3
+ 𝓸 \u{1d4f8} \ud835 \udcf8
+ 𝓰 \u{1d4f0} \ud835 \udcf0
+
+ 𝓑 \u{1d4d1} \ud835 \udcd1
+ 𝓻 \u{1d4fb} \ud835 \udcfb
+ 𝓸 \u{1d4f8} \ud835 \udcf8
+ 𝔀 \u{1d500} \ud835 \udd00
+ 𝓷 \u{1d4f7} \ud835 \udcf7
+
+ 𝖰 \u{1d5b0} \ud835 \uddb0
+ 𝖡 \u{1d5a1} \ud835 \udda1
+ 𝖥 \u{1d5a5} \ud835 \udda5
+
+ (fox) 狸 \u{72f8} \u72f8
+ (dog) 狗 \u{72d7} \u72d7
+
+ Valid ID_Continue Unicode characters (Can't be first identifier character.)
+
+ 𝟚 \u{1d7da} \ud835 \udfda
+*/
+
+var string = "The quick brown fox jumped over the lazy dog's back";
+var string2 = "It is a dog eat dog world.";
+
+let match = null;
+
+assert.sameValue(string.match(/(?<animal>fox|dog)/).groups.animal, "fox");
+
+match = string.match(/(?<𝑓𝑜𝑥>fox).*(?<𝓓𝓸𝓰>dog)/);
+assert.sameValue(match.groups.𝑓𝑜𝑥, "fox");
+assert.sameValue(match.groups.𝓓𝓸𝓰, "dog");
+assert.sameValue(match[1], "fox");
+assert.sameValue(match[2], "dog");
+
+match = string.match(/(?<狸>fox).*(?<狗>dog)/);
+assert.sameValue(match.groups.狸, "fox");
+assert.sameValue(match.groups.狗, "dog");
+assert.sameValue(match[1], "fox");
+assert.sameValue(match[2], "dog");
+
+assert.sameValue(string.match(/(?<𝓑𝓻𝓸𝔀𝓷>brown)/).groups.𝓑𝓻𝓸𝔀𝓷, "brown");
+assert.sameValue(string.match(/(?<𝓑𝓻𝓸𝔀𝓷>brown)/).groups.\u{1d4d1}\u{1d4fb}\u{1d4f8}\u{1d500}\u{1d4f7}, "brown");
+assert.sameValue(string.match(/(?<\u{1d4d1}\u{1d4fb}\u{1d4f8}\u{1d500}\u{1d4f7}>brown)/).groups.𝓑𝓻𝓸𝔀𝓷, "brown");
+assert.sameValue(string.match(/(?<\u{1d4d1}\u{1d4fb}\u{1d4f8}\u{1d500}\u{1d4f7}>brown)/).groups.\u{1d4d1}\u{1d4fb}\u{1d4f8}\u{1d500}\u{1d4f7}, "brown");
+assert.sameValue(string.match(/(?<\ud835\udcd1\ud835\udcfb\ud835\udcf8\ud835\udd00\ud835\udcf7>brown)/).groups.𝓑𝓻𝓸𝔀𝓷, "brown");
+assert.sameValue(string.match(/(?<\ud835\udcd1\ud835\udcfb\ud835\udcf8\ud835\udd00\ud835\udcf7>brown)/).groups.\u{1d4d1}\u{1d4fb}\u{1d4f8}\u{1d500}\u{1d4f7}, "brown");
+
+assert.sameValue(string.match(/(?<𝖰𝖡𝖥>q\w*\W\w*\W\w*)/).groups.𝖰𝖡𝖥, "quick brown fox");
+assert.sameValue(string.match(/(?<𝖰𝖡\u{1d5a5}>q\w*\W\w*\W\w*)/).groups.𝖰𝖡𝖥, "quick brown fox");
+assert.sameValue(string.match(/(?<𝖰\u{1d5a1}𝖥>q\w*\W\w*\W\w*)/).groups.𝖰𝖡𝖥, "quick brown fox");
+assert.sameValue(string.match(/(?<𝖰\u{1d5a1}\u{1d5a5}>q\w*\W\w*\W\w*)/).groups.𝖰𝖡𝖥, "quick brown fox");
+assert.sameValue(string.match(/(?<\u{1d5b0}𝖡𝖥>q\w*\W\w*\W\w*)/).groups.𝖰𝖡𝖥, "quick brown fox");
+assert.sameValue(string.match(/(?<\u{1d5b0}𝖡\u{1d5a5}>q\w*\W\w*\W\w*)/).groups.𝖰𝖡𝖥, "quick brown fox");
+assert.sameValue(string.match(/(?<\u{1d5b0}\u{1d5a1}𝖥>q\w*\W\w*\W\w*)/).groups.𝖰𝖡𝖥, "quick brown fox");
+assert.sameValue(string.match(/(?<\u{1d5b0}\u{1d5a1}\u{1d5a5}>q\w*\W\w*\W\w*)/).groups.𝖰𝖡𝖥, "quick brown fox");
+
+assert.sameValue(string.match(/(?<the𝟚>the)/).groups.the𝟚, "the");
+assert.sameValue(string.match(/(?<the\u{1d7da}>the)/).groups.the𝟚, "the");
+assert.sameValue(string.match(/(?<the\ud835\udfda>the)/).groups.the𝟚, "the");
+
+match = string2.match(/(?<dog>dog)(.*?)(\k<dog>)/);
+assert.sameValue(match.groups.dog, "dog");
+assert.sameValue(match[1], "dog");
+assert.sameValue(match[2], " eat ");
+assert.sameValue(match[3], "dog");
+
+match = string2.match(/(?<𝓓𝓸𝓰>dog)(.*?)(\k<𝓓𝓸𝓰>)/);
+assert.sameValue(match.groups.𝓓𝓸𝓰, "dog");
+assert.sameValue(match[1], "dog");
+assert.sameValue(match[2], " eat ");
+assert.sameValue(match[3], "dog");
+
+match = string2.match(/(?<狗>dog)(.*?)(\k<狗>)/);
+assert.sameValue(match.groups.狗, "dog");
+assert.sameValue(match[1], "dog");
+assert.sameValue(match[2], " eat ");
+assert.sameValue(match[3], "dog");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-property-names.js b/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-property-names.js
new file mode 100644
index 0000000000..e9b3cabb4d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-property-names.js
@@ -0,0 +1,25 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Exotic named group names in non-Unicode RegExps
+esid: prod-GroupSpecifier
+features: [regexp-named-groups]
+---*/
+
+assert.sameValue("a", /(?<π>a)/.exec("bab").groups.π);
+assert.sameValue("a", /(?<π>a)/.exec("bab").groups.\u03C0);
+assert.sameValue("a", /(?<$>a)/.exec("bab").groups.$);
+assert.sameValue("a", /(?<_>a)/.exec("bab").groups._);
+assert.sameValue("a", /(?<_\u200C>a)/.exec("bab").groups._\u200C);
+assert.sameValue("a", /(?<_\u200D>a)/.exec("bab").groups._\u200D);
+assert.sameValue("a", /(?<ಠ_ಠ>a)/.exec("bab").groups.ಠ_ಠ);
+
+// Unicode escapes in capture names.
+assert(/(?<\u0041>.)/.test("a"));
+assert(RegExp("(?<\u{0041}>.)").test("a"), "Non-surrogate");
+
+// 4-char escapes must be the proper ID_Start/ID_Continue
+assert(RegExp("(?<\\u0041>.)").test("a"), "Non-surrogate");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-references.js b/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-references.js
new file mode 100644
index 0000000000..3f8f8c4ab3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/non-unicode-references.js
@@ -0,0 +1,36 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Named backreferences in non-Unicode RegExps
+esid: prod-GroupSpecifier
+features: [regexp-named-groups]
+includes: [compareArray.js]
+---*/
+
+// Named references.
+assert.compareArray(["bab", "b"], "bab".match(/(?<b>.).\k<b>/));
+assert.sameValue(null, "baa".match(/(?<b>.).\k<b>/));
+
+// Reference inside group.
+assert.compareArray(["bab", "b"], "bab".match(/(?<a>\k<a>\w)../));
+assert.sameValue("b", "bab".match(/(?<a>\k<a>\w)../).groups.a);
+
+// Reference before group.
+assert.compareArray(["bab", "b"], "bab".match(/\k<a>(?<a>b)\w\k<a>/));
+assert.sameValue("b", "bab".match(/\k<a>(?<a>b)\w\k<a>/).groups.a);
+assert.compareArray(["bab", "b", "a"], "bab".match(/(?<b>b)\k<a>(?<a>a)\k<b>/));
+let {a, b} = "bab".match(/(?<b>b)\k<a>(?<a>a)\k<b>/).groups;
+assert.sameValue(a, "a");
+assert.sameValue(b, "b");
+
+assert.compareArray(["bab", "b"], "bab".match(/\k<a>(?<a>b)\w\k<a>/));
+assert.compareArray(["bab", "b", "a"], "bab".match(/(?<b>b)\k<a>(?<a>a)\k<b>/));
+
+// Reference properties.
+assert.sameValue("a", /(?<a>a)(?<b>b)\k<a>/.exec("aba").groups.a);
+assert.sameValue("b", /(?<a>a)(?<b>b)\k<a>/.exec("aba").groups.b);
+assert.sameValue(undefined, /(?<a>a)(?<b>b)\k<a>/.exec("aba").groups.c);
+assert.sameValue(undefined, /(?<a>a)(?<b>b)\k<a>|(?<c>c)/.exec("aba").groups.c);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/shell.js b/js/src/tests/test262/built-ins/RegExp/named-groups/shell.js
new file mode 100644
index 0000000000..c752bae293
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/shell.js
@@ -0,0 +1,37 @@
+// GENERATED, DO NOT EDIT
+// file: compareIterator.js
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Compare the values of an iterator with an array of expected values
+defines: [assert.compareIterator]
+---*/
+
+// Example:
+//
+// function* numbers() {
+// yield 1;
+// yield 2;
+// yield 3;
+// }
+//
+// assert.compareIterator(numbers(), [
+// v => assert.sameValue(v, 1),
+// v => assert.sameValue(v, 2),
+// v => assert.sameValue(v, 3),
+// ]);
+//
+assert.compareIterator = function(iter, validators, message) {
+ message = message || '';
+
+ var i, result;
+ for (i = 0; i < validators.length; i++) {
+ result = iter.next();
+ assert(!result.done, 'Expected ' + i + ' values(s). Instead iterator only produced ' + (i - 1) + ' value(s). ' + message);
+ validators[i](result.value);
+ }
+
+ result = iter.next();
+ assert(result.done, 'Expected only ' + i + ' values(s). Instead iterator produced more. ' + message);
+ assert.sameValue(result.value, undefined, 'Expected value of `undefined` when iterator completes. ' + message);
+}
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-escaped.js b/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-escaped.js
new file mode 100644
index 0000000000..8a4f4b96d4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-escaped.js
@@ -0,0 +1,26 @@
+// Copyright 2017 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Do not replace $<> preceded with $
+esid: sec-getsubstitution
+features: [regexp-named-groups]
+info: |
+ Runtime Semantics: GetSubstitution( matched, str, position, captures, namedCaptures, replacement )
+
+ 12. These $ replacements are done left-to-right, and, once such a replacement is performed,
+ the new replacement text is not subject to further replacements.
+
+ Table: Replacement Text Symbol Substitutions
+
+ Unicode Characters: $$
+ Replacement text: $
+---*/
+
+let source = "(?<fst>.)";
+for (let flags of ["", "u"]) {
+ let re = new RegExp(source, flags);
+ assert.sameValue("$<fst>bc", "abc".replace(re, "$$<fst>"));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-get.js b/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-get.js
new file mode 100644
index 0000000000..a765c9d30a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-get.js
@@ -0,0 +1,31 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Named substitutions are found by getting the property from the groups object
+esid: sec-getsubstitution
+features: [regexp-named-groups]
+info: |
+ Runtime Semantics: GetSubstitution( matched, str, position, captures, namedCaptures, replacement )
+
+ Table: Replacement Text Symbol Substitutions
+
+ Unicode Characters: $<
+ Replacement text:
+ 2. Otherwise,
+ c. Let capture be ? Get(namedCaptures, groupName).
+ d. If capture is undefined, replace the text through > with the empty string.
+ e. Otherwise, replace the text through this following > with ? ToString(capture).
+---*/
+
+let source = "(?<fst>.)(?<snd>.)|(?<thd>x)";
+for (let flags of ["g", "gu"]) {
+ let re = new RegExp(source, flags);
+ assert.sameValue("badc", "abcd".replace(re, "$<snd>$<fst>"));
+}
+for (let flags of ["", "u"]) {
+ let re = new RegExp(source, flags);
+ assert.sameValue("bacd", "abcd".replace(re, "$<snd>$<fst>"));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-missing.js b/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-missing.js
new file mode 100644
index 0000000000..defb9e358c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-missing.js
@@ -0,0 +1,26 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: If the group doesn't exist, replace with the empty string
+esid: sec-getsubstitution
+features: [regexp-named-groups]
+---*/
+
+let source = "(?<fst>.)(?<snd>.)|(?<thd>x)";
+for (let flags of ["", "u"]) {
+ let re = new RegExp(source, flags);
+ assert.sameValue("cd", "abcd".replace(re, "$<42$1>"));
+ assert.sameValue("cd", "abcd".replace(re, "$<fth>"));
+ assert.sameValue("cd", "abcd".replace(re, "$<$1>"));
+ assert.sameValue("cd", "abcd".replace(re, "$<>"));
+}
+for (let flags of ["g", "gu"]) {
+ let re = new RegExp(source, flags);
+ assert.sameValue("", "abcd".replace(re, "$<42$1>"));
+ assert.sameValue("", "abcd".replace(re, "$<fth>"));
+ assert.sameValue("", "abcd".replace(re, "$<$1>"));
+ assert.sameValue("", "abcd".replace(re, "$<>"));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-nocaptures.js b/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-nocaptures.js
new file mode 100644
index 0000000000..bfd98fa38d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-nocaptures.js
@@ -0,0 +1,34 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: If there are no named captures, don't replace $<>
+esid: sec-getsubstitution
+features: [regexp-named-groups]
+info: |
+ Runtime Semantics: GetSubstitution( matched, str, position, captures, namedCaptures, replacement )
+
+ Table: Replacement Text Symbol Substitutions
+
+ Unicode Characters: $<
+ Replacement text:
+ 1. If namedCaptures is undefined, the replacement text is the literal string $<.
+---*/
+
+// @@replace with a string replacement argument (no named captures).
+
+let source = "(.)(.)|(x)";
+for (let flags of ["", "u"]) {
+ let re = new RegExp(source, flags);
+ assert.sameValue("$<snd>$<fst>cd", "abcd".replace(re, "$<snd>$<fst>"));
+ assert.sameValue("bacd", "abcd".replace(re, "$2$1"));
+ assert.sameValue("cd", "abcd".replace(re, "$3"));
+ assert.sameValue("$<sndcd", "abcd".replace(re, "$<snd"));
+ assert.sameValue("$<sndacd", "abcd".replace(re, "$<snd$1"));
+ assert.sameValue("$<42a>cd", "abcd".replace(re, "$<42$1>"));
+ assert.sameValue("$<fth>cd", "abcd".replace(re, "$<fth>"));
+ assert.sameValue("$<a>cd", "abcd".replace(re, "$<$1>"));
+}
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-numbered.js b/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-numbered.js
new file mode 100644
index 0000000000..a9943dc7d2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-numbered.js
@@ -0,0 +1,31 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Named groups may be accessed in their replacement string by number
+esid: sec-getsubstitution
+features: [regexp-named-groups]
+info: |
+ Runtime Semantics: GetSubstitution( matched, str, position, captures, namedCaptures, replacement )
+
+ Table: Replacement Text Symbol Substitutions
+
+ Unicode Characters: $n
+ Replacement text:
+ The nth element of captures, where n is a single digit in the range 1 to 9. If
+ n≤m and the nth element of captures is undefined, use the empty String instead.
+ If n>m, the result is implementation-defined.
+---*/
+
+let source = "(?<fst>.)(?<snd>.)|(?<thd>x)";
+for (let flags of ["g", "gu"]) {
+ let re = new RegExp(source, flags);
+ assert.sameValue("badc", "abcd".replace(re, "$2$1"));
+}
+for (let flags of ["", "u"]) {
+ let re = new RegExp(source, flags);
+ assert.sameValue("bacd", "abcd".replace(re, "$2$1"));
+}
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-unclosed.js b/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-unclosed.js
new file mode 100644
index 0000000000..1c1e927dcc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-unclosed.js
@@ -0,0 +1,22 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ A missing > following $< means that the $< is taken literally
+ in a replacement string in the context of named capture substitution.
+esid: sec-getsubstitution
+features: [regexp-named-groups]
+---*/
+
+let source = "(?<fst>.)(?<snd>.)|(?<thd>x)";
+for (let flags of ["", "u"]) {
+ let re = new RegExp(source, flags);
+ assert.sameValue("$<sndcd", "abcd".replace(re, "$<snd"));
+}
+for (let flags of ["g", "gu"]) {
+ let re = new RegExp(source, flags);
+ assert.sameValue("$<snd$<snd", "abcd".replace(re, "$<snd"));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-undefined.js b/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-undefined.js
new file mode 100644
index 0000000000..5c4d0e06f1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/string-replace-undefined.js
@@ -0,0 +1,30 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: If a named group was not reached, it is replaced by the empty string
+esid: sec-getsubstitution
+features: [regexp-named-groups]
+info: |
+ Runtime Semantics: GetSubstitution( matched, str, position, captures, namedCaptures, replacement )
+
+ Table: Replacement Text Symbol Substitutions
+
+ Unicode Characters: $<
+ Replacement text:
+ 2. Otherwise,
+ c. Let capture be ? Get(namedCaptures, groupName).
+ d. If capture is undefined, replace the text through > with the empty string.
+---*/
+
+let source = "(?<fst>.)(?<snd>.)|(?<thd>x)";
+for (let flags of ["g", "gu"]) {
+ let re = new RegExp(source, flags);
+ assert.sameValue("", "abcd".replace(re, "$<thd>"));
+}
+for (let flags of ["", "u"]) {
+ let re = new RegExp(source, flags);
+ assert.sameValue("cd", "abcd".replace(re, "$<thd>"));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-match.js b/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-match.js
new file mode 100644
index 0000000000..0e87178091
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-match.js
@@ -0,0 +1,48 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Basic matching cases with Unicode groups
+esid: prod-GroupSpecifier
+features: [regexp-named-groups]
+includes: [compareArray.js]
+---*/
+
+assert.compareArray(["a", "a"], "bab".match(/(?<a>a)/u));
+assert.compareArray(["a", "a"], "bab".match(/(?<a42>a)/u));
+assert.compareArray(["a", "a"], "bab".match(/(?<_>a)/u));
+assert.compareArray(["a", "a"], "bab".match(/(?<$>a)/u));
+assert.compareArray(["bab", "a"], "bab".match(/.(?<$>a)./u));
+assert.compareArray(["bab", "a", "b"], "bab".match(/.(?<a>a)(.)/u));
+assert.compareArray(["bab", "a", "b"], "bab".match(/.(?<a>a)(?<b>.)/u));
+assert.compareArray(["bab", "ab"], "bab".match(/.(?<a>\w\w)/u));
+assert.compareArray(["bab", "bab"], "bab".match(/(?<a>\w\w\w)/u));
+assert.compareArray(["bab", "ba", "b"], "bab".match(/(?<a>\w\w)(?<b>\w)/u));
+
+let {a, b, c} = /(?<a>.)(?<b>.)(?<c>.)\k<c>\k<b>\k<a>/u.exec("abccba").groups;
+assert.sameValue(a, "a");
+assert.sameValue(b, "b");
+assert.sameValue(c, "c");
+
+assert.compareArray("bab".match(/(a)/u), "bab".match(/(?<a>a)/u));
+assert.compareArray("bab".match(/(a)/u), "bab".match(/(?<a42>a)/u));
+assert.compareArray("bab".match(/(a)/u), "bab".match(/(?<_>a)/u));
+assert.compareArray("bab".match(/(a)/u), "bab".match(/(?<$>a)/u));
+assert.compareArray("bab".match(/.(a)./u), "bab".match(/.(?<$>a)./u));
+assert.compareArray("bab".match(/.(a)(.)/u), "bab".match(/.(?<a>a)(.)/u));
+assert.compareArray("bab".match(/.(a)(.)/u), "bab".match(/.(?<a>a)(?<b>.)/u));
+assert.compareArray("bab".match(/.(\w\w)/u), "bab".match(/.(?<a>\w\w)/u));
+assert.compareArray("bab".match(/(\w\w\w)/u), "bab".match(/(?<a>\w\w\w)/u));
+assert.compareArray("bab".match(/(\w\w)(\w)/u), "bab".match(/(?<a>\w\w)(?<b>\w)/u));
+
+assert.compareArray(["bab", "b"], "bab".match(/(?<b>b).\1/u));
+assert.compareArray(["baba", "b", "a"], "baba".match(/(.)(?<a>a)\1\2/u));
+assert.compareArray(["baba", "b", "a", "b", "a"], "baba".match(/(.)(?<a>a)(?<b>\1)(\2)/u));
+assert.compareArray(["<a", "<"], "<a".match(/(?<lt><)a/u));
+assert.compareArray([">a", ">"], ">a".match(/(?<gt>>)a/u));
+
+// Nested groups.
+assert.compareArray(["bab", "bab", "ab", "b"], "bab".match(/(?<a>.(?<b>.(?<c>.)))/u));
+assert.compareArray({a: "bab", b: "ab", c: "b"}, "bab".match(/(?<a>.(?<b>.(?<c>.)))/u).groups);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-property-names-invalid.js b/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-property-names-invalid.js
new file mode 100644
index 0000000000..9b0ef33496
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-property-names-invalid.js
@@ -0,0 +1,57 @@
+// Copyright (C) 2020 Apple Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+author: Michael Saboff
+description: Invalid exotic named group names in Unicode RegExps
+esid: prod-GroupSpecifier
+features: [regexp-named-groups]
+---*/
+
+/*
+ Valid ID_Continue Unicode characters (Can't be first identifier character.)
+
+ 𝟚 \u{1d7da} \ud835 \udfda
+
+ Invalid ID_Start / ID_Continue
+
+ (fox face emoji) 🦊 \u{1f98a} \ud83e \udd8a
+ (dog emoji) 🐕 \u{1f415} \ud83d \udc15
+*/
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<🦊>fox)", "u");
+});
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<\u{1f98a}>fox)", "u");
+});
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<\ud83e\udd8a>fox)", "u");
+});
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<🐕>dog)", "u");
+});
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<\u{1f415}>dog)", "u");
+});
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<\ud83d \udc15>dog)", "u");
+});
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<𝟚the>the)", "u");
+});
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<\u{1d7da}the>the)", "u");
+});
+
+assert.throws(SyntaxError, function() {
+ return new RegExp("(?<\ud835\udfdathe>the)", "u");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-property-names-valid.js b/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-property-names-valid.js
new file mode 100644
index 0000000000..d26f3c626b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-property-names-valid.js
@@ -0,0 +1,102 @@
+// Copyright (C) 2020 Apple Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+author: Michael Saboff
+description: Exotic named group names in Unicode RegExps
+esid: prod-GroupSpecifier
+features: [regexp-named-groups]
+---*/
+
+/*
+ Valid ID_Start / ID_Continue Unicode characters
+
+ 𝑓 \u{1d453} \ud835 \udc53
+ 𝑜 \u{1d45c} \ud835 \udc5c
+ 𝑥 \u{id465} \ud835 \udc65
+
+ 𝓓 \u{1d4d3} \ud835 \udcd3
+ 𝓸 \u{1d4f8} \ud835 \udcf8
+ 𝓰 \u{1d4f0} \ud835 \udcf0
+
+ 𝓑 \u{1d4d1} \ud835 \udcd1
+ 𝓻 \u{1d4fb} \ud835 \udcfb
+ 𝓸 \u{1d4f8} \ud835 \udcf8
+ 𝔀 \u{1d500} \ud835 \udd00
+ 𝓷 \u{1d4f7} \ud835 \udcf7
+
+ 𝖰 \u{1d5b0} \ud835 \uddb0
+ 𝖡 \u{1d5a1} \ud835 \udda1
+ 𝖥 \u{1d5a5} \ud835 \udda5
+
+ (fox) 狸 \u{72f8} \u72f8
+ (dog) 狗 \u{72d7} \u72d7
+
+ Valid ID_Continue Unicode characters (Can't be first identifier character.)
+
+ 𝟚 \u{1d7da} \ud835 \udfda
+
+ Invalid ID_Start / ID_Continue
+
+ (fox face emoji) 🦊 \u{1f98a} \ud83e \udd8a
+ (dog emoji) 🐕 \u{1f415} \ud83d \udc15
+*/
+
+var string = "The quick brown fox jumped over the lazy dog's back";
+var string2 = "It is a dog eat dog world.";
+
+let match = null;
+
+assert.sameValue(string.match(/(?<animal>fox|dog)/u).groups.animal, "fox");
+assert.sameValue(string.match(/(?<the2>the)/u).groups.the2, "the");
+
+match = string.match(/(?<𝑓𝑜𝑥>fox).*(?<𝓓𝓸𝓰>dog)/u);
+assert.sameValue(match.groups.𝑓𝑜𝑥, "fox");
+assert.sameValue(match.groups.𝓓𝓸𝓰, "dog");
+assert.sameValue(match[1], "fox");
+assert.sameValue(match[2], "dog");
+
+match = string.match(/(?<狸>fox).*(?<狗>dog)/u);
+assert.sameValue(match.groups.狸, "fox");
+assert.sameValue(match.groups.狗, "dog");
+assert.sameValue(match[1], "fox");
+assert.sameValue(match[2], "dog");
+
+assert.sameValue(string.match(/(?<𝓑𝓻𝓸𝔀𝓷>brown)/u).groups.𝓑𝓻𝓸𝔀𝓷, "brown");
+assert.sameValue(string.match(/(?<𝓑𝓻𝓸𝔀𝓷>brown)/u).groups.\u{1d4d1}\u{1d4fb}\u{1d4f8}\u{1d500}\u{1d4f7}, "brown");
+assert.sameValue(string.match(/(?<\u{1d4d1}\u{1d4fb}\u{1d4f8}\u{1d500}\u{1d4f7}>brown)/u).groups.𝓑𝓻𝓸𝔀𝓷, "brown");
+assert.sameValue(string.match(/(?<\u{1d4d1}\u{1d4fb}\u{1d4f8}\u{1d500}\u{1d4f7}>brown)/u).groups.\u{1d4d1}\u{1d4fb}\u{1d4f8}\u{1d500}\u{1d4f7}, "brown");
+assert.sameValue(string.match(/(?<\ud835\udcd1\ud835\udcfb\ud835\udcf8\ud835\udd00\ud835\udcf7>brown)/u).groups.𝓑𝓻𝓸𝔀𝓷, "brown");
+assert.sameValue(string.match(/(?<\ud835\udcd1\ud835\udcfb\ud835\udcf8\ud835\udd00\ud835\udcf7>brown)/u).groups.\u{1d4d1}\u{1d4fb}\u{1d4f8}\u{1d500}\u{1d4f7}, "brown");
+
+assert.sameValue(string.match(/(?<𝖰𝖡𝖥>q\w*\W\w*\W\w*)/u).groups.𝖰𝖡𝖥, "quick brown fox");
+assert.sameValue(string.match(/(?<𝖰𝖡\u{1d5a5}>q\w*\W\w*\W\w*)/u).groups.𝖰𝖡𝖥, "quick brown fox");
+assert.sameValue(string.match(/(?<𝖰\u{1d5a1}𝖥>q\w*\W\w*\W\w*)/u).groups.𝖰𝖡𝖥, "quick brown fox");
+assert.sameValue(string.match(/(?<𝖰\u{1d5a1}\u{1d5a5}>q\w*\W\w*\W\w*)/u).groups.𝖰𝖡𝖥, "quick brown fox");
+assert.sameValue(string.match(/(?<\u{1d5b0}𝖡𝖥>q\w*\W\w*\W\w*)/u).groups.𝖰𝖡𝖥, "quick brown fox");
+assert.sameValue(string.match(/(?<\u{1d5b0}𝖡\u{1d5a5}>q\w*\W\w*\W\w*)/u).groups.𝖰𝖡𝖥, "quick brown fox");
+assert.sameValue(string.match(/(?<\u{1d5b0}\u{1d5a1}𝖥>q\w*\W\w*\W\w*)/u).groups.𝖰𝖡𝖥, "quick brown fox");
+assert.sameValue(string.match(/(?<\u{1d5b0}\u{1d5a1}\u{1d5a5}>q\w*\W\w*\W\w*)/u).groups.𝖰𝖡𝖥, "quick brown fox");
+
+assert.sameValue(string.match(/(?<the𝟚>the)/u).groups.the𝟚, "the");
+assert.sameValue(string.match(/(?<the\u{1d7da}>the)/u).groups.the𝟚, "the");
+assert.sameValue(string.match(/(?<the\ud835\udfda>the)/u).groups.the𝟚, "the");
+
+match = string2.match(/(?<dog>dog)(.*?)(\k<dog>)/u);
+assert.sameValue(match.groups.dog, "dog");
+assert.sameValue(match[1], "dog");
+assert.sameValue(match[2], " eat ");
+assert.sameValue(match[3], "dog");
+
+match = string2.match(/(?<𝓓𝓸𝓰>dog)(.*?)(\k<𝓓𝓸𝓰>)/u);
+assert.sameValue(match.groups.𝓓𝓸𝓰, "dog");
+assert.sameValue(match[1], "dog");
+assert.sameValue(match[2], " eat ");
+assert.sameValue(match[3], "dog");
+
+match = string2.match(/(?<狗>dog)(.*?)(\k<狗>)/u);
+assert.sameValue(match.groups.狗, "dog");
+assert.sameValue(match[1], "dog");
+assert.sameValue(match[2], " eat ");
+assert.sameValue(match[3], "dog");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-property-names.js b/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-property-names.js
new file mode 100644
index 0000000000..bb321dd6ff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-property-names.js
@@ -0,0 +1,32 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Exotic named group names in Unicode RegExps
+esid: prod-GroupSpecifier
+features: [regexp-named-groups]
+---*/
+
+assert.sameValue("a", /(?<π>a)/u.exec("bab").groups.π);
+assert.sameValue("a", /(?<\u{03C0}>a)/u.exec("bab").groups.π);
+assert.sameValue("a", /(?<π>a)/u.exec("bab").groups.\u03C0);
+assert.sameValue("a", /(?<\u{03C0}>a)/u.exec("bab").groups.\u03C0);
+assert.sameValue("a", /(?<$>a)/u.exec("bab").groups.$);
+assert.sameValue("a", /(?<_>a)/u.exec("bab").groups._);
+assert.sameValue("a", /(?<$𐒤>a)/u.exec("bab").groups.$𐒤);
+assert.sameValue("a", /(?<_\u200C>a)/u.exec("bab").groups._\u200C);
+assert.sameValue("a", /(?<_\u200D>a)/u.exec("bab").groups._\u200D);
+assert.sameValue("a", /(?<ಠ_ಠ>a)/u.exec("bab").groups.ಠ_ಠ);
+
+// Unicode escapes in capture names.
+assert(/(?<a\uD801\uDCA4>.)/u.test("a"), "\\u Lead \\u Trail");
+assert(/(?<\u0041>.)/u.test("a"), "\\u NonSurrogate");
+assert(/(?<\u{0041}>.)/u.test("a"), "\\u{ Non-surrogate }");
+assert(/(?<a\u{104A4}>.)/u.test("a"), "\\u{ Surrogate, ID_Continue }");
+assert(RegExp("(?<\u{0041}>.)", "u").test("a"), "Non-surrogate");
+assert(RegExp("(?<a\u{104A4}>.)", "u").test("a"), "Surrogate,ID_Continue");
+assert((/(?<\u{0041}>.)/u).test("a"), "Non-surrogate");
+assert(/(?<a\u{104A4}>.)/u.test("a"), "Surrogate, ID_Continue");
+assert(RegExp("(?<\\u0041>.)", "u").test("a"), "Non-surrogate");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-references.js b/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-references.js
new file mode 100644
index 0000000000..30d70ad112
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/named-groups/unicode-references.js
@@ -0,0 +1,49 @@
+// Copyright 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Named backreferences in Unicode RegExps
+esid: sec-atomescape
+info: |
+ The production AtomEscape :: [+N] k GroupName evaluates as follows:
+
+ 1. Search the enclosing RegExp for an instance of a GroupSpecifier for an
+ RegExpIdentifierName which has a StringValue equal to the StringValue
+ of the RegExpIdentifierName contained in GroupName.
+ 2. Assert: A unique such GroupSpecifier is found.
+ 3. Let parenIndex be the number of left capturing parentheses in the entire
+ regular expression that occur to the left of the located GroupSpecifier.
+ This is the total number of times the Atom::(GroupSpecifierDisjunction)
+ production is expanded prior to that production's Term plus the total
+ number of Atom :: (GroupSpecifierDisjunction) productions enclosing this Term.
+ 4. Call BackreferenceMatcher(parenIndex) and return its Matcher result.
+features: [regexp-named-groups]
+includes: [compareArray.js]
+---*/
+
+// Named references.
+assert.compareArray(["bab", "b"], "bab".match(/(?<b>.).\k<b>/u));
+assert.sameValue(null, "baa".match(/(?<b>.).\k<b>/u));
+
+// Reference inside group.
+assert.compareArray(["bab", "b"], "bab".match(/(?<a>\k<a>\w)../u));
+assert.sameValue("b", "bab".match(/(?<a>\k<a>\w)../u).groups.a);
+
+// Reference before group.
+assert.compareArray(["bab", "b"], "bab".match(/\k<a>(?<a>b)\w\k<a>/u));
+assert.sameValue("b", "bab".match(/\k<a>(?<a>b)\w\k<a>/u).groups.a);
+assert.compareArray(["bab", "b", "a"], "bab".match(/(?<b>b)\k<a>(?<a>a)\k<b>/u));
+let {a, b} = "bab".match(/(?<b>b)\k<a>(?<a>a)\k<b>/u).groups;
+assert.sameValue(a, "a");
+assert.sameValue(b, "b");
+
+assert.compareArray(["bab", "b"], "bab".match(/\k<a>(?<a>b)\w\k<a>/));
+assert.compareArray(["bab", "b", "a"], "bab".match(/(?<b>b)\k<a>(?<a>a)\k<b>/));
+
+// Reference properties.
+assert.sameValue("a", /(?<a>a)(?<b>b)\k<a>/u.exec("aba").groups.a);
+assert.sameValue("b", /(?<a>a)(?<b>b)\k<a>/u.exec("aba").groups.b);
+assert.sameValue(undefined, /(?<a>a)(?<b>b)\k<a>/u.exec("aba").groups.c);
+assert.sameValue(undefined, /(?<a>a)(?<b>b)\k<a>|(?<c>c)/u.exec("aba").groups.c);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prop-desc.js b/js/src/tests/test262/built-ins/RegExp/prop-desc.js
new file mode 100644
index 0000000000..3136a00500
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prop-desc.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2019 Bocoup. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-constructor-properties-of-the-global-object-regexp
+description: Property descriptor for RegExp
+info: |
+ Every other data property described in clauses 18 through 26 and in Annex B.2
+ has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+ [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+---*/
+
+verifyNotEnumerable(this, "RegExp");
+verifyWritable(this, "RegExp");
+verifyConfigurable(this, "RegExp");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_F-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_F-negated.js
new file mode 100644
index 0000000000..7331a3342e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_F-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Binary properties with an explicit value must throw in Unicode property
+ escapes (even if the value is valid).
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{ASCII=F}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_F.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_F.js
new file mode 100644
index 0000000000..2e53e37be8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_F.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Binary properties with an explicit value must throw in Unicode property
+ escapes (even if the value is valid).
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{ASCII=F}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Invalid-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Invalid-negated.js
new file mode 100644
index 0000000000..e398ae8f84
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Invalid-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Binary properties with an explicit value must throw in Unicode property
+ escapes (even if the value is valid).
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{ASCII=Invalid}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Invalid.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Invalid.js
new file mode 100644
index 0000000000..f297a72424
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Invalid.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Binary properties with an explicit value must throw in Unicode property
+ escapes (even if the value is valid).
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{ASCII=Invalid}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_N-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_N-negated.js
new file mode 100644
index 0000000000..3696bd4579
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_N-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Binary properties with an explicit value must throw in Unicode property
+ escapes (even if the value is valid).
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{ASCII=N}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_N.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_N.js
new file mode 100644
index 0000000000..9275f4ffcc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_N.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Binary properties with an explicit value must throw in Unicode property
+ escapes (even if the value is valid).
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{ASCII=N}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_No-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_No-negated.js
new file mode 100644
index 0000000000..450bb142a1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_No-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Binary properties with an explicit value must throw in Unicode property
+ escapes (even if the value is valid).
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{ASCII=No}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_No.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_No.js
new file mode 100644
index 0000000000..1342d0e3f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_No.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Binary properties with an explicit value must throw in Unicode property
+ escapes (even if the value is valid).
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{ASCII=No}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_T-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_T-negated.js
new file mode 100644
index 0000000000..c2bbe2db95
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_T-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Binary properties with an explicit value must throw in Unicode property
+ escapes (even if the value is valid).
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{ASCII=T}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_T.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_T.js
new file mode 100644
index 0000000000..01c4ddcdc1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_T.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Binary properties with an explicit value must throw in Unicode property
+ escapes (even if the value is valid).
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{ASCII=T}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Y-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Y-negated.js
new file mode 100644
index 0000000000..052799975a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Y-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Binary properties with an explicit value must throw in Unicode property
+ escapes (even if the value is valid).
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{ASCII=Y}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Y.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Y.js
new file mode 100644
index 0000000000..921e2510c4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Y.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Binary properties with an explicit value must throw in Unicode property
+ escapes (even if the value is valid).
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{ASCII=Y}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Yes-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Yes-negated.js
new file mode 100644
index 0000000000..94f4e523a2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Yes-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Binary properties with an explicit value must throw in Unicode property
+ escapes (even if the value is valid).
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{ASCII=Yes}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Yes.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Yes.js
new file mode 100644
index 0000000000..35370f890c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Yes.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Binary properties with an explicit value must throw in Unicode property
+ escapes (even if the value is valid).
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{ASCII=Yes}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/browser.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/character-class-range-end.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/character-class-range-end.js
new file mode 100644
index 0000000000..6233ff6a05
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/character-class-range-end.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ NonemptyClassRanges :: ClassAtom - ClassAtom ClassRanges
+
+ It is a Syntax Error if IsCharacterClass of the first ClassAtom is
+ true or IsCharacterClass of the second ClassAtom is true.
+esid: sec-patterns-static-semantics-early-errors
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/[--\p{Hex}]/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/character-class-range-no-dash-end.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/character-class-range-no-dash-end.js
new file mode 100644
index 0000000000..16aafcce6a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/character-class-range-no-dash-end.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ NonemptyClassRangesNoDash :: ClassAtomNoDash - ClassAtom ClassRanges
+
+ It is a Syntax Error if IsCharacterClass of ClassAtomNoDash is true or
+ IsCharacterClass of ClassAtom is true.
+esid: sec-patterns-static-semantics-early-errors
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/[\uFFFF-\p{Hex}]/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/character-class-range-no-dash-start.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/character-class-range-no-dash-start.js
new file mode 100644
index 0000000000..3db35ec9b7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/character-class-range-no-dash-start.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ NonemptyClassRangesNoDash :: ClassAtomNoDash - ClassAtom ClassRanges
+
+ It is a Syntax Error if IsCharacterClass of ClassAtomNoDash is true or
+ IsCharacterClass of ClassAtom is true.
+esid: sec-patterns-static-semantics-early-errors
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/[\p{Hex}-\uFFFF]/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/character-class-range-start.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/character-class-range-start.js
new file mode 100644
index 0000000000..c430925a34
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/character-class-range-start.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ NonemptyClassRanges :: ClassAtom - ClassAtom ClassRanges
+
+ It is a Syntax Error if IsCharacterClass of the first ClassAtom is
+ true or IsCharacterClass of the second ClassAtom is true.
+esid: sec-patterns-static-semantics-early-errors
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/[\p{Hex}--]/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/character-class.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/character-class.js
new file mode 100644
index 0000000000..f7bf696d4e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/character-class.js
@@ -0,0 +1,19 @@
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes must be supported in character classes.
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+---*/
+
+/[\p{Hex}]/u;
+
+assert(
+ /[\p{Hex}\P{Hex}]/u.test('\u{1D306}'),
+ 'multiple property escapes in a single character class should be supported'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/ASCII.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/ASCII.js
new file mode 100644
index 0000000000..b0656bbae2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/ASCII.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `ASCII`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000000, 0x00007F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{ASCII}+$/u,
+ matchSymbols,
+ "\\p{ASCII}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000080, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{ASCII}+$/u,
+ nonMatchSymbols,
+ "\\P{ASCII}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/ASCII_Hex_Digit.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/ASCII_Hex_Digit.js
new file mode 100644
index 0000000000..db78f77386
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/ASCII_Hex_Digit.js
@@ -0,0 +1,57 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `ASCII_Hex_Digit`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000030, 0x000039],
+ [0x000041, 0x000046],
+ [0x000061, 0x000066]
+ ]
+});
+testPropertyEscapes(
+ /^\p{ASCII_Hex_Digit}+$/u,
+ matchSymbols,
+ "\\p{ASCII_Hex_Digit}"
+);
+testPropertyEscapes(
+ /^\p{AHex}+$/u,
+ matchSymbols,
+ "\\p{AHex}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00002F],
+ [0x00003A, 0x000040],
+ [0x000047, 0x000060],
+ [0x000067, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{ASCII_Hex_Digit}+$/u,
+ nonMatchSymbols,
+ "\\P{ASCII_Hex_Digit}"
+);
+testPropertyEscapes(
+ /^\P{AHex}+$/u,
+ nonMatchSymbols,
+ "\\P{AHex}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Alphabetic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Alphabetic.js
new file mode 100644
index 0000000000..00edf28f83
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Alphabetic.js
@@ -0,0 +1,1517 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Alphabetic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000AA,
+ 0x0000B5,
+ 0x0000BA,
+ 0x0002EC,
+ 0x0002EE,
+ 0x000345,
+ 0x00037F,
+ 0x000386,
+ 0x00038C,
+ 0x000559,
+ 0x0005BF,
+ 0x0005C7,
+ 0x0006FF,
+ 0x0007FA,
+ 0x0009B2,
+ 0x0009CE,
+ 0x0009D7,
+ 0x0009FC,
+ 0x000A51,
+ 0x000A5E,
+ 0x000AD0,
+ 0x000B71,
+ 0x000B9C,
+ 0x000BD0,
+ 0x000BD7,
+ 0x000C5D,
+ 0x000D4E,
+ 0x000DBD,
+ 0x000DD6,
+ 0x000E4D,
+ 0x000E84,
+ 0x000EA5,
+ 0x000EC6,
+ 0x000ECD,
+ 0x000F00,
+ 0x001038,
+ 0x0010C7,
+ 0x0010CD,
+ 0x001258,
+ 0x0012C0,
+ 0x0017D7,
+ 0x0017DC,
+ 0x001AA7,
+ 0x001CFA,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x001FBE,
+ 0x002071,
+ 0x00207F,
+ 0x002102,
+ 0x002107,
+ 0x002115,
+ 0x002124,
+ 0x002126,
+ 0x002128,
+ 0x00214E,
+ 0x002D27,
+ 0x002D2D,
+ 0x002D6F,
+ 0x002E2F,
+ 0x00A7D3,
+ 0x00A8C5,
+ 0x00A8FB,
+ 0x00A9CF,
+ 0x00AAC0,
+ 0x00AAC2,
+ 0x00FB3E,
+ 0x010808,
+ 0x01083C,
+ 0x010F27,
+ 0x0110C2,
+ 0x011176,
+ 0x0111DA,
+ 0x0111DC,
+ 0x011237,
+ 0x011288,
+ 0x011350,
+ 0x011357,
+ 0x0114C7,
+ 0x011640,
+ 0x011644,
+ 0x0116B8,
+ 0x011909,
+ 0x0119E1,
+ 0x011A9D,
+ 0x011C40,
+ 0x011D3A,
+ 0x011D43,
+ 0x011D98,
+ 0x011FB0,
+ 0x016FE3,
+ 0x01B132,
+ 0x01B155,
+ 0x01BC9E,
+ 0x01D4A2,
+ 0x01D4BB,
+ 0x01D546,
+ 0x01E08F,
+ 0x01E14E,
+ 0x01E947,
+ 0x01E94B,
+ 0x01EE24,
+ 0x01EE27,
+ 0x01EE39,
+ 0x01EE3B,
+ 0x01EE42,
+ 0x01EE47,
+ 0x01EE49,
+ 0x01EE4B,
+ 0x01EE54,
+ 0x01EE57,
+ 0x01EE59,
+ 0x01EE5B,
+ 0x01EE5D,
+ 0x01EE5F,
+ 0x01EE64,
+ 0x01EE7E
+ ],
+ ranges: [
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000F6],
+ [0x0000F8, 0x0002C1],
+ [0x0002C6, 0x0002D1],
+ [0x0002E0, 0x0002E4],
+ [0x000370, 0x000374],
+ [0x000376, 0x000377],
+ [0x00037A, 0x00037D],
+ [0x000388, 0x00038A],
+ [0x00038E, 0x0003A1],
+ [0x0003A3, 0x0003F5],
+ [0x0003F7, 0x000481],
+ [0x00048A, 0x00052F],
+ [0x000531, 0x000556],
+ [0x000560, 0x000588],
+ [0x0005B0, 0x0005BD],
+ [0x0005C1, 0x0005C2],
+ [0x0005C4, 0x0005C5],
+ [0x0005D0, 0x0005EA],
+ [0x0005EF, 0x0005F2],
+ [0x000610, 0x00061A],
+ [0x000620, 0x000657],
+ [0x000659, 0x00065F],
+ [0x00066E, 0x0006D3],
+ [0x0006D5, 0x0006DC],
+ [0x0006E1, 0x0006E8],
+ [0x0006ED, 0x0006EF],
+ [0x0006FA, 0x0006FC],
+ [0x000710, 0x00073F],
+ [0x00074D, 0x0007B1],
+ [0x0007CA, 0x0007EA],
+ [0x0007F4, 0x0007F5],
+ [0x000800, 0x000817],
+ [0x00081A, 0x00082C],
+ [0x000840, 0x000858],
+ [0x000860, 0x00086A],
+ [0x000870, 0x000887],
+ [0x000889, 0x00088E],
+ [0x0008A0, 0x0008C9],
+ [0x0008D4, 0x0008DF],
+ [0x0008E3, 0x0008E9],
+ [0x0008F0, 0x00093B],
+ [0x00093D, 0x00094C],
+ [0x00094E, 0x000950],
+ [0x000955, 0x000963],
+ [0x000971, 0x000983],
+ [0x000985, 0x00098C],
+ [0x00098F, 0x000990],
+ [0x000993, 0x0009A8],
+ [0x0009AA, 0x0009B0],
+ [0x0009B6, 0x0009B9],
+ [0x0009BD, 0x0009C4],
+ [0x0009C7, 0x0009C8],
+ [0x0009CB, 0x0009CC],
+ [0x0009DC, 0x0009DD],
+ [0x0009DF, 0x0009E3],
+ [0x0009F0, 0x0009F1],
+ [0x000A01, 0x000A03],
+ [0x000A05, 0x000A0A],
+ [0x000A0F, 0x000A10],
+ [0x000A13, 0x000A28],
+ [0x000A2A, 0x000A30],
+ [0x000A32, 0x000A33],
+ [0x000A35, 0x000A36],
+ [0x000A38, 0x000A39],
+ [0x000A3E, 0x000A42],
+ [0x000A47, 0x000A48],
+ [0x000A4B, 0x000A4C],
+ [0x000A59, 0x000A5C],
+ [0x000A70, 0x000A75],
+ [0x000A81, 0x000A83],
+ [0x000A85, 0x000A8D],
+ [0x000A8F, 0x000A91],
+ [0x000A93, 0x000AA8],
+ [0x000AAA, 0x000AB0],
+ [0x000AB2, 0x000AB3],
+ [0x000AB5, 0x000AB9],
+ [0x000ABD, 0x000AC5],
+ [0x000AC7, 0x000AC9],
+ [0x000ACB, 0x000ACC],
+ [0x000AE0, 0x000AE3],
+ [0x000AF9, 0x000AFC],
+ [0x000B01, 0x000B03],
+ [0x000B05, 0x000B0C],
+ [0x000B0F, 0x000B10],
+ [0x000B13, 0x000B28],
+ [0x000B2A, 0x000B30],
+ [0x000B32, 0x000B33],
+ [0x000B35, 0x000B39],
+ [0x000B3D, 0x000B44],
+ [0x000B47, 0x000B48],
+ [0x000B4B, 0x000B4C],
+ [0x000B56, 0x000B57],
+ [0x000B5C, 0x000B5D],
+ [0x000B5F, 0x000B63],
+ [0x000B82, 0x000B83],
+ [0x000B85, 0x000B8A],
+ [0x000B8E, 0x000B90],
+ [0x000B92, 0x000B95],
+ [0x000B99, 0x000B9A],
+ [0x000B9E, 0x000B9F],
+ [0x000BA3, 0x000BA4],
+ [0x000BA8, 0x000BAA],
+ [0x000BAE, 0x000BB9],
+ [0x000BBE, 0x000BC2],
+ [0x000BC6, 0x000BC8],
+ [0x000BCA, 0x000BCC],
+ [0x000C00, 0x000C0C],
+ [0x000C0E, 0x000C10],
+ [0x000C12, 0x000C28],
+ [0x000C2A, 0x000C39],
+ [0x000C3D, 0x000C44],
+ [0x000C46, 0x000C48],
+ [0x000C4A, 0x000C4C],
+ [0x000C55, 0x000C56],
+ [0x000C58, 0x000C5A],
+ [0x000C60, 0x000C63],
+ [0x000C80, 0x000C83],
+ [0x000C85, 0x000C8C],
+ [0x000C8E, 0x000C90],
+ [0x000C92, 0x000CA8],
+ [0x000CAA, 0x000CB3],
+ [0x000CB5, 0x000CB9],
+ [0x000CBD, 0x000CC4],
+ [0x000CC6, 0x000CC8],
+ [0x000CCA, 0x000CCC],
+ [0x000CD5, 0x000CD6],
+ [0x000CDD, 0x000CDE],
+ [0x000CE0, 0x000CE3],
+ [0x000CF1, 0x000CF3],
+ [0x000D00, 0x000D0C],
+ [0x000D0E, 0x000D10],
+ [0x000D12, 0x000D3A],
+ [0x000D3D, 0x000D44],
+ [0x000D46, 0x000D48],
+ [0x000D4A, 0x000D4C],
+ [0x000D54, 0x000D57],
+ [0x000D5F, 0x000D63],
+ [0x000D7A, 0x000D7F],
+ [0x000D81, 0x000D83],
+ [0x000D85, 0x000D96],
+ [0x000D9A, 0x000DB1],
+ [0x000DB3, 0x000DBB],
+ [0x000DC0, 0x000DC6],
+ [0x000DCF, 0x000DD4],
+ [0x000DD8, 0x000DDF],
+ [0x000DF2, 0x000DF3],
+ [0x000E01, 0x000E3A],
+ [0x000E40, 0x000E46],
+ [0x000E81, 0x000E82],
+ [0x000E86, 0x000E8A],
+ [0x000E8C, 0x000EA3],
+ [0x000EA7, 0x000EB9],
+ [0x000EBB, 0x000EBD],
+ [0x000EC0, 0x000EC4],
+ [0x000EDC, 0x000EDF],
+ [0x000F40, 0x000F47],
+ [0x000F49, 0x000F6C],
+ [0x000F71, 0x000F83],
+ [0x000F88, 0x000F97],
+ [0x000F99, 0x000FBC],
+ [0x001000, 0x001036],
+ [0x00103B, 0x00103F],
+ [0x001050, 0x00108F],
+ [0x00109A, 0x00109D],
+ [0x0010A0, 0x0010C5],
+ [0x0010D0, 0x0010FA],
+ [0x0010FC, 0x001248],
+ [0x00124A, 0x00124D],
+ [0x001250, 0x001256],
+ [0x00125A, 0x00125D],
+ [0x001260, 0x001288],
+ [0x00128A, 0x00128D],
+ [0x001290, 0x0012B0],
+ [0x0012B2, 0x0012B5],
+ [0x0012B8, 0x0012BE],
+ [0x0012C2, 0x0012C5],
+ [0x0012C8, 0x0012D6],
+ [0x0012D8, 0x001310],
+ [0x001312, 0x001315],
+ [0x001318, 0x00135A],
+ [0x001380, 0x00138F],
+ [0x0013A0, 0x0013F5],
+ [0x0013F8, 0x0013FD],
+ [0x001401, 0x00166C],
+ [0x00166F, 0x00167F],
+ [0x001681, 0x00169A],
+ [0x0016A0, 0x0016EA],
+ [0x0016EE, 0x0016F8],
+ [0x001700, 0x001713],
+ [0x00171F, 0x001733],
+ [0x001740, 0x001753],
+ [0x001760, 0x00176C],
+ [0x00176E, 0x001770],
+ [0x001772, 0x001773],
+ [0x001780, 0x0017B3],
+ [0x0017B6, 0x0017C8],
+ [0x001820, 0x001878],
+ [0x001880, 0x0018AA],
+ [0x0018B0, 0x0018F5],
+ [0x001900, 0x00191E],
+ [0x001920, 0x00192B],
+ [0x001930, 0x001938],
+ [0x001950, 0x00196D],
+ [0x001970, 0x001974],
+ [0x001980, 0x0019AB],
+ [0x0019B0, 0x0019C9],
+ [0x001A00, 0x001A1B],
+ [0x001A20, 0x001A5E],
+ [0x001A61, 0x001A74],
+ [0x001ABF, 0x001AC0],
+ [0x001ACC, 0x001ACE],
+ [0x001B00, 0x001B33],
+ [0x001B35, 0x001B43],
+ [0x001B45, 0x001B4C],
+ [0x001B80, 0x001BA9],
+ [0x001BAC, 0x001BAF],
+ [0x001BBA, 0x001BE5],
+ [0x001BE7, 0x001BF1],
+ [0x001C00, 0x001C36],
+ [0x001C4D, 0x001C4F],
+ [0x001C5A, 0x001C7D],
+ [0x001C80, 0x001C88],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CBF],
+ [0x001CE9, 0x001CEC],
+ [0x001CEE, 0x001CF3],
+ [0x001CF5, 0x001CF6],
+ [0x001D00, 0x001DBF],
+ [0x001DE7, 0x001DF4],
+ [0x001E00, 0x001F15],
+ [0x001F18, 0x001F1D],
+ [0x001F20, 0x001F45],
+ [0x001F48, 0x001F4D],
+ [0x001F50, 0x001F57],
+ [0x001F5F, 0x001F7D],
+ [0x001F80, 0x001FB4],
+ [0x001FB6, 0x001FBC],
+ [0x001FC2, 0x001FC4],
+ [0x001FC6, 0x001FCC],
+ [0x001FD0, 0x001FD3],
+ [0x001FD6, 0x001FDB],
+ [0x001FE0, 0x001FEC],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FFC],
+ [0x002090, 0x00209C],
+ [0x00210A, 0x002113],
+ [0x002119, 0x00211D],
+ [0x00212A, 0x00212D],
+ [0x00212F, 0x002139],
+ [0x00213C, 0x00213F],
+ [0x002145, 0x002149],
+ [0x002160, 0x002188],
+ [0x0024B6, 0x0024E9],
+ [0x002C00, 0x002CE4],
+ [0x002CEB, 0x002CEE],
+ [0x002CF2, 0x002CF3],
+ [0x002D00, 0x002D25],
+ [0x002D30, 0x002D67],
+ [0x002D80, 0x002D96],
+ [0x002DA0, 0x002DA6],
+ [0x002DA8, 0x002DAE],
+ [0x002DB0, 0x002DB6],
+ [0x002DB8, 0x002DBE],
+ [0x002DC0, 0x002DC6],
+ [0x002DC8, 0x002DCE],
+ [0x002DD0, 0x002DD6],
+ [0x002DD8, 0x002DDE],
+ [0x002DE0, 0x002DFF],
+ [0x003005, 0x003007],
+ [0x003021, 0x003029],
+ [0x003031, 0x003035],
+ [0x003038, 0x00303C],
+ [0x003041, 0x003096],
+ [0x00309D, 0x00309F],
+ [0x0030A1, 0x0030FA],
+ [0x0030FC, 0x0030FF],
+ [0x003105, 0x00312F],
+ [0x003131, 0x00318E],
+ [0x0031A0, 0x0031BF],
+ [0x0031F0, 0x0031FF],
+ [0x003400, 0x004DBF],
+ [0x004E00, 0x00A48C],
+ [0x00A4D0, 0x00A4FD],
+ [0x00A500, 0x00A60C],
+ [0x00A610, 0x00A61F],
+ [0x00A62A, 0x00A62B],
+ [0x00A640, 0x00A66E],
+ [0x00A674, 0x00A67B],
+ [0x00A67F, 0x00A6EF],
+ [0x00A717, 0x00A71F],
+ [0x00A722, 0x00A788],
+ [0x00A78B, 0x00A7CA],
+ [0x00A7D0, 0x00A7D1],
+ [0x00A7D5, 0x00A7D9],
+ [0x00A7F2, 0x00A805],
+ [0x00A807, 0x00A827],
+ [0x00A840, 0x00A873],
+ [0x00A880, 0x00A8C3],
+ [0x00A8F2, 0x00A8F7],
+ [0x00A8FD, 0x00A8FF],
+ [0x00A90A, 0x00A92A],
+ [0x00A930, 0x00A952],
+ [0x00A960, 0x00A97C],
+ [0x00A980, 0x00A9B2],
+ [0x00A9B4, 0x00A9BF],
+ [0x00A9E0, 0x00A9EF],
+ [0x00A9FA, 0x00A9FE],
+ [0x00AA00, 0x00AA36],
+ [0x00AA40, 0x00AA4D],
+ [0x00AA60, 0x00AA76],
+ [0x00AA7A, 0x00AABE],
+ [0x00AADB, 0x00AADD],
+ [0x00AAE0, 0x00AAEF],
+ [0x00AAF2, 0x00AAF5],
+ [0x00AB01, 0x00AB06],
+ [0x00AB09, 0x00AB0E],
+ [0x00AB11, 0x00AB16],
+ [0x00AB20, 0x00AB26],
+ [0x00AB28, 0x00AB2E],
+ [0x00AB30, 0x00AB5A],
+ [0x00AB5C, 0x00AB69],
+ [0x00AB70, 0x00ABEA],
+ [0x00AC00, 0x00D7A3],
+ [0x00D7B0, 0x00D7C6],
+ [0x00D7CB, 0x00D7FB],
+ [0x00F900, 0x00FA6D],
+ [0x00FA70, 0x00FAD9],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FB1D, 0x00FB28],
+ [0x00FB2A, 0x00FB36],
+ [0x00FB38, 0x00FB3C],
+ [0x00FB40, 0x00FB41],
+ [0x00FB43, 0x00FB44],
+ [0x00FB46, 0x00FBB1],
+ [0x00FBD3, 0x00FD3D],
+ [0x00FD50, 0x00FD8F],
+ [0x00FD92, 0x00FDC7],
+ [0x00FDF0, 0x00FDFB],
+ [0x00FE70, 0x00FE74],
+ [0x00FE76, 0x00FEFC],
+ [0x00FF21, 0x00FF3A],
+ [0x00FF41, 0x00FF5A],
+ [0x00FF66, 0x00FFBE],
+ [0x00FFC2, 0x00FFC7],
+ [0x00FFCA, 0x00FFCF],
+ [0x00FFD2, 0x00FFD7],
+ [0x00FFDA, 0x00FFDC],
+ [0x010000, 0x01000B],
+ [0x01000D, 0x010026],
+ [0x010028, 0x01003A],
+ [0x01003C, 0x01003D],
+ [0x01003F, 0x01004D],
+ [0x010050, 0x01005D],
+ [0x010080, 0x0100FA],
+ [0x010140, 0x010174],
+ [0x010280, 0x01029C],
+ [0x0102A0, 0x0102D0],
+ [0x010300, 0x01031F],
+ [0x01032D, 0x01034A],
+ [0x010350, 0x01037A],
+ [0x010380, 0x01039D],
+ [0x0103A0, 0x0103C3],
+ [0x0103C8, 0x0103CF],
+ [0x0103D1, 0x0103D5],
+ [0x010400, 0x01049D],
+ [0x0104B0, 0x0104D3],
+ [0x0104D8, 0x0104FB],
+ [0x010500, 0x010527],
+ [0x010530, 0x010563],
+ [0x010570, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC],
+ [0x010600, 0x010736],
+ [0x010740, 0x010755],
+ [0x010760, 0x010767],
+ [0x010780, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x010800, 0x010805],
+ [0x01080A, 0x010835],
+ [0x010837, 0x010838],
+ [0x01083F, 0x010855],
+ [0x010860, 0x010876],
+ [0x010880, 0x01089E],
+ [0x0108E0, 0x0108F2],
+ [0x0108F4, 0x0108F5],
+ [0x010900, 0x010915],
+ [0x010920, 0x010939],
+ [0x010980, 0x0109B7],
+ [0x0109BE, 0x0109BF],
+ [0x010A00, 0x010A03],
+ [0x010A05, 0x010A06],
+ [0x010A0C, 0x010A13],
+ [0x010A15, 0x010A17],
+ [0x010A19, 0x010A35],
+ [0x010A60, 0x010A7C],
+ [0x010A80, 0x010A9C],
+ [0x010AC0, 0x010AC7],
+ [0x010AC9, 0x010AE4],
+ [0x010B00, 0x010B35],
+ [0x010B40, 0x010B55],
+ [0x010B60, 0x010B72],
+ [0x010B80, 0x010B91],
+ [0x010C00, 0x010C48],
+ [0x010C80, 0x010CB2],
+ [0x010CC0, 0x010CF2],
+ [0x010D00, 0x010D27],
+ [0x010E80, 0x010EA9],
+ [0x010EAB, 0x010EAC],
+ [0x010EB0, 0x010EB1],
+ [0x010F00, 0x010F1C],
+ [0x010F30, 0x010F45],
+ [0x010F70, 0x010F81],
+ [0x010FB0, 0x010FC4],
+ [0x010FE0, 0x010FF6],
+ [0x011000, 0x011045],
+ [0x011071, 0x011075],
+ [0x011080, 0x0110B8],
+ [0x0110D0, 0x0110E8],
+ [0x011100, 0x011132],
+ [0x011144, 0x011147],
+ [0x011150, 0x011172],
+ [0x011180, 0x0111BF],
+ [0x0111C1, 0x0111C4],
+ [0x0111CE, 0x0111CF],
+ [0x011200, 0x011211],
+ [0x011213, 0x011234],
+ [0x01123E, 0x011241],
+ [0x011280, 0x011286],
+ [0x01128A, 0x01128D],
+ [0x01128F, 0x01129D],
+ [0x01129F, 0x0112A8],
+ [0x0112B0, 0x0112E8],
+ [0x011300, 0x011303],
+ [0x011305, 0x01130C],
+ [0x01130F, 0x011310],
+ [0x011313, 0x011328],
+ [0x01132A, 0x011330],
+ [0x011332, 0x011333],
+ [0x011335, 0x011339],
+ [0x01133D, 0x011344],
+ [0x011347, 0x011348],
+ [0x01134B, 0x01134C],
+ [0x01135D, 0x011363],
+ [0x011400, 0x011441],
+ [0x011443, 0x011445],
+ [0x011447, 0x01144A],
+ [0x01145F, 0x011461],
+ [0x011480, 0x0114C1],
+ [0x0114C4, 0x0114C5],
+ [0x011580, 0x0115B5],
+ [0x0115B8, 0x0115BE],
+ [0x0115D8, 0x0115DD],
+ [0x011600, 0x01163E],
+ [0x011680, 0x0116B5],
+ [0x011700, 0x01171A],
+ [0x01171D, 0x01172A],
+ [0x011740, 0x011746],
+ [0x011800, 0x011838],
+ [0x0118A0, 0x0118DF],
+ [0x0118FF, 0x011906],
+ [0x01190C, 0x011913],
+ [0x011915, 0x011916],
+ [0x011918, 0x011935],
+ [0x011937, 0x011938],
+ [0x01193B, 0x01193C],
+ [0x01193F, 0x011942],
+ [0x0119A0, 0x0119A7],
+ [0x0119AA, 0x0119D7],
+ [0x0119DA, 0x0119DF],
+ [0x0119E3, 0x0119E4],
+ [0x011A00, 0x011A32],
+ [0x011A35, 0x011A3E],
+ [0x011A50, 0x011A97],
+ [0x011AB0, 0x011AF8],
+ [0x011C00, 0x011C08],
+ [0x011C0A, 0x011C36],
+ [0x011C38, 0x011C3E],
+ [0x011C72, 0x011C8F],
+ [0x011C92, 0x011CA7],
+ [0x011CA9, 0x011CB6],
+ [0x011D00, 0x011D06],
+ [0x011D08, 0x011D09],
+ [0x011D0B, 0x011D36],
+ [0x011D3C, 0x011D3D],
+ [0x011D3F, 0x011D41],
+ [0x011D46, 0x011D47],
+ [0x011D60, 0x011D65],
+ [0x011D67, 0x011D68],
+ [0x011D6A, 0x011D8E],
+ [0x011D90, 0x011D91],
+ [0x011D93, 0x011D96],
+ [0x011EE0, 0x011EF6],
+ [0x011F00, 0x011F10],
+ [0x011F12, 0x011F3A],
+ [0x011F3E, 0x011F40],
+ [0x012000, 0x012399],
+ [0x012400, 0x01246E],
+ [0x012480, 0x012543],
+ [0x012F90, 0x012FF0],
+ [0x013000, 0x01342F],
+ [0x013441, 0x013446],
+ [0x014400, 0x014646],
+ [0x016800, 0x016A38],
+ [0x016A40, 0x016A5E],
+ [0x016A70, 0x016ABE],
+ [0x016AD0, 0x016AED],
+ [0x016B00, 0x016B2F],
+ [0x016B40, 0x016B43],
+ [0x016B63, 0x016B77],
+ [0x016B7D, 0x016B8F],
+ [0x016E40, 0x016E7F],
+ [0x016F00, 0x016F4A],
+ [0x016F4F, 0x016F87],
+ [0x016F8F, 0x016F9F],
+ [0x016FE0, 0x016FE1],
+ [0x016FF0, 0x016FF1],
+ [0x017000, 0x0187F7],
+ [0x018800, 0x018CD5],
+ [0x018D00, 0x018D08],
+ [0x01AFF0, 0x01AFF3],
+ [0x01AFF5, 0x01AFFB],
+ [0x01AFFD, 0x01AFFE],
+ [0x01B000, 0x01B122],
+ [0x01B150, 0x01B152],
+ [0x01B164, 0x01B167],
+ [0x01B170, 0x01B2FB],
+ [0x01BC00, 0x01BC6A],
+ [0x01BC70, 0x01BC7C],
+ [0x01BC80, 0x01BC88],
+ [0x01BC90, 0x01BC99],
+ [0x01D400, 0x01D454],
+ [0x01D456, 0x01D49C],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D51E, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D552, 0x01D6A5],
+ [0x01D6A8, 0x01D6C0],
+ [0x01D6C2, 0x01D6DA],
+ [0x01D6DC, 0x01D6FA],
+ [0x01D6FC, 0x01D714],
+ [0x01D716, 0x01D734],
+ [0x01D736, 0x01D74E],
+ [0x01D750, 0x01D76E],
+ [0x01D770, 0x01D788],
+ [0x01D78A, 0x01D7A8],
+ [0x01D7AA, 0x01D7C2],
+ [0x01D7C4, 0x01D7CB],
+ [0x01DF00, 0x01DF1E],
+ [0x01DF25, 0x01DF2A],
+ [0x01E000, 0x01E006],
+ [0x01E008, 0x01E018],
+ [0x01E01B, 0x01E021],
+ [0x01E023, 0x01E024],
+ [0x01E026, 0x01E02A],
+ [0x01E030, 0x01E06D],
+ [0x01E100, 0x01E12C],
+ [0x01E137, 0x01E13D],
+ [0x01E290, 0x01E2AD],
+ [0x01E2C0, 0x01E2EB],
+ [0x01E4D0, 0x01E4EB],
+ [0x01E7E0, 0x01E7E6],
+ [0x01E7E8, 0x01E7EB],
+ [0x01E7ED, 0x01E7EE],
+ [0x01E7F0, 0x01E7FE],
+ [0x01E800, 0x01E8C4],
+ [0x01E900, 0x01E943],
+ [0x01EE00, 0x01EE03],
+ [0x01EE05, 0x01EE1F],
+ [0x01EE21, 0x01EE22],
+ [0x01EE29, 0x01EE32],
+ [0x01EE34, 0x01EE37],
+ [0x01EE4D, 0x01EE4F],
+ [0x01EE51, 0x01EE52],
+ [0x01EE61, 0x01EE62],
+ [0x01EE67, 0x01EE6A],
+ [0x01EE6C, 0x01EE72],
+ [0x01EE74, 0x01EE77],
+ [0x01EE79, 0x01EE7C],
+ [0x01EE80, 0x01EE89],
+ [0x01EE8B, 0x01EE9B],
+ [0x01EEA1, 0x01EEA3],
+ [0x01EEA5, 0x01EEA9],
+ [0x01EEAB, 0x01EEBB],
+ [0x01F130, 0x01F149],
+ [0x01F150, 0x01F169],
+ [0x01F170, 0x01F189],
+ [0x020000, 0x02A6DF],
+ [0x02A700, 0x02B739],
+ [0x02B740, 0x02B81D],
+ [0x02B820, 0x02CEA1],
+ [0x02CEB0, 0x02EBE0],
+ [0x02F800, 0x02FA1D],
+ [0x030000, 0x03134A],
+ [0x031350, 0x0323AF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Alphabetic}+$/u,
+ matchSymbols,
+ "\\p{Alphabetic}"
+);
+testPropertyEscapes(
+ /^\p{Alpha}+$/u,
+ matchSymbols,
+ "\\p{Alpha}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000D7,
+ 0x0000F7,
+ 0x0002ED,
+ 0x000375,
+ 0x00037E,
+ 0x000387,
+ 0x00038B,
+ 0x00038D,
+ 0x0003A2,
+ 0x0003F6,
+ 0x000530,
+ 0x0005BE,
+ 0x0005C0,
+ 0x0005C3,
+ 0x0005C6,
+ 0x000658,
+ 0x0006D4,
+ 0x000888,
+ 0x00093C,
+ 0x00094D,
+ 0x000984,
+ 0x0009A9,
+ 0x0009B1,
+ 0x0009CD,
+ 0x0009DE,
+ 0x000A04,
+ 0x000A29,
+ 0x000A31,
+ 0x000A34,
+ 0x000A37,
+ 0x000A5D,
+ 0x000A84,
+ 0x000A8E,
+ 0x000A92,
+ 0x000AA9,
+ 0x000AB1,
+ 0x000AB4,
+ 0x000AC6,
+ 0x000ACA,
+ 0x000B04,
+ 0x000B29,
+ 0x000B31,
+ 0x000B34,
+ 0x000B5E,
+ 0x000B84,
+ 0x000B91,
+ 0x000B9B,
+ 0x000B9D,
+ 0x000BC9,
+ 0x000C0D,
+ 0x000C11,
+ 0x000C29,
+ 0x000C45,
+ 0x000C49,
+ 0x000C57,
+ 0x000C84,
+ 0x000C8D,
+ 0x000C91,
+ 0x000CA9,
+ 0x000CB4,
+ 0x000CC5,
+ 0x000CC9,
+ 0x000CDF,
+ 0x000D0D,
+ 0x000D11,
+ 0x000D45,
+ 0x000D49,
+ 0x000D4D,
+ 0x000D80,
+ 0x000D84,
+ 0x000DB2,
+ 0x000DBC,
+ 0x000DD5,
+ 0x000DD7,
+ 0x000E83,
+ 0x000E85,
+ 0x000E8B,
+ 0x000EA4,
+ 0x000EA6,
+ 0x000EBA,
+ 0x000EC5,
+ 0x000F48,
+ 0x000F98,
+ 0x001037,
+ 0x0010C6,
+ 0x0010FB,
+ 0x001249,
+ 0x001257,
+ 0x001259,
+ 0x001289,
+ 0x0012B1,
+ 0x0012BF,
+ 0x0012C1,
+ 0x0012D7,
+ 0x001311,
+ 0x001680,
+ 0x00176D,
+ 0x001771,
+ 0x00191F,
+ 0x001B34,
+ 0x001B44,
+ 0x001BE6,
+ 0x001CED,
+ 0x001CF4,
+ 0x001F58,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x001FB5,
+ 0x001FBD,
+ 0x001FC5,
+ 0x001FF5,
+ 0x002114,
+ 0x002125,
+ 0x002127,
+ 0x002129,
+ 0x00212E,
+ 0x002D26,
+ 0x002DA7,
+ 0x002DAF,
+ 0x002DB7,
+ 0x002DBF,
+ 0x002DC7,
+ 0x002DCF,
+ 0x002DD7,
+ 0x002DDF,
+ 0x0030A0,
+ 0x0030FB,
+ 0x003130,
+ 0x00A7D2,
+ 0x00A7D4,
+ 0x00A806,
+ 0x00A8C4,
+ 0x00A8FC,
+ 0x00A9B3,
+ 0x00A9FF,
+ 0x00AABF,
+ 0x00AAC1,
+ 0x00AB27,
+ 0x00AB2F,
+ 0x00AB5B,
+ 0x00FB29,
+ 0x00FB37,
+ 0x00FB3D,
+ 0x00FB3F,
+ 0x00FB42,
+ 0x00FB45,
+ 0x00FE75,
+ 0x01000C,
+ 0x010027,
+ 0x01003B,
+ 0x01003E,
+ 0x0103D0,
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x010596,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA,
+ 0x010786,
+ 0x0107B1,
+ 0x010809,
+ 0x010836,
+ 0x0108F3,
+ 0x010A04,
+ 0x010A14,
+ 0x010A18,
+ 0x010AC8,
+ 0x010EAA,
+ 0x0111C0,
+ 0x0111DB,
+ 0x011212,
+ 0x011287,
+ 0x011289,
+ 0x01128E,
+ 0x01129E,
+ 0x011304,
+ 0x011329,
+ 0x011331,
+ 0x011334,
+ 0x011442,
+ 0x011446,
+ 0x0114C6,
+ 0x01163F,
+ 0x011914,
+ 0x011917,
+ 0x011936,
+ 0x0119E0,
+ 0x0119E2,
+ 0x011C09,
+ 0x011C37,
+ 0x011C3F,
+ 0x011CA8,
+ 0x011D07,
+ 0x011D0A,
+ 0x011D3B,
+ 0x011D3E,
+ 0x011D42,
+ 0x011D66,
+ 0x011D69,
+ 0x011D8F,
+ 0x011D92,
+ 0x011D97,
+ 0x011F11,
+ 0x016FE2,
+ 0x01AFF4,
+ 0x01AFFC,
+ 0x01AFFF,
+ 0x01D455,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D506,
+ 0x01D515,
+ 0x01D51D,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545,
+ 0x01D551,
+ 0x01D6C1,
+ 0x01D6DB,
+ 0x01D6FB,
+ 0x01D715,
+ 0x01D735,
+ 0x01D74F,
+ 0x01D76F,
+ 0x01D789,
+ 0x01D7A9,
+ 0x01D7C3,
+ 0x01E007,
+ 0x01E022,
+ 0x01E025,
+ 0x01E7E7,
+ 0x01E7EC,
+ 0x01E7EF,
+ 0x01E7FF,
+ 0x01EE04,
+ 0x01EE20,
+ 0x01EE23,
+ 0x01EE28,
+ 0x01EE33,
+ 0x01EE38,
+ 0x01EE3A,
+ 0x01EE48,
+ 0x01EE4A,
+ 0x01EE4C,
+ 0x01EE50,
+ 0x01EE53,
+ 0x01EE58,
+ 0x01EE5A,
+ 0x01EE5C,
+ 0x01EE5E,
+ 0x01EE60,
+ 0x01EE63,
+ 0x01EE6B,
+ 0x01EE73,
+ 0x01EE78,
+ 0x01EE7D,
+ 0x01EE7F,
+ 0x01EE8A,
+ 0x01EEA4,
+ 0x01EEAA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000040],
+ [0x00005B, 0x000060],
+ [0x00007B, 0x0000A9],
+ [0x0000AB, 0x0000B4],
+ [0x0000B6, 0x0000B9],
+ [0x0000BB, 0x0000BF],
+ [0x0002C2, 0x0002C5],
+ [0x0002D2, 0x0002DF],
+ [0x0002E5, 0x0002EB],
+ [0x0002EF, 0x000344],
+ [0x000346, 0x00036F],
+ [0x000378, 0x000379],
+ [0x000380, 0x000385],
+ [0x000482, 0x000489],
+ [0x000557, 0x000558],
+ [0x00055A, 0x00055F],
+ [0x000589, 0x0005AF],
+ [0x0005C8, 0x0005CF],
+ [0x0005EB, 0x0005EE],
+ [0x0005F3, 0x00060F],
+ [0x00061B, 0x00061F],
+ [0x000660, 0x00066D],
+ [0x0006DD, 0x0006E0],
+ [0x0006E9, 0x0006EC],
+ [0x0006F0, 0x0006F9],
+ [0x0006FD, 0x0006FE],
+ [0x000700, 0x00070F],
+ [0x000740, 0x00074C],
+ [0x0007B2, 0x0007C9],
+ [0x0007EB, 0x0007F3],
+ [0x0007F6, 0x0007F9],
+ [0x0007FB, 0x0007FF],
+ [0x000818, 0x000819],
+ [0x00082D, 0x00083F],
+ [0x000859, 0x00085F],
+ [0x00086B, 0x00086F],
+ [0x00088F, 0x00089F],
+ [0x0008CA, 0x0008D3],
+ [0x0008E0, 0x0008E2],
+ [0x0008EA, 0x0008EF],
+ [0x000951, 0x000954],
+ [0x000964, 0x000970],
+ [0x00098D, 0x00098E],
+ [0x000991, 0x000992],
+ [0x0009B3, 0x0009B5],
+ [0x0009BA, 0x0009BC],
+ [0x0009C5, 0x0009C6],
+ [0x0009C9, 0x0009CA],
+ [0x0009CF, 0x0009D6],
+ [0x0009D8, 0x0009DB],
+ [0x0009E4, 0x0009EF],
+ [0x0009F2, 0x0009FB],
+ [0x0009FD, 0x000A00],
+ [0x000A0B, 0x000A0E],
+ [0x000A11, 0x000A12],
+ [0x000A3A, 0x000A3D],
+ [0x000A43, 0x000A46],
+ [0x000A49, 0x000A4A],
+ [0x000A4D, 0x000A50],
+ [0x000A52, 0x000A58],
+ [0x000A5F, 0x000A6F],
+ [0x000A76, 0x000A80],
+ [0x000ABA, 0x000ABC],
+ [0x000ACD, 0x000ACF],
+ [0x000AD1, 0x000ADF],
+ [0x000AE4, 0x000AF8],
+ [0x000AFD, 0x000B00],
+ [0x000B0D, 0x000B0E],
+ [0x000B11, 0x000B12],
+ [0x000B3A, 0x000B3C],
+ [0x000B45, 0x000B46],
+ [0x000B49, 0x000B4A],
+ [0x000B4D, 0x000B55],
+ [0x000B58, 0x000B5B],
+ [0x000B64, 0x000B70],
+ [0x000B72, 0x000B81],
+ [0x000B8B, 0x000B8D],
+ [0x000B96, 0x000B98],
+ [0x000BA0, 0x000BA2],
+ [0x000BA5, 0x000BA7],
+ [0x000BAB, 0x000BAD],
+ [0x000BBA, 0x000BBD],
+ [0x000BC3, 0x000BC5],
+ [0x000BCD, 0x000BCF],
+ [0x000BD1, 0x000BD6],
+ [0x000BD8, 0x000BFF],
+ [0x000C3A, 0x000C3C],
+ [0x000C4D, 0x000C54],
+ [0x000C5B, 0x000C5C],
+ [0x000C5E, 0x000C5F],
+ [0x000C64, 0x000C7F],
+ [0x000CBA, 0x000CBC],
+ [0x000CCD, 0x000CD4],
+ [0x000CD7, 0x000CDC],
+ [0x000CE4, 0x000CF0],
+ [0x000CF4, 0x000CFF],
+ [0x000D3B, 0x000D3C],
+ [0x000D4F, 0x000D53],
+ [0x000D58, 0x000D5E],
+ [0x000D64, 0x000D79],
+ [0x000D97, 0x000D99],
+ [0x000DBE, 0x000DBF],
+ [0x000DC7, 0x000DCE],
+ [0x000DE0, 0x000DF1],
+ [0x000DF4, 0x000E00],
+ [0x000E3B, 0x000E3F],
+ [0x000E47, 0x000E4C],
+ [0x000E4E, 0x000E80],
+ [0x000EBE, 0x000EBF],
+ [0x000EC7, 0x000ECC],
+ [0x000ECE, 0x000EDB],
+ [0x000EE0, 0x000EFF],
+ [0x000F01, 0x000F3F],
+ [0x000F6D, 0x000F70],
+ [0x000F84, 0x000F87],
+ [0x000FBD, 0x000FFF],
+ [0x001039, 0x00103A],
+ [0x001040, 0x00104F],
+ [0x001090, 0x001099],
+ [0x00109E, 0x00109F],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x0010CF],
+ [0x00124E, 0x00124F],
+ [0x00125E, 0x00125F],
+ [0x00128E, 0x00128F],
+ [0x0012B6, 0x0012B7],
+ [0x0012C6, 0x0012C7],
+ [0x001316, 0x001317],
+ [0x00135B, 0x00137F],
+ [0x001390, 0x00139F],
+ [0x0013F6, 0x0013F7],
+ [0x0013FE, 0x001400],
+ [0x00166D, 0x00166E],
+ [0x00169B, 0x00169F],
+ [0x0016EB, 0x0016ED],
+ [0x0016F9, 0x0016FF],
+ [0x001714, 0x00171E],
+ [0x001734, 0x00173F],
+ [0x001754, 0x00175F],
+ [0x001774, 0x00177F],
+ [0x0017B4, 0x0017B5],
+ [0x0017C9, 0x0017D6],
+ [0x0017D8, 0x0017DB],
+ [0x0017DD, 0x00181F],
+ [0x001879, 0x00187F],
+ [0x0018AB, 0x0018AF],
+ [0x0018F6, 0x0018FF],
+ [0x00192C, 0x00192F],
+ [0x001939, 0x00194F],
+ [0x00196E, 0x00196F],
+ [0x001975, 0x00197F],
+ [0x0019AC, 0x0019AF],
+ [0x0019CA, 0x0019FF],
+ [0x001A1C, 0x001A1F],
+ [0x001A5F, 0x001A60],
+ [0x001A75, 0x001AA6],
+ [0x001AA8, 0x001ABE],
+ [0x001AC1, 0x001ACB],
+ [0x001ACF, 0x001AFF],
+ [0x001B4D, 0x001B7F],
+ [0x001BAA, 0x001BAB],
+ [0x001BB0, 0x001BB9],
+ [0x001BF2, 0x001BFF],
+ [0x001C37, 0x001C4C],
+ [0x001C50, 0x001C59],
+ [0x001C7E, 0x001C7F],
+ [0x001C89, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC0, 0x001CE8],
+ [0x001CF7, 0x001CF9],
+ [0x001CFB, 0x001CFF],
+ [0x001DC0, 0x001DE6],
+ [0x001DF5, 0x001DFF],
+ [0x001F16, 0x001F17],
+ [0x001F1E, 0x001F1F],
+ [0x001F46, 0x001F47],
+ [0x001F4E, 0x001F4F],
+ [0x001F7E, 0x001F7F],
+ [0x001FBF, 0x001FC1],
+ [0x001FCD, 0x001FCF],
+ [0x001FD4, 0x001FD5],
+ [0x001FDC, 0x001FDF],
+ [0x001FED, 0x001FF1],
+ [0x001FFD, 0x002070],
+ [0x002072, 0x00207E],
+ [0x002080, 0x00208F],
+ [0x00209D, 0x002101],
+ [0x002103, 0x002106],
+ [0x002108, 0x002109],
+ [0x002116, 0x002118],
+ [0x00211E, 0x002123],
+ [0x00213A, 0x00213B],
+ [0x002140, 0x002144],
+ [0x00214A, 0x00214D],
+ [0x00214F, 0x00215F],
+ [0x002189, 0x0024B5],
+ [0x0024EA, 0x002BFF],
+ [0x002CE5, 0x002CEA],
+ [0x002CEF, 0x002CF1],
+ [0x002CF4, 0x002CFF],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x002D2F],
+ [0x002D68, 0x002D6E],
+ [0x002D70, 0x002D7F],
+ [0x002D97, 0x002D9F],
+ [0x002E00, 0x002E2E],
+ [0x002E30, 0x003004],
+ [0x003008, 0x003020],
+ [0x00302A, 0x003030],
+ [0x003036, 0x003037],
+ [0x00303D, 0x003040],
+ [0x003097, 0x00309C],
+ [0x003100, 0x003104],
+ [0x00318F, 0x00319F],
+ [0x0031C0, 0x0031EF],
+ [0x003200, 0x0033FF],
+ [0x004DC0, 0x004DFF],
+ [0x00A48D, 0x00A4CF],
+ [0x00A4FE, 0x00A4FF],
+ [0x00A60D, 0x00A60F],
+ [0x00A620, 0x00A629],
+ [0x00A62C, 0x00A63F],
+ [0x00A66F, 0x00A673],
+ [0x00A67C, 0x00A67E],
+ [0x00A6F0, 0x00A716],
+ [0x00A720, 0x00A721],
+ [0x00A789, 0x00A78A],
+ [0x00A7CB, 0x00A7CF],
+ [0x00A7DA, 0x00A7F1],
+ [0x00A828, 0x00A83F],
+ [0x00A874, 0x00A87F],
+ [0x00A8C6, 0x00A8F1],
+ [0x00A8F8, 0x00A8FA],
+ [0x00A900, 0x00A909],
+ [0x00A92B, 0x00A92F],
+ [0x00A953, 0x00A95F],
+ [0x00A97D, 0x00A97F],
+ [0x00A9C0, 0x00A9CE],
+ [0x00A9D0, 0x00A9DF],
+ [0x00A9F0, 0x00A9F9],
+ [0x00AA37, 0x00AA3F],
+ [0x00AA4E, 0x00AA5F],
+ [0x00AA77, 0x00AA79],
+ [0x00AAC3, 0x00AADA],
+ [0x00AADE, 0x00AADF],
+ [0x00AAF0, 0x00AAF1],
+ [0x00AAF6, 0x00AB00],
+ [0x00AB07, 0x00AB08],
+ [0x00AB0F, 0x00AB10],
+ [0x00AB17, 0x00AB1F],
+ [0x00AB6A, 0x00AB6F],
+ [0x00ABEB, 0x00ABFF],
+ [0x00D7A4, 0x00D7AF],
+ [0x00D7C7, 0x00D7CA],
+ [0x00D7FC, 0x00DBFF],
+ [0x00E000, 0x00F8FF],
+ [0x00FA6E, 0x00FA6F],
+ [0x00FADA, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FB1C],
+ [0x00FBB2, 0x00FBD2],
+ [0x00FD3E, 0x00FD4F],
+ [0x00FD90, 0x00FD91],
+ [0x00FDC8, 0x00FDEF],
+ [0x00FDFC, 0x00FE6F],
+ [0x00FEFD, 0x00FF20],
+ [0x00FF3B, 0x00FF40],
+ [0x00FF5B, 0x00FF65],
+ [0x00FFBF, 0x00FFC1],
+ [0x00FFC8, 0x00FFC9],
+ [0x00FFD0, 0x00FFD1],
+ [0x00FFD8, 0x00FFD9],
+ [0x00FFDD, 0x00FFFF],
+ [0x01004E, 0x01004F],
+ [0x01005E, 0x01007F],
+ [0x0100FB, 0x01013F],
+ [0x010175, 0x01027F],
+ [0x01029D, 0x01029F],
+ [0x0102D1, 0x0102FF],
+ [0x010320, 0x01032C],
+ [0x01034B, 0x01034F],
+ [0x01037B, 0x01037F],
+ [0x01039E, 0x01039F],
+ [0x0103C4, 0x0103C7],
+ [0x0103D6, 0x0103FF],
+ [0x01049E, 0x0104AF],
+ [0x0104D4, 0x0104D7],
+ [0x0104FC, 0x0104FF],
+ [0x010528, 0x01052F],
+ [0x010564, 0x01056F],
+ [0x0105BD, 0x0105FF],
+ [0x010737, 0x01073F],
+ [0x010756, 0x01075F],
+ [0x010768, 0x01077F],
+ [0x0107BB, 0x0107FF],
+ [0x010806, 0x010807],
+ [0x010839, 0x01083B],
+ [0x01083D, 0x01083E],
+ [0x010856, 0x01085F],
+ [0x010877, 0x01087F],
+ [0x01089F, 0x0108DF],
+ [0x0108F6, 0x0108FF],
+ [0x010916, 0x01091F],
+ [0x01093A, 0x01097F],
+ [0x0109B8, 0x0109BD],
+ [0x0109C0, 0x0109FF],
+ [0x010A07, 0x010A0B],
+ [0x010A36, 0x010A5F],
+ [0x010A7D, 0x010A7F],
+ [0x010A9D, 0x010ABF],
+ [0x010AE5, 0x010AFF],
+ [0x010B36, 0x010B3F],
+ [0x010B56, 0x010B5F],
+ [0x010B73, 0x010B7F],
+ [0x010B92, 0x010BFF],
+ [0x010C49, 0x010C7F],
+ [0x010CB3, 0x010CBF],
+ [0x010CF3, 0x010CFF],
+ [0x010D28, 0x010E7F],
+ [0x010EAD, 0x010EAF],
+ [0x010EB2, 0x010EFF],
+ [0x010F1D, 0x010F26],
+ [0x010F28, 0x010F2F],
+ [0x010F46, 0x010F6F],
+ [0x010F82, 0x010FAF],
+ [0x010FC5, 0x010FDF],
+ [0x010FF7, 0x010FFF],
+ [0x011046, 0x011070],
+ [0x011076, 0x01107F],
+ [0x0110B9, 0x0110C1],
+ [0x0110C3, 0x0110CF],
+ [0x0110E9, 0x0110FF],
+ [0x011133, 0x011143],
+ [0x011148, 0x01114F],
+ [0x011173, 0x011175],
+ [0x011177, 0x01117F],
+ [0x0111C5, 0x0111CD],
+ [0x0111D0, 0x0111D9],
+ [0x0111DD, 0x0111FF],
+ [0x011235, 0x011236],
+ [0x011238, 0x01123D],
+ [0x011242, 0x01127F],
+ [0x0112A9, 0x0112AF],
+ [0x0112E9, 0x0112FF],
+ [0x01130D, 0x01130E],
+ [0x011311, 0x011312],
+ [0x01133A, 0x01133C],
+ [0x011345, 0x011346],
+ [0x011349, 0x01134A],
+ [0x01134D, 0x01134F],
+ [0x011351, 0x011356],
+ [0x011358, 0x01135C],
+ [0x011364, 0x0113FF],
+ [0x01144B, 0x01145E],
+ [0x011462, 0x01147F],
+ [0x0114C2, 0x0114C3],
+ [0x0114C8, 0x01157F],
+ [0x0115B6, 0x0115B7],
+ [0x0115BF, 0x0115D7],
+ [0x0115DE, 0x0115FF],
+ [0x011641, 0x011643],
+ [0x011645, 0x01167F],
+ [0x0116B6, 0x0116B7],
+ [0x0116B9, 0x0116FF],
+ [0x01171B, 0x01171C],
+ [0x01172B, 0x01173F],
+ [0x011747, 0x0117FF],
+ [0x011839, 0x01189F],
+ [0x0118E0, 0x0118FE],
+ [0x011907, 0x011908],
+ [0x01190A, 0x01190B],
+ [0x011939, 0x01193A],
+ [0x01193D, 0x01193E],
+ [0x011943, 0x01199F],
+ [0x0119A8, 0x0119A9],
+ [0x0119D8, 0x0119D9],
+ [0x0119E5, 0x0119FF],
+ [0x011A33, 0x011A34],
+ [0x011A3F, 0x011A4F],
+ [0x011A98, 0x011A9C],
+ [0x011A9E, 0x011AAF],
+ [0x011AF9, 0x011BFF],
+ [0x011C41, 0x011C71],
+ [0x011C90, 0x011C91],
+ [0x011CB7, 0x011CFF],
+ [0x011D37, 0x011D39],
+ [0x011D44, 0x011D45],
+ [0x011D48, 0x011D5F],
+ [0x011D99, 0x011EDF],
+ [0x011EF7, 0x011EFF],
+ [0x011F3B, 0x011F3D],
+ [0x011F41, 0x011FAF],
+ [0x011FB1, 0x011FFF],
+ [0x01239A, 0x0123FF],
+ [0x01246F, 0x01247F],
+ [0x012544, 0x012F8F],
+ [0x012FF1, 0x012FFF],
+ [0x013430, 0x013440],
+ [0x013447, 0x0143FF],
+ [0x014647, 0x0167FF],
+ [0x016A39, 0x016A3F],
+ [0x016A5F, 0x016A6F],
+ [0x016ABF, 0x016ACF],
+ [0x016AEE, 0x016AFF],
+ [0x016B30, 0x016B3F],
+ [0x016B44, 0x016B62],
+ [0x016B78, 0x016B7C],
+ [0x016B90, 0x016E3F],
+ [0x016E80, 0x016EFF],
+ [0x016F4B, 0x016F4E],
+ [0x016F88, 0x016F8E],
+ [0x016FA0, 0x016FDF],
+ [0x016FE4, 0x016FEF],
+ [0x016FF2, 0x016FFF],
+ [0x0187F8, 0x0187FF],
+ [0x018CD6, 0x018CFF],
+ [0x018D09, 0x01AFEF],
+ [0x01B123, 0x01B131],
+ [0x01B133, 0x01B14F],
+ [0x01B153, 0x01B154],
+ [0x01B156, 0x01B163],
+ [0x01B168, 0x01B16F],
+ [0x01B2FC, 0x01BBFF],
+ [0x01BC6B, 0x01BC6F],
+ [0x01BC7D, 0x01BC7F],
+ [0x01BC89, 0x01BC8F],
+ [0x01BC9A, 0x01BC9D],
+ [0x01BC9F, 0x01D3FF],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D50B, 0x01D50C],
+ [0x01D547, 0x01D549],
+ [0x01D6A6, 0x01D6A7],
+ [0x01D7CC, 0x01DEFF],
+ [0x01DF1F, 0x01DF24],
+ [0x01DF2B, 0x01DFFF],
+ [0x01E019, 0x01E01A],
+ [0x01E02B, 0x01E02F],
+ [0x01E06E, 0x01E08E],
+ [0x01E090, 0x01E0FF],
+ [0x01E12D, 0x01E136],
+ [0x01E13E, 0x01E14D],
+ [0x01E14F, 0x01E28F],
+ [0x01E2AE, 0x01E2BF],
+ [0x01E2EC, 0x01E4CF],
+ [0x01E4EC, 0x01E7DF],
+ [0x01E8C5, 0x01E8FF],
+ [0x01E944, 0x01E946],
+ [0x01E948, 0x01E94A],
+ [0x01E94C, 0x01EDFF],
+ [0x01EE25, 0x01EE26],
+ [0x01EE3C, 0x01EE41],
+ [0x01EE43, 0x01EE46],
+ [0x01EE55, 0x01EE56],
+ [0x01EE65, 0x01EE66],
+ [0x01EE9C, 0x01EEA0],
+ [0x01EEBC, 0x01F12F],
+ [0x01F14A, 0x01F14F],
+ [0x01F16A, 0x01F16F],
+ [0x01F18A, 0x01FFFF],
+ [0x02A6E0, 0x02A6FF],
+ [0x02B73A, 0x02B73F],
+ [0x02B81E, 0x02B81F],
+ [0x02CEA2, 0x02CEAF],
+ [0x02EBE1, 0x02F7FF],
+ [0x02FA1E, 0x02FFFF],
+ [0x03134B, 0x03134F],
+ [0x0323B0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Alphabetic}+$/u,
+ nonMatchSymbols,
+ "\\P{Alphabetic}"
+);
+testPropertyEscapes(
+ /^\P{Alpha}+$/u,
+ nonMatchSymbols,
+ "\\P{Alpha}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Any.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Any.js
new file mode 100644
index 0000000000..7eeffb6271
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Any.js
@@ -0,0 +1,35 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Any`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Any}+$/u,
+ matchSymbols,
+ "\\p{Any}"
+);
+
+assert(
+ !/\P{Any}/u.test(""),
+ "`\\P{Any}` should match nothing (not even the empty string)"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Assigned.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Assigned.js
new file mode 100644
index 0000000000..b7327329fb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Assigned.js
@@ -0,0 +1,1456 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Assigned`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00038C,
+ 0x00085E,
+ 0x0009B2,
+ 0x0009D7,
+ 0x000A3C,
+ 0x000A51,
+ 0x000A5E,
+ 0x000AD0,
+ 0x000B9C,
+ 0x000BD0,
+ 0x000BD7,
+ 0x000C5D,
+ 0x000DBD,
+ 0x000DCA,
+ 0x000DD6,
+ 0x000E84,
+ 0x000EA5,
+ 0x000EC6,
+ 0x0010C7,
+ 0x0010CD,
+ 0x001258,
+ 0x0012C0,
+ 0x001940,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x002D27,
+ 0x002D2D,
+ 0x00A7D3,
+ 0x00FB3E,
+ 0x00FDCF,
+ 0x00FEFF,
+ 0x0101A0,
+ 0x010808,
+ 0x01083C,
+ 0x01093F,
+ 0x0110CD,
+ 0x011288,
+ 0x011350,
+ 0x011357,
+ 0x011909,
+ 0x011D3A,
+ 0x011FB0,
+ 0x01B132,
+ 0x01B155,
+ 0x01D4A2,
+ 0x01D4BB,
+ 0x01D546,
+ 0x01E08F,
+ 0x01E2FF,
+ 0x01EE24,
+ 0x01EE27,
+ 0x01EE39,
+ 0x01EE3B,
+ 0x01EE42,
+ 0x01EE47,
+ 0x01EE49,
+ 0x01EE4B,
+ 0x01EE54,
+ 0x01EE57,
+ 0x01EE59,
+ 0x01EE5B,
+ 0x01EE5D,
+ 0x01EE5F,
+ 0x01EE64,
+ 0x01EE7E,
+ 0x01F7F0,
+ 0x0E0001
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000377],
+ [0x00037A, 0x00037F],
+ [0x000384, 0x00038A],
+ [0x00038E, 0x0003A1],
+ [0x0003A3, 0x00052F],
+ [0x000531, 0x000556],
+ [0x000559, 0x00058A],
+ [0x00058D, 0x00058F],
+ [0x000591, 0x0005C7],
+ [0x0005D0, 0x0005EA],
+ [0x0005EF, 0x0005F4],
+ [0x000600, 0x00070D],
+ [0x00070F, 0x00074A],
+ [0x00074D, 0x0007B1],
+ [0x0007C0, 0x0007FA],
+ [0x0007FD, 0x00082D],
+ [0x000830, 0x00083E],
+ [0x000840, 0x00085B],
+ [0x000860, 0x00086A],
+ [0x000870, 0x00088E],
+ [0x000890, 0x000891],
+ [0x000898, 0x000983],
+ [0x000985, 0x00098C],
+ [0x00098F, 0x000990],
+ [0x000993, 0x0009A8],
+ [0x0009AA, 0x0009B0],
+ [0x0009B6, 0x0009B9],
+ [0x0009BC, 0x0009C4],
+ [0x0009C7, 0x0009C8],
+ [0x0009CB, 0x0009CE],
+ [0x0009DC, 0x0009DD],
+ [0x0009DF, 0x0009E3],
+ [0x0009E6, 0x0009FE],
+ [0x000A01, 0x000A03],
+ [0x000A05, 0x000A0A],
+ [0x000A0F, 0x000A10],
+ [0x000A13, 0x000A28],
+ [0x000A2A, 0x000A30],
+ [0x000A32, 0x000A33],
+ [0x000A35, 0x000A36],
+ [0x000A38, 0x000A39],
+ [0x000A3E, 0x000A42],
+ [0x000A47, 0x000A48],
+ [0x000A4B, 0x000A4D],
+ [0x000A59, 0x000A5C],
+ [0x000A66, 0x000A76],
+ [0x000A81, 0x000A83],
+ [0x000A85, 0x000A8D],
+ [0x000A8F, 0x000A91],
+ [0x000A93, 0x000AA8],
+ [0x000AAA, 0x000AB0],
+ [0x000AB2, 0x000AB3],
+ [0x000AB5, 0x000AB9],
+ [0x000ABC, 0x000AC5],
+ [0x000AC7, 0x000AC9],
+ [0x000ACB, 0x000ACD],
+ [0x000AE0, 0x000AE3],
+ [0x000AE6, 0x000AF1],
+ [0x000AF9, 0x000AFF],
+ [0x000B01, 0x000B03],
+ [0x000B05, 0x000B0C],
+ [0x000B0F, 0x000B10],
+ [0x000B13, 0x000B28],
+ [0x000B2A, 0x000B30],
+ [0x000B32, 0x000B33],
+ [0x000B35, 0x000B39],
+ [0x000B3C, 0x000B44],
+ [0x000B47, 0x000B48],
+ [0x000B4B, 0x000B4D],
+ [0x000B55, 0x000B57],
+ [0x000B5C, 0x000B5D],
+ [0x000B5F, 0x000B63],
+ [0x000B66, 0x000B77],
+ [0x000B82, 0x000B83],
+ [0x000B85, 0x000B8A],
+ [0x000B8E, 0x000B90],
+ [0x000B92, 0x000B95],
+ [0x000B99, 0x000B9A],
+ [0x000B9E, 0x000B9F],
+ [0x000BA3, 0x000BA4],
+ [0x000BA8, 0x000BAA],
+ [0x000BAE, 0x000BB9],
+ [0x000BBE, 0x000BC2],
+ [0x000BC6, 0x000BC8],
+ [0x000BCA, 0x000BCD],
+ [0x000BE6, 0x000BFA],
+ [0x000C00, 0x000C0C],
+ [0x000C0E, 0x000C10],
+ [0x000C12, 0x000C28],
+ [0x000C2A, 0x000C39],
+ [0x000C3C, 0x000C44],
+ [0x000C46, 0x000C48],
+ [0x000C4A, 0x000C4D],
+ [0x000C55, 0x000C56],
+ [0x000C58, 0x000C5A],
+ [0x000C60, 0x000C63],
+ [0x000C66, 0x000C6F],
+ [0x000C77, 0x000C8C],
+ [0x000C8E, 0x000C90],
+ [0x000C92, 0x000CA8],
+ [0x000CAA, 0x000CB3],
+ [0x000CB5, 0x000CB9],
+ [0x000CBC, 0x000CC4],
+ [0x000CC6, 0x000CC8],
+ [0x000CCA, 0x000CCD],
+ [0x000CD5, 0x000CD6],
+ [0x000CDD, 0x000CDE],
+ [0x000CE0, 0x000CE3],
+ [0x000CE6, 0x000CEF],
+ [0x000CF1, 0x000CF3],
+ [0x000D00, 0x000D0C],
+ [0x000D0E, 0x000D10],
+ [0x000D12, 0x000D44],
+ [0x000D46, 0x000D48],
+ [0x000D4A, 0x000D4F],
+ [0x000D54, 0x000D63],
+ [0x000D66, 0x000D7F],
+ [0x000D81, 0x000D83],
+ [0x000D85, 0x000D96],
+ [0x000D9A, 0x000DB1],
+ [0x000DB3, 0x000DBB],
+ [0x000DC0, 0x000DC6],
+ [0x000DCF, 0x000DD4],
+ [0x000DD8, 0x000DDF],
+ [0x000DE6, 0x000DEF],
+ [0x000DF2, 0x000DF4],
+ [0x000E01, 0x000E3A],
+ [0x000E3F, 0x000E5B],
+ [0x000E81, 0x000E82],
+ [0x000E86, 0x000E8A],
+ [0x000E8C, 0x000EA3],
+ [0x000EA7, 0x000EBD],
+ [0x000EC0, 0x000EC4],
+ [0x000EC8, 0x000ECE],
+ [0x000ED0, 0x000ED9],
+ [0x000EDC, 0x000EDF],
+ [0x000F00, 0x000F47],
+ [0x000F49, 0x000F6C],
+ [0x000F71, 0x000F97],
+ [0x000F99, 0x000FBC],
+ [0x000FBE, 0x000FCC],
+ [0x000FCE, 0x000FDA],
+ [0x001000, 0x0010C5],
+ [0x0010D0, 0x001248],
+ [0x00124A, 0x00124D],
+ [0x001250, 0x001256],
+ [0x00125A, 0x00125D],
+ [0x001260, 0x001288],
+ [0x00128A, 0x00128D],
+ [0x001290, 0x0012B0],
+ [0x0012B2, 0x0012B5],
+ [0x0012B8, 0x0012BE],
+ [0x0012C2, 0x0012C5],
+ [0x0012C8, 0x0012D6],
+ [0x0012D8, 0x001310],
+ [0x001312, 0x001315],
+ [0x001318, 0x00135A],
+ [0x00135D, 0x00137C],
+ [0x001380, 0x001399],
+ [0x0013A0, 0x0013F5],
+ [0x0013F8, 0x0013FD],
+ [0x001400, 0x00169C],
+ [0x0016A0, 0x0016F8],
+ [0x001700, 0x001715],
+ [0x00171F, 0x001736],
+ [0x001740, 0x001753],
+ [0x001760, 0x00176C],
+ [0x00176E, 0x001770],
+ [0x001772, 0x001773],
+ [0x001780, 0x0017DD],
+ [0x0017E0, 0x0017E9],
+ [0x0017F0, 0x0017F9],
+ [0x001800, 0x001819],
+ [0x001820, 0x001878],
+ [0x001880, 0x0018AA],
+ [0x0018B0, 0x0018F5],
+ [0x001900, 0x00191E],
+ [0x001920, 0x00192B],
+ [0x001930, 0x00193B],
+ [0x001944, 0x00196D],
+ [0x001970, 0x001974],
+ [0x001980, 0x0019AB],
+ [0x0019B0, 0x0019C9],
+ [0x0019D0, 0x0019DA],
+ [0x0019DE, 0x001A1B],
+ [0x001A1E, 0x001A5E],
+ [0x001A60, 0x001A7C],
+ [0x001A7F, 0x001A89],
+ [0x001A90, 0x001A99],
+ [0x001AA0, 0x001AAD],
+ [0x001AB0, 0x001ACE],
+ [0x001B00, 0x001B4C],
+ [0x001B50, 0x001B7E],
+ [0x001B80, 0x001BF3],
+ [0x001BFC, 0x001C37],
+ [0x001C3B, 0x001C49],
+ [0x001C4D, 0x001C88],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CC7],
+ [0x001CD0, 0x001CFA],
+ [0x001D00, 0x001F15],
+ [0x001F18, 0x001F1D],
+ [0x001F20, 0x001F45],
+ [0x001F48, 0x001F4D],
+ [0x001F50, 0x001F57],
+ [0x001F5F, 0x001F7D],
+ [0x001F80, 0x001FB4],
+ [0x001FB6, 0x001FC4],
+ [0x001FC6, 0x001FD3],
+ [0x001FD6, 0x001FDB],
+ [0x001FDD, 0x001FEF],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FFE],
+ [0x002000, 0x002064],
+ [0x002066, 0x002071],
+ [0x002074, 0x00208E],
+ [0x002090, 0x00209C],
+ [0x0020A0, 0x0020C0],
+ [0x0020D0, 0x0020F0],
+ [0x002100, 0x00218B],
+ [0x002190, 0x002426],
+ [0x002440, 0x00244A],
+ [0x002460, 0x002B73],
+ [0x002B76, 0x002B95],
+ [0x002B97, 0x002CF3],
+ [0x002CF9, 0x002D25],
+ [0x002D30, 0x002D67],
+ [0x002D6F, 0x002D70],
+ [0x002D7F, 0x002D96],
+ [0x002DA0, 0x002DA6],
+ [0x002DA8, 0x002DAE],
+ [0x002DB0, 0x002DB6],
+ [0x002DB8, 0x002DBE],
+ [0x002DC0, 0x002DC6],
+ [0x002DC8, 0x002DCE],
+ [0x002DD0, 0x002DD6],
+ [0x002DD8, 0x002DDE],
+ [0x002DE0, 0x002E5D],
+ [0x002E80, 0x002E99],
+ [0x002E9B, 0x002EF3],
+ [0x002F00, 0x002FD5],
+ [0x002FF0, 0x002FFB],
+ [0x003000, 0x00303F],
+ [0x003041, 0x003096],
+ [0x003099, 0x0030FF],
+ [0x003105, 0x00312F],
+ [0x003131, 0x00318E],
+ [0x003190, 0x0031E3],
+ [0x0031F0, 0x00321E],
+ [0x003220, 0x00A48C],
+ [0x00A490, 0x00A4C6],
+ [0x00A4D0, 0x00A62B],
+ [0x00A640, 0x00A6F7],
+ [0x00A700, 0x00A7CA],
+ [0x00A7D0, 0x00A7D1],
+ [0x00A7D5, 0x00A7D9],
+ [0x00A7F2, 0x00A82C],
+ [0x00A830, 0x00A839],
+ [0x00A840, 0x00A877],
+ [0x00A880, 0x00A8C5],
+ [0x00A8CE, 0x00A8D9],
+ [0x00A8E0, 0x00A953],
+ [0x00A95F, 0x00A97C],
+ [0x00A980, 0x00A9CD],
+ [0x00A9CF, 0x00A9D9],
+ [0x00A9DE, 0x00A9FE],
+ [0x00AA00, 0x00AA36],
+ [0x00AA40, 0x00AA4D],
+ [0x00AA50, 0x00AA59],
+ [0x00AA5C, 0x00AAC2],
+ [0x00AADB, 0x00AAF6],
+ [0x00AB01, 0x00AB06],
+ [0x00AB09, 0x00AB0E],
+ [0x00AB11, 0x00AB16],
+ [0x00AB20, 0x00AB26],
+ [0x00AB28, 0x00AB2E],
+ [0x00AB30, 0x00AB6B],
+ [0x00AB70, 0x00ABED],
+ [0x00ABF0, 0x00ABF9],
+ [0x00AC00, 0x00D7A3],
+ [0x00D7B0, 0x00D7C6],
+ [0x00D7CB, 0x00D7FB],
+ [0x00D800, 0x00DBFF],
+ [0x00E000, 0x00FA6D],
+ [0x00FA70, 0x00FAD9],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FB1D, 0x00FB36],
+ [0x00FB38, 0x00FB3C],
+ [0x00FB40, 0x00FB41],
+ [0x00FB43, 0x00FB44],
+ [0x00FB46, 0x00FBC2],
+ [0x00FBD3, 0x00FD8F],
+ [0x00FD92, 0x00FDC7],
+ [0x00FDF0, 0x00FE19],
+ [0x00FE20, 0x00FE52],
+ [0x00FE54, 0x00FE66],
+ [0x00FE68, 0x00FE6B],
+ [0x00FE70, 0x00FE74],
+ [0x00FE76, 0x00FEFC],
+ [0x00FF01, 0x00FFBE],
+ [0x00FFC2, 0x00FFC7],
+ [0x00FFCA, 0x00FFCF],
+ [0x00FFD2, 0x00FFD7],
+ [0x00FFDA, 0x00FFDC],
+ [0x00FFE0, 0x00FFE6],
+ [0x00FFE8, 0x00FFEE],
+ [0x00FFF9, 0x00FFFD],
+ [0x010000, 0x01000B],
+ [0x01000D, 0x010026],
+ [0x010028, 0x01003A],
+ [0x01003C, 0x01003D],
+ [0x01003F, 0x01004D],
+ [0x010050, 0x01005D],
+ [0x010080, 0x0100FA],
+ [0x010100, 0x010102],
+ [0x010107, 0x010133],
+ [0x010137, 0x01018E],
+ [0x010190, 0x01019C],
+ [0x0101D0, 0x0101FD],
+ [0x010280, 0x01029C],
+ [0x0102A0, 0x0102D0],
+ [0x0102E0, 0x0102FB],
+ [0x010300, 0x010323],
+ [0x01032D, 0x01034A],
+ [0x010350, 0x01037A],
+ [0x010380, 0x01039D],
+ [0x01039F, 0x0103C3],
+ [0x0103C8, 0x0103D5],
+ [0x010400, 0x01049D],
+ [0x0104A0, 0x0104A9],
+ [0x0104B0, 0x0104D3],
+ [0x0104D8, 0x0104FB],
+ [0x010500, 0x010527],
+ [0x010530, 0x010563],
+ [0x01056F, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC],
+ [0x010600, 0x010736],
+ [0x010740, 0x010755],
+ [0x010760, 0x010767],
+ [0x010780, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x010800, 0x010805],
+ [0x01080A, 0x010835],
+ [0x010837, 0x010838],
+ [0x01083F, 0x010855],
+ [0x010857, 0x01089E],
+ [0x0108A7, 0x0108AF],
+ [0x0108E0, 0x0108F2],
+ [0x0108F4, 0x0108F5],
+ [0x0108FB, 0x01091B],
+ [0x01091F, 0x010939],
+ [0x010980, 0x0109B7],
+ [0x0109BC, 0x0109CF],
+ [0x0109D2, 0x010A03],
+ [0x010A05, 0x010A06],
+ [0x010A0C, 0x010A13],
+ [0x010A15, 0x010A17],
+ [0x010A19, 0x010A35],
+ [0x010A38, 0x010A3A],
+ [0x010A3F, 0x010A48],
+ [0x010A50, 0x010A58],
+ [0x010A60, 0x010A9F],
+ [0x010AC0, 0x010AE6],
+ [0x010AEB, 0x010AF6],
+ [0x010B00, 0x010B35],
+ [0x010B39, 0x010B55],
+ [0x010B58, 0x010B72],
+ [0x010B78, 0x010B91],
+ [0x010B99, 0x010B9C],
+ [0x010BA9, 0x010BAF],
+ [0x010C00, 0x010C48],
+ [0x010C80, 0x010CB2],
+ [0x010CC0, 0x010CF2],
+ [0x010CFA, 0x010D27],
+ [0x010D30, 0x010D39],
+ [0x010E60, 0x010E7E],
+ [0x010E80, 0x010EA9],
+ [0x010EAB, 0x010EAD],
+ [0x010EB0, 0x010EB1],
+ [0x010EFD, 0x010F27],
+ [0x010F30, 0x010F59],
+ [0x010F70, 0x010F89],
+ [0x010FB0, 0x010FCB],
+ [0x010FE0, 0x010FF6],
+ [0x011000, 0x01104D],
+ [0x011052, 0x011075],
+ [0x01107F, 0x0110C2],
+ [0x0110D0, 0x0110E8],
+ [0x0110F0, 0x0110F9],
+ [0x011100, 0x011134],
+ [0x011136, 0x011147],
+ [0x011150, 0x011176],
+ [0x011180, 0x0111DF],
+ [0x0111E1, 0x0111F4],
+ [0x011200, 0x011211],
+ [0x011213, 0x011241],
+ [0x011280, 0x011286],
+ [0x01128A, 0x01128D],
+ [0x01128F, 0x01129D],
+ [0x01129F, 0x0112A9],
+ [0x0112B0, 0x0112EA],
+ [0x0112F0, 0x0112F9],
+ [0x011300, 0x011303],
+ [0x011305, 0x01130C],
+ [0x01130F, 0x011310],
+ [0x011313, 0x011328],
+ [0x01132A, 0x011330],
+ [0x011332, 0x011333],
+ [0x011335, 0x011339],
+ [0x01133B, 0x011344],
+ [0x011347, 0x011348],
+ [0x01134B, 0x01134D],
+ [0x01135D, 0x011363],
+ [0x011366, 0x01136C],
+ [0x011370, 0x011374],
+ [0x011400, 0x01145B],
+ [0x01145D, 0x011461],
+ [0x011480, 0x0114C7],
+ [0x0114D0, 0x0114D9],
+ [0x011580, 0x0115B5],
+ [0x0115B8, 0x0115DD],
+ [0x011600, 0x011644],
+ [0x011650, 0x011659],
+ [0x011660, 0x01166C],
+ [0x011680, 0x0116B9],
+ [0x0116C0, 0x0116C9],
+ [0x011700, 0x01171A],
+ [0x01171D, 0x01172B],
+ [0x011730, 0x011746],
+ [0x011800, 0x01183B],
+ [0x0118A0, 0x0118F2],
+ [0x0118FF, 0x011906],
+ [0x01190C, 0x011913],
+ [0x011915, 0x011916],
+ [0x011918, 0x011935],
+ [0x011937, 0x011938],
+ [0x01193B, 0x011946],
+ [0x011950, 0x011959],
+ [0x0119A0, 0x0119A7],
+ [0x0119AA, 0x0119D7],
+ [0x0119DA, 0x0119E4],
+ [0x011A00, 0x011A47],
+ [0x011A50, 0x011AA2],
+ [0x011AB0, 0x011AF8],
+ [0x011B00, 0x011B09],
+ [0x011C00, 0x011C08],
+ [0x011C0A, 0x011C36],
+ [0x011C38, 0x011C45],
+ [0x011C50, 0x011C6C],
+ [0x011C70, 0x011C8F],
+ [0x011C92, 0x011CA7],
+ [0x011CA9, 0x011CB6],
+ [0x011D00, 0x011D06],
+ [0x011D08, 0x011D09],
+ [0x011D0B, 0x011D36],
+ [0x011D3C, 0x011D3D],
+ [0x011D3F, 0x011D47],
+ [0x011D50, 0x011D59],
+ [0x011D60, 0x011D65],
+ [0x011D67, 0x011D68],
+ [0x011D6A, 0x011D8E],
+ [0x011D90, 0x011D91],
+ [0x011D93, 0x011D98],
+ [0x011DA0, 0x011DA9],
+ [0x011EE0, 0x011EF8],
+ [0x011F00, 0x011F10],
+ [0x011F12, 0x011F3A],
+ [0x011F3E, 0x011F59],
+ [0x011FC0, 0x011FF1],
+ [0x011FFF, 0x012399],
+ [0x012400, 0x01246E],
+ [0x012470, 0x012474],
+ [0x012480, 0x012543],
+ [0x012F90, 0x012FF2],
+ [0x013000, 0x013455],
+ [0x014400, 0x014646],
+ [0x016800, 0x016A38],
+ [0x016A40, 0x016A5E],
+ [0x016A60, 0x016A69],
+ [0x016A6E, 0x016ABE],
+ [0x016AC0, 0x016AC9],
+ [0x016AD0, 0x016AED],
+ [0x016AF0, 0x016AF5],
+ [0x016B00, 0x016B45],
+ [0x016B50, 0x016B59],
+ [0x016B5B, 0x016B61],
+ [0x016B63, 0x016B77],
+ [0x016B7D, 0x016B8F],
+ [0x016E40, 0x016E9A],
+ [0x016F00, 0x016F4A],
+ [0x016F4F, 0x016F87],
+ [0x016F8F, 0x016F9F],
+ [0x016FE0, 0x016FE4],
+ [0x016FF0, 0x016FF1],
+ [0x017000, 0x0187F7],
+ [0x018800, 0x018CD5],
+ [0x018D00, 0x018D08],
+ [0x01AFF0, 0x01AFF3],
+ [0x01AFF5, 0x01AFFB],
+ [0x01AFFD, 0x01AFFE],
+ [0x01B000, 0x01B122],
+ [0x01B150, 0x01B152],
+ [0x01B164, 0x01B167],
+ [0x01B170, 0x01B2FB],
+ [0x01BC00, 0x01BC6A],
+ [0x01BC70, 0x01BC7C],
+ [0x01BC80, 0x01BC88],
+ [0x01BC90, 0x01BC99],
+ [0x01BC9C, 0x01BCA3],
+ [0x01CF00, 0x01CF2D],
+ [0x01CF30, 0x01CF46],
+ [0x01CF50, 0x01CFC3],
+ [0x01D000, 0x01D0F5],
+ [0x01D100, 0x01D126],
+ [0x01D129, 0x01D1EA],
+ [0x01D200, 0x01D245],
+ [0x01D2C0, 0x01D2D3],
+ [0x01D2E0, 0x01D2F3],
+ [0x01D300, 0x01D356],
+ [0x01D360, 0x01D378],
+ [0x01D400, 0x01D454],
+ [0x01D456, 0x01D49C],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D51E, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D552, 0x01D6A5],
+ [0x01D6A8, 0x01D7CB],
+ [0x01D7CE, 0x01DA8B],
+ [0x01DA9B, 0x01DA9F],
+ [0x01DAA1, 0x01DAAF],
+ [0x01DF00, 0x01DF1E],
+ [0x01DF25, 0x01DF2A],
+ [0x01E000, 0x01E006],
+ [0x01E008, 0x01E018],
+ [0x01E01B, 0x01E021],
+ [0x01E023, 0x01E024],
+ [0x01E026, 0x01E02A],
+ [0x01E030, 0x01E06D],
+ [0x01E100, 0x01E12C],
+ [0x01E130, 0x01E13D],
+ [0x01E140, 0x01E149],
+ [0x01E14E, 0x01E14F],
+ [0x01E290, 0x01E2AE],
+ [0x01E2C0, 0x01E2F9],
+ [0x01E4D0, 0x01E4F9],
+ [0x01E7E0, 0x01E7E6],
+ [0x01E7E8, 0x01E7EB],
+ [0x01E7ED, 0x01E7EE],
+ [0x01E7F0, 0x01E7FE],
+ [0x01E800, 0x01E8C4],
+ [0x01E8C7, 0x01E8D6],
+ [0x01E900, 0x01E94B],
+ [0x01E950, 0x01E959],
+ [0x01E95E, 0x01E95F],
+ [0x01EC71, 0x01ECB4],
+ [0x01ED01, 0x01ED3D],
+ [0x01EE00, 0x01EE03],
+ [0x01EE05, 0x01EE1F],
+ [0x01EE21, 0x01EE22],
+ [0x01EE29, 0x01EE32],
+ [0x01EE34, 0x01EE37],
+ [0x01EE4D, 0x01EE4F],
+ [0x01EE51, 0x01EE52],
+ [0x01EE61, 0x01EE62],
+ [0x01EE67, 0x01EE6A],
+ [0x01EE6C, 0x01EE72],
+ [0x01EE74, 0x01EE77],
+ [0x01EE79, 0x01EE7C],
+ [0x01EE80, 0x01EE89],
+ [0x01EE8B, 0x01EE9B],
+ [0x01EEA1, 0x01EEA3],
+ [0x01EEA5, 0x01EEA9],
+ [0x01EEAB, 0x01EEBB],
+ [0x01EEF0, 0x01EEF1],
+ [0x01F000, 0x01F02B],
+ [0x01F030, 0x01F093],
+ [0x01F0A0, 0x01F0AE],
+ [0x01F0B1, 0x01F0BF],
+ [0x01F0C1, 0x01F0CF],
+ [0x01F0D1, 0x01F0F5],
+ [0x01F100, 0x01F1AD],
+ [0x01F1E6, 0x01F202],
+ [0x01F210, 0x01F23B],
+ [0x01F240, 0x01F248],
+ [0x01F250, 0x01F251],
+ [0x01F260, 0x01F265],
+ [0x01F300, 0x01F6D7],
+ [0x01F6DC, 0x01F6EC],
+ [0x01F6F0, 0x01F6FC],
+ [0x01F700, 0x01F776],
+ [0x01F77B, 0x01F7D9],
+ [0x01F7E0, 0x01F7EB],
+ [0x01F800, 0x01F80B],
+ [0x01F810, 0x01F847],
+ [0x01F850, 0x01F859],
+ [0x01F860, 0x01F887],
+ [0x01F890, 0x01F8AD],
+ [0x01F8B0, 0x01F8B1],
+ [0x01F900, 0x01FA53],
+ [0x01FA60, 0x01FA6D],
+ [0x01FA70, 0x01FA7C],
+ [0x01FA80, 0x01FA88],
+ [0x01FA90, 0x01FABD],
+ [0x01FABF, 0x01FAC5],
+ [0x01FACE, 0x01FADB],
+ [0x01FAE0, 0x01FAE8],
+ [0x01FAF0, 0x01FAF8],
+ [0x01FB00, 0x01FB92],
+ [0x01FB94, 0x01FBCA],
+ [0x01FBF0, 0x01FBF9],
+ [0x020000, 0x02A6DF],
+ [0x02A700, 0x02B739],
+ [0x02B740, 0x02B81D],
+ [0x02B820, 0x02CEA1],
+ [0x02CEB0, 0x02EBE0],
+ [0x02F800, 0x02FA1D],
+ [0x030000, 0x03134A],
+ [0x031350, 0x0323AF],
+ [0x0E0020, 0x0E007F],
+ [0x0E0100, 0x0E01EF],
+ [0x0F0000, 0x0FFFFD],
+ [0x100000, 0x10FFFD]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Assigned}+$/u,
+ matchSymbols,
+ "\\p{Assigned}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00038B,
+ 0x00038D,
+ 0x0003A2,
+ 0x000530,
+ 0x000590,
+ 0x00070E,
+ 0x00083F,
+ 0x00085F,
+ 0x00088F,
+ 0x000984,
+ 0x0009A9,
+ 0x0009B1,
+ 0x0009DE,
+ 0x000A04,
+ 0x000A29,
+ 0x000A31,
+ 0x000A34,
+ 0x000A37,
+ 0x000A3D,
+ 0x000A5D,
+ 0x000A84,
+ 0x000A8E,
+ 0x000A92,
+ 0x000AA9,
+ 0x000AB1,
+ 0x000AB4,
+ 0x000AC6,
+ 0x000ACA,
+ 0x000B00,
+ 0x000B04,
+ 0x000B29,
+ 0x000B31,
+ 0x000B34,
+ 0x000B5E,
+ 0x000B84,
+ 0x000B91,
+ 0x000B9B,
+ 0x000B9D,
+ 0x000BC9,
+ 0x000C0D,
+ 0x000C11,
+ 0x000C29,
+ 0x000C45,
+ 0x000C49,
+ 0x000C57,
+ 0x000C8D,
+ 0x000C91,
+ 0x000CA9,
+ 0x000CB4,
+ 0x000CC5,
+ 0x000CC9,
+ 0x000CDF,
+ 0x000CF0,
+ 0x000D0D,
+ 0x000D11,
+ 0x000D45,
+ 0x000D49,
+ 0x000D80,
+ 0x000D84,
+ 0x000DB2,
+ 0x000DBC,
+ 0x000DD5,
+ 0x000DD7,
+ 0x000E83,
+ 0x000E85,
+ 0x000E8B,
+ 0x000EA4,
+ 0x000EA6,
+ 0x000EC5,
+ 0x000EC7,
+ 0x000ECF,
+ 0x000F48,
+ 0x000F98,
+ 0x000FBD,
+ 0x000FCD,
+ 0x0010C6,
+ 0x001249,
+ 0x001257,
+ 0x001259,
+ 0x001289,
+ 0x0012B1,
+ 0x0012BF,
+ 0x0012C1,
+ 0x0012D7,
+ 0x001311,
+ 0x00176D,
+ 0x001771,
+ 0x00191F,
+ 0x001A5F,
+ 0x001B7F,
+ 0x001F58,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x001FB5,
+ 0x001FC5,
+ 0x001FDC,
+ 0x001FF5,
+ 0x001FFF,
+ 0x002065,
+ 0x00208F,
+ 0x002B96,
+ 0x002D26,
+ 0x002DA7,
+ 0x002DAF,
+ 0x002DB7,
+ 0x002DBF,
+ 0x002DC7,
+ 0x002DCF,
+ 0x002DD7,
+ 0x002DDF,
+ 0x002E9A,
+ 0x003040,
+ 0x003130,
+ 0x00318F,
+ 0x00321F,
+ 0x00A7D2,
+ 0x00A7D4,
+ 0x00A9CE,
+ 0x00A9FF,
+ 0x00AB27,
+ 0x00AB2F,
+ 0x00FB37,
+ 0x00FB3D,
+ 0x00FB3F,
+ 0x00FB42,
+ 0x00FB45,
+ 0x00FE53,
+ 0x00FE67,
+ 0x00FE75,
+ 0x00FF00,
+ 0x00FFE7,
+ 0x01000C,
+ 0x010027,
+ 0x01003B,
+ 0x01003E,
+ 0x01018F,
+ 0x01039E,
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x010596,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA,
+ 0x010786,
+ 0x0107B1,
+ 0x010809,
+ 0x010836,
+ 0x010856,
+ 0x0108F3,
+ 0x010A04,
+ 0x010A14,
+ 0x010A18,
+ 0x010E7F,
+ 0x010EAA,
+ 0x011135,
+ 0x0111E0,
+ 0x011212,
+ 0x011287,
+ 0x011289,
+ 0x01128E,
+ 0x01129E,
+ 0x011304,
+ 0x011329,
+ 0x011331,
+ 0x011334,
+ 0x01133A,
+ 0x01145C,
+ 0x011914,
+ 0x011917,
+ 0x011936,
+ 0x011C09,
+ 0x011C37,
+ 0x011CA8,
+ 0x011D07,
+ 0x011D0A,
+ 0x011D3B,
+ 0x011D3E,
+ 0x011D66,
+ 0x011D69,
+ 0x011D8F,
+ 0x011D92,
+ 0x011F11,
+ 0x01246F,
+ 0x016A5F,
+ 0x016ABF,
+ 0x016B5A,
+ 0x016B62,
+ 0x01AFF4,
+ 0x01AFFC,
+ 0x01AFFF,
+ 0x01D455,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D506,
+ 0x01D515,
+ 0x01D51D,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545,
+ 0x01D551,
+ 0x01DAA0,
+ 0x01E007,
+ 0x01E022,
+ 0x01E025,
+ 0x01E7E7,
+ 0x01E7EC,
+ 0x01E7EF,
+ 0x01E7FF,
+ 0x01EE04,
+ 0x01EE20,
+ 0x01EE23,
+ 0x01EE28,
+ 0x01EE33,
+ 0x01EE38,
+ 0x01EE3A,
+ 0x01EE48,
+ 0x01EE4A,
+ 0x01EE4C,
+ 0x01EE50,
+ 0x01EE53,
+ 0x01EE58,
+ 0x01EE5A,
+ 0x01EE5C,
+ 0x01EE5E,
+ 0x01EE60,
+ 0x01EE63,
+ 0x01EE6B,
+ 0x01EE73,
+ 0x01EE78,
+ 0x01EE7D,
+ 0x01EE7F,
+ 0x01EE8A,
+ 0x01EEA4,
+ 0x01EEAA,
+ 0x01F0C0,
+ 0x01F0D0,
+ 0x01FABE,
+ 0x01FB93
+ ],
+ ranges: [
+ [0x000378, 0x000379],
+ [0x000380, 0x000383],
+ [0x000557, 0x000558],
+ [0x00058B, 0x00058C],
+ [0x0005C8, 0x0005CF],
+ [0x0005EB, 0x0005EE],
+ [0x0005F5, 0x0005FF],
+ [0x00074B, 0x00074C],
+ [0x0007B2, 0x0007BF],
+ [0x0007FB, 0x0007FC],
+ [0x00082E, 0x00082F],
+ [0x00085C, 0x00085D],
+ [0x00086B, 0x00086F],
+ [0x000892, 0x000897],
+ [0x00098D, 0x00098E],
+ [0x000991, 0x000992],
+ [0x0009B3, 0x0009B5],
+ [0x0009BA, 0x0009BB],
+ [0x0009C5, 0x0009C6],
+ [0x0009C9, 0x0009CA],
+ [0x0009CF, 0x0009D6],
+ [0x0009D8, 0x0009DB],
+ [0x0009E4, 0x0009E5],
+ [0x0009FF, 0x000A00],
+ [0x000A0B, 0x000A0E],
+ [0x000A11, 0x000A12],
+ [0x000A3A, 0x000A3B],
+ [0x000A43, 0x000A46],
+ [0x000A49, 0x000A4A],
+ [0x000A4E, 0x000A50],
+ [0x000A52, 0x000A58],
+ [0x000A5F, 0x000A65],
+ [0x000A77, 0x000A80],
+ [0x000ABA, 0x000ABB],
+ [0x000ACE, 0x000ACF],
+ [0x000AD1, 0x000ADF],
+ [0x000AE4, 0x000AE5],
+ [0x000AF2, 0x000AF8],
+ [0x000B0D, 0x000B0E],
+ [0x000B11, 0x000B12],
+ [0x000B3A, 0x000B3B],
+ [0x000B45, 0x000B46],
+ [0x000B49, 0x000B4A],
+ [0x000B4E, 0x000B54],
+ [0x000B58, 0x000B5B],
+ [0x000B64, 0x000B65],
+ [0x000B78, 0x000B81],
+ [0x000B8B, 0x000B8D],
+ [0x000B96, 0x000B98],
+ [0x000BA0, 0x000BA2],
+ [0x000BA5, 0x000BA7],
+ [0x000BAB, 0x000BAD],
+ [0x000BBA, 0x000BBD],
+ [0x000BC3, 0x000BC5],
+ [0x000BCE, 0x000BCF],
+ [0x000BD1, 0x000BD6],
+ [0x000BD8, 0x000BE5],
+ [0x000BFB, 0x000BFF],
+ [0x000C3A, 0x000C3B],
+ [0x000C4E, 0x000C54],
+ [0x000C5B, 0x000C5C],
+ [0x000C5E, 0x000C5F],
+ [0x000C64, 0x000C65],
+ [0x000C70, 0x000C76],
+ [0x000CBA, 0x000CBB],
+ [0x000CCE, 0x000CD4],
+ [0x000CD7, 0x000CDC],
+ [0x000CE4, 0x000CE5],
+ [0x000CF4, 0x000CFF],
+ [0x000D50, 0x000D53],
+ [0x000D64, 0x000D65],
+ [0x000D97, 0x000D99],
+ [0x000DBE, 0x000DBF],
+ [0x000DC7, 0x000DC9],
+ [0x000DCB, 0x000DCE],
+ [0x000DE0, 0x000DE5],
+ [0x000DF0, 0x000DF1],
+ [0x000DF5, 0x000E00],
+ [0x000E3B, 0x000E3E],
+ [0x000E5C, 0x000E80],
+ [0x000EBE, 0x000EBF],
+ [0x000EDA, 0x000EDB],
+ [0x000EE0, 0x000EFF],
+ [0x000F6D, 0x000F70],
+ [0x000FDB, 0x000FFF],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x0010CF],
+ [0x00124E, 0x00124F],
+ [0x00125E, 0x00125F],
+ [0x00128E, 0x00128F],
+ [0x0012B6, 0x0012B7],
+ [0x0012C6, 0x0012C7],
+ [0x001316, 0x001317],
+ [0x00135B, 0x00135C],
+ [0x00137D, 0x00137F],
+ [0x00139A, 0x00139F],
+ [0x0013F6, 0x0013F7],
+ [0x0013FE, 0x0013FF],
+ [0x00169D, 0x00169F],
+ [0x0016F9, 0x0016FF],
+ [0x001716, 0x00171E],
+ [0x001737, 0x00173F],
+ [0x001754, 0x00175F],
+ [0x001774, 0x00177F],
+ [0x0017DE, 0x0017DF],
+ [0x0017EA, 0x0017EF],
+ [0x0017FA, 0x0017FF],
+ [0x00181A, 0x00181F],
+ [0x001879, 0x00187F],
+ [0x0018AB, 0x0018AF],
+ [0x0018F6, 0x0018FF],
+ [0x00192C, 0x00192F],
+ [0x00193C, 0x00193F],
+ [0x001941, 0x001943],
+ [0x00196E, 0x00196F],
+ [0x001975, 0x00197F],
+ [0x0019AC, 0x0019AF],
+ [0x0019CA, 0x0019CF],
+ [0x0019DB, 0x0019DD],
+ [0x001A1C, 0x001A1D],
+ [0x001A7D, 0x001A7E],
+ [0x001A8A, 0x001A8F],
+ [0x001A9A, 0x001A9F],
+ [0x001AAE, 0x001AAF],
+ [0x001ACF, 0x001AFF],
+ [0x001B4D, 0x001B4F],
+ [0x001BF4, 0x001BFB],
+ [0x001C38, 0x001C3A],
+ [0x001C4A, 0x001C4C],
+ [0x001C89, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC8, 0x001CCF],
+ [0x001CFB, 0x001CFF],
+ [0x001F16, 0x001F17],
+ [0x001F1E, 0x001F1F],
+ [0x001F46, 0x001F47],
+ [0x001F4E, 0x001F4F],
+ [0x001F7E, 0x001F7F],
+ [0x001FD4, 0x001FD5],
+ [0x001FF0, 0x001FF1],
+ [0x002072, 0x002073],
+ [0x00209D, 0x00209F],
+ [0x0020C1, 0x0020CF],
+ [0x0020F1, 0x0020FF],
+ [0x00218C, 0x00218F],
+ [0x002427, 0x00243F],
+ [0x00244B, 0x00245F],
+ [0x002B74, 0x002B75],
+ [0x002CF4, 0x002CF8],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x002D2F],
+ [0x002D68, 0x002D6E],
+ [0x002D71, 0x002D7E],
+ [0x002D97, 0x002D9F],
+ [0x002E5E, 0x002E7F],
+ [0x002EF4, 0x002EFF],
+ [0x002FD6, 0x002FEF],
+ [0x002FFC, 0x002FFF],
+ [0x003097, 0x003098],
+ [0x003100, 0x003104],
+ [0x0031E4, 0x0031EF],
+ [0x00A48D, 0x00A48F],
+ [0x00A4C7, 0x00A4CF],
+ [0x00A62C, 0x00A63F],
+ [0x00A6F8, 0x00A6FF],
+ [0x00A7CB, 0x00A7CF],
+ [0x00A7DA, 0x00A7F1],
+ [0x00A82D, 0x00A82F],
+ [0x00A83A, 0x00A83F],
+ [0x00A878, 0x00A87F],
+ [0x00A8C6, 0x00A8CD],
+ [0x00A8DA, 0x00A8DF],
+ [0x00A954, 0x00A95E],
+ [0x00A97D, 0x00A97F],
+ [0x00A9DA, 0x00A9DD],
+ [0x00AA37, 0x00AA3F],
+ [0x00AA4E, 0x00AA4F],
+ [0x00AA5A, 0x00AA5B],
+ [0x00AAC3, 0x00AADA],
+ [0x00AAF7, 0x00AB00],
+ [0x00AB07, 0x00AB08],
+ [0x00AB0F, 0x00AB10],
+ [0x00AB17, 0x00AB1F],
+ [0x00AB6C, 0x00AB6F],
+ [0x00ABEE, 0x00ABEF],
+ [0x00ABFA, 0x00ABFF],
+ [0x00D7A4, 0x00D7AF],
+ [0x00D7C7, 0x00D7CA],
+ [0x00D7FC, 0x00D7FF],
+ [0x00FA6E, 0x00FA6F],
+ [0x00FADA, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FB1C],
+ [0x00FBC3, 0x00FBD2],
+ [0x00FD90, 0x00FD91],
+ [0x00FDC8, 0x00FDCE],
+ [0x00FDD0, 0x00FDEF],
+ [0x00FE1A, 0x00FE1F],
+ [0x00FE6C, 0x00FE6F],
+ [0x00FEFD, 0x00FEFE],
+ [0x00FFBF, 0x00FFC1],
+ [0x00FFC8, 0x00FFC9],
+ [0x00FFD0, 0x00FFD1],
+ [0x00FFD8, 0x00FFD9],
+ [0x00FFDD, 0x00FFDF],
+ [0x00FFEF, 0x00FFF8],
+ [0x00FFFE, 0x00FFFF],
+ [0x01004E, 0x01004F],
+ [0x01005E, 0x01007F],
+ [0x0100FB, 0x0100FF],
+ [0x010103, 0x010106],
+ [0x010134, 0x010136],
+ [0x01019D, 0x01019F],
+ [0x0101A1, 0x0101CF],
+ [0x0101FE, 0x01027F],
+ [0x01029D, 0x01029F],
+ [0x0102D1, 0x0102DF],
+ [0x0102FC, 0x0102FF],
+ [0x010324, 0x01032C],
+ [0x01034B, 0x01034F],
+ [0x01037B, 0x01037F],
+ [0x0103C4, 0x0103C7],
+ [0x0103D6, 0x0103FF],
+ [0x01049E, 0x01049F],
+ [0x0104AA, 0x0104AF],
+ [0x0104D4, 0x0104D7],
+ [0x0104FC, 0x0104FF],
+ [0x010528, 0x01052F],
+ [0x010564, 0x01056E],
+ [0x0105BD, 0x0105FF],
+ [0x010737, 0x01073F],
+ [0x010756, 0x01075F],
+ [0x010768, 0x01077F],
+ [0x0107BB, 0x0107FF],
+ [0x010806, 0x010807],
+ [0x010839, 0x01083B],
+ [0x01083D, 0x01083E],
+ [0x01089F, 0x0108A6],
+ [0x0108B0, 0x0108DF],
+ [0x0108F6, 0x0108FA],
+ [0x01091C, 0x01091E],
+ [0x01093A, 0x01093E],
+ [0x010940, 0x01097F],
+ [0x0109B8, 0x0109BB],
+ [0x0109D0, 0x0109D1],
+ [0x010A07, 0x010A0B],
+ [0x010A36, 0x010A37],
+ [0x010A3B, 0x010A3E],
+ [0x010A49, 0x010A4F],
+ [0x010A59, 0x010A5F],
+ [0x010AA0, 0x010ABF],
+ [0x010AE7, 0x010AEA],
+ [0x010AF7, 0x010AFF],
+ [0x010B36, 0x010B38],
+ [0x010B56, 0x010B57],
+ [0x010B73, 0x010B77],
+ [0x010B92, 0x010B98],
+ [0x010B9D, 0x010BA8],
+ [0x010BB0, 0x010BFF],
+ [0x010C49, 0x010C7F],
+ [0x010CB3, 0x010CBF],
+ [0x010CF3, 0x010CF9],
+ [0x010D28, 0x010D2F],
+ [0x010D3A, 0x010E5F],
+ [0x010EAE, 0x010EAF],
+ [0x010EB2, 0x010EFC],
+ [0x010F28, 0x010F2F],
+ [0x010F5A, 0x010F6F],
+ [0x010F8A, 0x010FAF],
+ [0x010FCC, 0x010FDF],
+ [0x010FF7, 0x010FFF],
+ [0x01104E, 0x011051],
+ [0x011076, 0x01107E],
+ [0x0110C3, 0x0110CC],
+ [0x0110CE, 0x0110CF],
+ [0x0110E9, 0x0110EF],
+ [0x0110FA, 0x0110FF],
+ [0x011148, 0x01114F],
+ [0x011177, 0x01117F],
+ [0x0111F5, 0x0111FF],
+ [0x011242, 0x01127F],
+ [0x0112AA, 0x0112AF],
+ [0x0112EB, 0x0112EF],
+ [0x0112FA, 0x0112FF],
+ [0x01130D, 0x01130E],
+ [0x011311, 0x011312],
+ [0x011345, 0x011346],
+ [0x011349, 0x01134A],
+ [0x01134E, 0x01134F],
+ [0x011351, 0x011356],
+ [0x011358, 0x01135C],
+ [0x011364, 0x011365],
+ [0x01136D, 0x01136F],
+ [0x011375, 0x0113FF],
+ [0x011462, 0x01147F],
+ [0x0114C8, 0x0114CF],
+ [0x0114DA, 0x01157F],
+ [0x0115B6, 0x0115B7],
+ [0x0115DE, 0x0115FF],
+ [0x011645, 0x01164F],
+ [0x01165A, 0x01165F],
+ [0x01166D, 0x01167F],
+ [0x0116BA, 0x0116BF],
+ [0x0116CA, 0x0116FF],
+ [0x01171B, 0x01171C],
+ [0x01172C, 0x01172F],
+ [0x011747, 0x0117FF],
+ [0x01183C, 0x01189F],
+ [0x0118F3, 0x0118FE],
+ [0x011907, 0x011908],
+ [0x01190A, 0x01190B],
+ [0x011939, 0x01193A],
+ [0x011947, 0x01194F],
+ [0x01195A, 0x01199F],
+ [0x0119A8, 0x0119A9],
+ [0x0119D8, 0x0119D9],
+ [0x0119E5, 0x0119FF],
+ [0x011A48, 0x011A4F],
+ [0x011AA3, 0x011AAF],
+ [0x011AF9, 0x011AFF],
+ [0x011B0A, 0x011BFF],
+ [0x011C46, 0x011C4F],
+ [0x011C6D, 0x011C6F],
+ [0x011C90, 0x011C91],
+ [0x011CB7, 0x011CFF],
+ [0x011D37, 0x011D39],
+ [0x011D48, 0x011D4F],
+ [0x011D5A, 0x011D5F],
+ [0x011D99, 0x011D9F],
+ [0x011DAA, 0x011EDF],
+ [0x011EF9, 0x011EFF],
+ [0x011F3B, 0x011F3D],
+ [0x011F5A, 0x011FAF],
+ [0x011FB1, 0x011FBF],
+ [0x011FF2, 0x011FFE],
+ [0x01239A, 0x0123FF],
+ [0x012475, 0x01247F],
+ [0x012544, 0x012F8F],
+ [0x012FF3, 0x012FFF],
+ [0x013456, 0x0143FF],
+ [0x014647, 0x0167FF],
+ [0x016A39, 0x016A3F],
+ [0x016A6A, 0x016A6D],
+ [0x016ACA, 0x016ACF],
+ [0x016AEE, 0x016AEF],
+ [0x016AF6, 0x016AFF],
+ [0x016B46, 0x016B4F],
+ [0x016B78, 0x016B7C],
+ [0x016B90, 0x016E3F],
+ [0x016E9B, 0x016EFF],
+ [0x016F4B, 0x016F4E],
+ [0x016F88, 0x016F8E],
+ [0x016FA0, 0x016FDF],
+ [0x016FE5, 0x016FEF],
+ [0x016FF2, 0x016FFF],
+ [0x0187F8, 0x0187FF],
+ [0x018CD6, 0x018CFF],
+ [0x018D09, 0x01AFEF],
+ [0x01B123, 0x01B131],
+ [0x01B133, 0x01B14F],
+ [0x01B153, 0x01B154],
+ [0x01B156, 0x01B163],
+ [0x01B168, 0x01B16F],
+ [0x01B2FC, 0x01BBFF],
+ [0x01BC6B, 0x01BC6F],
+ [0x01BC7D, 0x01BC7F],
+ [0x01BC89, 0x01BC8F],
+ [0x01BC9A, 0x01BC9B],
+ [0x01BCA4, 0x01CEFF],
+ [0x01CF2E, 0x01CF2F],
+ [0x01CF47, 0x01CF4F],
+ [0x01CFC4, 0x01CFFF],
+ [0x01D0F6, 0x01D0FF],
+ [0x01D127, 0x01D128],
+ [0x01D1EB, 0x01D1FF],
+ [0x01D246, 0x01D2BF],
+ [0x01D2D4, 0x01D2DF],
+ [0x01D2F4, 0x01D2FF],
+ [0x01D357, 0x01D35F],
+ [0x01D379, 0x01D3FF],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D50B, 0x01D50C],
+ [0x01D547, 0x01D549],
+ [0x01D6A6, 0x01D6A7],
+ [0x01D7CC, 0x01D7CD],
+ [0x01DA8C, 0x01DA9A],
+ [0x01DAB0, 0x01DEFF],
+ [0x01DF1F, 0x01DF24],
+ [0x01DF2B, 0x01DFFF],
+ [0x01E019, 0x01E01A],
+ [0x01E02B, 0x01E02F],
+ [0x01E06E, 0x01E08E],
+ [0x01E090, 0x01E0FF],
+ [0x01E12D, 0x01E12F],
+ [0x01E13E, 0x01E13F],
+ [0x01E14A, 0x01E14D],
+ [0x01E150, 0x01E28F],
+ [0x01E2AF, 0x01E2BF],
+ [0x01E2FA, 0x01E2FE],
+ [0x01E300, 0x01E4CF],
+ [0x01E4FA, 0x01E7DF],
+ [0x01E8C5, 0x01E8C6],
+ [0x01E8D7, 0x01E8FF],
+ [0x01E94C, 0x01E94F],
+ [0x01E95A, 0x01E95D],
+ [0x01E960, 0x01EC70],
+ [0x01ECB5, 0x01ED00],
+ [0x01ED3E, 0x01EDFF],
+ [0x01EE25, 0x01EE26],
+ [0x01EE3C, 0x01EE41],
+ [0x01EE43, 0x01EE46],
+ [0x01EE55, 0x01EE56],
+ [0x01EE65, 0x01EE66],
+ [0x01EE9C, 0x01EEA0],
+ [0x01EEBC, 0x01EEEF],
+ [0x01EEF2, 0x01EFFF],
+ [0x01F02C, 0x01F02F],
+ [0x01F094, 0x01F09F],
+ [0x01F0AF, 0x01F0B0],
+ [0x01F0F6, 0x01F0FF],
+ [0x01F1AE, 0x01F1E5],
+ [0x01F203, 0x01F20F],
+ [0x01F23C, 0x01F23F],
+ [0x01F249, 0x01F24F],
+ [0x01F252, 0x01F25F],
+ [0x01F266, 0x01F2FF],
+ [0x01F6D8, 0x01F6DB],
+ [0x01F6ED, 0x01F6EF],
+ [0x01F6FD, 0x01F6FF],
+ [0x01F777, 0x01F77A],
+ [0x01F7DA, 0x01F7DF],
+ [0x01F7EC, 0x01F7EF],
+ [0x01F7F1, 0x01F7FF],
+ [0x01F80C, 0x01F80F],
+ [0x01F848, 0x01F84F],
+ [0x01F85A, 0x01F85F],
+ [0x01F888, 0x01F88F],
+ [0x01F8AE, 0x01F8AF],
+ [0x01F8B2, 0x01F8FF],
+ [0x01FA54, 0x01FA5F],
+ [0x01FA6E, 0x01FA6F],
+ [0x01FA7D, 0x01FA7F],
+ [0x01FA89, 0x01FA8F],
+ [0x01FAC6, 0x01FACD],
+ [0x01FADC, 0x01FADF],
+ [0x01FAE9, 0x01FAEF],
+ [0x01FAF9, 0x01FAFF],
+ [0x01FBCB, 0x01FBEF],
+ [0x01FBFA, 0x01FFFF],
+ [0x02A6E0, 0x02A6FF],
+ [0x02B73A, 0x02B73F],
+ [0x02B81E, 0x02B81F],
+ [0x02CEA2, 0x02CEAF],
+ [0x02EBE1, 0x02F7FF],
+ [0x02FA1E, 0x02FFFF],
+ [0x03134B, 0x03134F],
+ [0x0323B0, 0x0E0000],
+ [0x0E0002, 0x0E001F],
+ [0x0E0080, 0x0E00FF],
+ [0x0E01F0, 0x0EFFFF],
+ [0x0FFFFE, 0x0FFFFF],
+ [0x10FFFE, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Assigned}+$/u,
+ nonMatchSymbols,
+ "\\P{Assigned}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Bidi_Control.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Bidi_Control.js
new file mode 100644
index 0000000000..bb19a60ad8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Bidi_Control.js
@@ -0,0 +1,60 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Bidi_Control`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00061C
+ ],
+ ranges: [
+ [0x00200E, 0x00200F],
+ [0x00202A, 0x00202E],
+ [0x002066, 0x002069]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Bidi_Control}+$/u,
+ matchSymbols,
+ "\\p{Bidi_Control}"
+);
+testPropertyEscapes(
+ /^\p{Bidi_C}+$/u,
+ matchSymbols,
+ "\\p{Bidi_C}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00061B],
+ [0x00061D, 0x00200D],
+ [0x002010, 0x002029],
+ [0x00202F, 0x002065],
+ [0x00206A, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Bidi_Control}+$/u,
+ nonMatchSymbols,
+ "\\P{Bidi_Control}"
+);
+testPropertyEscapes(
+ /^\P{Bidi_C}+$/u,
+ nonMatchSymbols,
+ "\\P{Bidi_C}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Bidi_Mirrored.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Bidi_Mirrored.js
new file mode 100644
index 0000000000..986ae8a7c0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Bidi_Mirrored.js
@@ -0,0 +1,281 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Bidi_Mirrored`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00003C,
+ 0x00003E,
+ 0x00005B,
+ 0x00005D,
+ 0x00007B,
+ 0x00007D,
+ 0x0000AB,
+ 0x0000BB,
+ 0x002140,
+ 0x002211,
+ 0x002224,
+ 0x002226,
+ 0x002239,
+ 0x002262,
+ 0x002298,
+ 0x0027C0,
+ 0x0029B8,
+ 0x0029C9,
+ 0x0029E1,
+ 0x002A24,
+ 0x002A26,
+ 0x002A29,
+ 0x002ADC,
+ 0x002ADE,
+ 0x002AF3,
+ 0x002AFD,
+ 0x002BFE,
+ 0x00FF1C,
+ 0x00FF1E,
+ 0x00FF3B,
+ 0x00FF3D,
+ 0x00FF5B,
+ 0x00FF5D,
+ 0x01D6DB,
+ 0x01D715,
+ 0x01D74F,
+ 0x01D789,
+ 0x01D7C3
+ ],
+ ranges: [
+ [0x000028, 0x000029],
+ [0x000F3A, 0x000F3D],
+ [0x00169B, 0x00169C],
+ [0x002039, 0x00203A],
+ [0x002045, 0x002046],
+ [0x00207D, 0x00207E],
+ [0x00208D, 0x00208E],
+ [0x002201, 0x002204],
+ [0x002208, 0x00220D],
+ [0x002215, 0x002216],
+ [0x00221A, 0x00221D],
+ [0x00221F, 0x002222],
+ [0x00222B, 0x002233],
+ [0x00223B, 0x00224C],
+ [0x002252, 0x002255],
+ [0x00225F, 0x002260],
+ [0x002264, 0x00226B],
+ [0x00226E, 0x00228C],
+ [0x00228F, 0x002292],
+ [0x0022A2, 0x0022A3],
+ [0x0022A6, 0x0022B8],
+ [0x0022BE, 0x0022BF],
+ [0x0022C9, 0x0022CD],
+ [0x0022D0, 0x0022D1],
+ [0x0022D6, 0x0022ED],
+ [0x0022F0, 0x0022FF],
+ [0x002308, 0x00230B],
+ [0x002320, 0x002321],
+ [0x002329, 0x00232A],
+ [0x002768, 0x002775],
+ [0x0027C3, 0x0027C6],
+ [0x0027C8, 0x0027C9],
+ [0x0027CB, 0x0027CD],
+ [0x0027D3, 0x0027D6],
+ [0x0027DC, 0x0027DE],
+ [0x0027E2, 0x0027EF],
+ [0x002983, 0x002998],
+ [0x00299B, 0x0029A0],
+ [0x0029A2, 0x0029AF],
+ [0x0029C0, 0x0029C5],
+ [0x0029CE, 0x0029D2],
+ [0x0029D4, 0x0029D5],
+ [0x0029D8, 0x0029DC],
+ [0x0029E3, 0x0029E5],
+ [0x0029E8, 0x0029E9],
+ [0x0029F4, 0x0029F9],
+ [0x0029FC, 0x0029FD],
+ [0x002A0A, 0x002A1C],
+ [0x002A1E, 0x002A21],
+ [0x002A2B, 0x002A2E],
+ [0x002A34, 0x002A35],
+ [0x002A3C, 0x002A3E],
+ [0x002A57, 0x002A58],
+ [0x002A64, 0x002A65],
+ [0x002A6A, 0x002A6D],
+ [0x002A6F, 0x002A70],
+ [0x002A73, 0x002A74],
+ [0x002A79, 0x002AA3],
+ [0x002AA6, 0x002AAD],
+ [0x002AAF, 0x002AD6],
+ [0x002AE2, 0x002AE6],
+ [0x002AEC, 0x002AEE],
+ [0x002AF7, 0x002AFB],
+ [0x002E02, 0x002E05],
+ [0x002E09, 0x002E0A],
+ [0x002E0C, 0x002E0D],
+ [0x002E1C, 0x002E1D],
+ [0x002E20, 0x002E29],
+ [0x002E55, 0x002E5C],
+ [0x003008, 0x003011],
+ [0x003014, 0x00301B],
+ [0x00FE59, 0x00FE5E],
+ [0x00FE64, 0x00FE65],
+ [0x00FF08, 0x00FF09],
+ [0x00FF5F, 0x00FF60],
+ [0x00FF62, 0x00FF63]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Bidi_Mirrored}+$/u,
+ matchSymbols,
+ "\\p{Bidi_Mirrored}"
+);
+testPropertyEscapes(
+ /^\p{Bidi_M}+$/u,
+ matchSymbols,
+ "\\p{Bidi_M}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00003D,
+ 0x00005C,
+ 0x00007C,
+ 0x00221E,
+ 0x002223,
+ 0x002225,
+ 0x00223A,
+ 0x002261,
+ 0x002263,
+ 0x0027C7,
+ 0x0027CA,
+ 0x0029A1,
+ 0x0029D3,
+ 0x0029E2,
+ 0x002A1D,
+ 0x002A25,
+ 0x002A2A,
+ 0x002A6E,
+ 0x002AAE,
+ 0x002ADD,
+ 0x002AFC,
+ 0x002E0B,
+ 0x00FF1D,
+ 0x00FF3C,
+ 0x00FF5C,
+ 0x00FF5E,
+ 0x00FF61
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000027],
+ [0x00002A, 0x00003B],
+ [0x00003F, 0x00005A],
+ [0x00005E, 0x00007A],
+ [0x00007E, 0x0000AA],
+ [0x0000AC, 0x0000BA],
+ [0x0000BC, 0x000F39],
+ [0x000F3E, 0x00169A],
+ [0x00169D, 0x002038],
+ [0x00203B, 0x002044],
+ [0x002047, 0x00207C],
+ [0x00207F, 0x00208C],
+ [0x00208F, 0x00213F],
+ [0x002141, 0x002200],
+ [0x002205, 0x002207],
+ [0x00220E, 0x002210],
+ [0x002212, 0x002214],
+ [0x002217, 0x002219],
+ [0x002227, 0x00222A],
+ [0x002234, 0x002238],
+ [0x00224D, 0x002251],
+ [0x002256, 0x00225E],
+ [0x00226C, 0x00226D],
+ [0x00228D, 0x00228E],
+ [0x002293, 0x002297],
+ [0x002299, 0x0022A1],
+ [0x0022A4, 0x0022A5],
+ [0x0022B9, 0x0022BD],
+ [0x0022C0, 0x0022C8],
+ [0x0022CE, 0x0022CF],
+ [0x0022D2, 0x0022D5],
+ [0x0022EE, 0x0022EF],
+ [0x002300, 0x002307],
+ [0x00230C, 0x00231F],
+ [0x002322, 0x002328],
+ [0x00232B, 0x002767],
+ [0x002776, 0x0027BF],
+ [0x0027C1, 0x0027C2],
+ [0x0027CE, 0x0027D2],
+ [0x0027D7, 0x0027DB],
+ [0x0027DF, 0x0027E1],
+ [0x0027F0, 0x002982],
+ [0x002999, 0x00299A],
+ [0x0029B0, 0x0029B7],
+ [0x0029B9, 0x0029BF],
+ [0x0029C6, 0x0029C8],
+ [0x0029CA, 0x0029CD],
+ [0x0029D6, 0x0029D7],
+ [0x0029DD, 0x0029E0],
+ [0x0029E6, 0x0029E7],
+ [0x0029EA, 0x0029F3],
+ [0x0029FA, 0x0029FB],
+ [0x0029FE, 0x002A09],
+ [0x002A22, 0x002A23],
+ [0x002A27, 0x002A28],
+ [0x002A2F, 0x002A33],
+ [0x002A36, 0x002A3B],
+ [0x002A3F, 0x002A56],
+ [0x002A59, 0x002A63],
+ [0x002A66, 0x002A69],
+ [0x002A71, 0x002A72],
+ [0x002A75, 0x002A78],
+ [0x002AA4, 0x002AA5],
+ [0x002AD7, 0x002ADB],
+ [0x002ADF, 0x002AE1],
+ [0x002AE7, 0x002AEB],
+ [0x002AEF, 0x002AF2],
+ [0x002AF4, 0x002AF6],
+ [0x002AFE, 0x002BFD],
+ [0x002BFF, 0x002E01],
+ [0x002E06, 0x002E08],
+ [0x002E0E, 0x002E1B],
+ [0x002E1E, 0x002E1F],
+ [0x002E2A, 0x002E54],
+ [0x002E5D, 0x003007],
+ [0x003012, 0x003013],
+ [0x00301C, 0x00DBFF],
+ [0x00E000, 0x00FE58],
+ [0x00FE5F, 0x00FE63],
+ [0x00FE66, 0x00FF07],
+ [0x00FF0A, 0x00FF1B],
+ [0x00FF1F, 0x00FF3A],
+ [0x00FF3E, 0x00FF5A],
+ [0x00FF64, 0x01D6DA],
+ [0x01D6DC, 0x01D714],
+ [0x01D716, 0x01D74E],
+ [0x01D750, 0x01D788],
+ [0x01D78A, 0x01D7C2],
+ [0x01D7C4, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Bidi_Mirrored}+$/u,
+ nonMatchSymbols,
+ "\\P{Bidi_Mirrored}"
+);
+testPropertyEscapes(
+ /^\P{Bidi_M}+$/u,
+ nonMatchSymbols,
+ "\\P{Bidi_M}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Case_Ignorable.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Case_Ignorable.js
new file mode 100644
index 0000000000..6871274fd9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Case_Ignorable.js
@@ -0,0 +1,927 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Case_Ignorable`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000027,
+ 0x00002E,
+ 0x00003A,
+ 0x00005E,
+ 0x000060,
+ 0x0000A8,
+ 0x0000AD,
+ 0x0000AF,
+ 0x0000B4,
+ 0x00037A,
+ 0x000387,
+ 0x000559,
+ 0x00055F,
+ 0x0005BF,
+ 0x0005C7,
+ 0x0005F4,
+ 0x00061C,
+ 0x000640,
+ 0x000670,
+ 0x00070F,
+ 0x000711,
+ 0x0007FA,
+ 0x0007FD,
+ 0x000888,
+ 0x00093A,
+ 0x00093C,
+ 0x00094D,
+ 0x000971,
+ 0x000981,
+ 0x0009BC,
+ 0x0009CD,
+ 0x0009FE,
+ 0x000A3C,
+ 0x000A51,
+ 0x000A75,
+ 0x000ABC,
+ 0x000ACD,
+ 0x000B01,
+ 0x000B3C,
+ 0x000B3F,
+ 0x000B4D,
+ 0x000B82,
+ 0x000BC0,
+ 0x000BCD,
+ 0x000C00,
+ 0x000C04,
+ 0x000C3C,
+ 0x000C81,
+ 0x000CBC,
+ 0x000CBF,
+ 0x000CC6,
+ 0x000D4D,
+ 0x000D81,
+ 0x000DCA,
+ 0x000DD6,
+ 0x000E31,
+ 0x000EB1,
+ 0x000EC6,
+ 0x000F35,
+ 0x000F37,
+ 0x000F39,
+ 0x000FC6,
+ 0x001082,
+ 0x00108D,
+ 0x00109D,
+ 0x0010FC,
+ 0x0017C6,
+ 0x0017D7,
+ 0x0017DD,
+ 0x001843,
+ 0x0018A9,
+ 0x001932,
+ 0x001A1B,
+ 0x001A56,
+ 0x001A60,
+ 0x001A62,
+ 0x001A7F,
+ 0x001AA7,
+ 0x001B34,
+ 0x001B3C,
+ 0x001B42,
+ 0x001BE6,
+ 0x001BED,
+ 0x001CED,
+ 0x001CF4,
+ 0x001D78,
+ 0x001FBD,
+ 0x002024,
+ 0x002027,
+ 0x002071,
+ 0x00207F,
+ 0x002D6F,
+ 0x002D7F,
+ 0x002E2F,
+ 0x003005,
+ 0x00303B,
+ 0x00A015,
+ 0x00A60C,
+ 0x00A67F,
+ 0x00A770,
+ 0x00A802,
+ 0x00A806,
+ 0x00A80B,
+ 0x00A82C,
+ 0x00A8FF,
+ 0x00A9B3,
+ 0x00A9CF,
+ 0x00AA43,
+ 0x00AA4C,
+ 0x00AA70,
+ 0x00AA7C,
+ 0x00AAB0,
+ 0x00AAC1,
+ 0x00AADD,
+ 0x00AAF6,
+ 0x00ABE5,
+ 0x00ABE8,
+ 0x00ABED,
+ 0x00FB1E,
+ 0x00FE13,
+ 0x00FE52,
+ 0x00FE55,
+ 0x00FEFF,
+ 0x00FF07,
+ 0x00FF0E,
+ 0x00FF1A,
+ 0x00FF3E,
+ 0x00FF40,
+ 0x00FF70,
+ 0x00FFE3,
+ 0x0101FD,
+ 0x0102E0,
+ 0x010A3F,
+ 0x011001,
+ 0x011070,
+ 0x0110BD,
+ 0x0110C2,
+ 0x0110CD,
+ 0x011173,
+ 0x0111CF,
+ 0x011234,
+ 0x01123E,
+ 0x011241,
+ 0x0112DF,
+ 0x011340,
+ 0x011446,
+ 0x01145E,
+ 0x0114BA,
+ 0x01163D,
+ 0x0116AB,
+ 0x0116AD,
+ 0x0116B7,
+ 0x01193E,
+ 0x011943,
+ 0x0119E0,
+ 0x011A47,
+ 0x011C3F,
+ 0x011D3A,
+ 0x011D47,
+ 0x011D95,
+ 0x011D97,
+ 0x011F40,
+ 0x011F42,
+ 0x016F4F,
+ 0x01DA75,
+ 0x01DA84,
+ 0x01E08F,
+ 0x01E2AE,
+ 0x0E0001
+ ],
+ ranges: [
+ [0x0000B7, 0x0000B8],
+ [0x0002B0, 0x00036F],
+ [0x000374, 0x000375],
+ [0x000384, 0x000385],
+ [0x000483, 0x000489],
+ [0x000591, 0x0005BD],
+ [0x0005C1, 0x0005C2],
+ [0x0005C4, 0x0005C5],
+ [0x000600, 0x000605],
+ [0x000610, 0x00061A],
+ [0x00064B, 0x00065F],
+ [0x0006D6, 0x0006DD],
+ [0x0006DF, 0x0006E8],
+ [0x0006EA, 0x0006ED],
+ [0x000730, 0x00074A],
+ [0x0007A6, 0x0007B0],
+ [0x0007EB, 0x0007F5],
+ [0x000816, 0x00082D],
+ [0x000859, 0x00085B],
+ [0x000890, 0x000891],
+ [0x000898, 0x00089F],
+ [0x0008C9, 0x000902],
+ [0x000941, 0x000948],
+ [0x000951, 0x000957],
+ [0x000962, 0x000963],
+ [0x0009C1, 0x0009C4],
+ [0x0009E2, 0x0009E3],
+ [0x000A01, 0x000A02],
+ [0x000A41, 0x000A42],
+ [0x000A47, 0x000A48],
+ [0x000A4B, 0x000A4D],
+ [0x000A70, 0x000A71],
+ [0x000A81, 0x000A82],
+ [0x000AC1, 0x000AC5],
+ [0x000AC7, 0x000AC8],
+ [0x000AE2, 0x000AE3],
+ [0x000AFA, 0x000AFF],
+ [0x000B41, 0x000B44],
+ [0x000B55, 0x000B56],
+ [0x000B62, 0x000B63],
+ [0x000C3E, 0x000C40],
+ [0x000C46, 0x000C48],
+ [0x000C4A, 0x000C4D],
+ [0x000C55, 0x000C56],
+ [0x000C62, 0x000C63],
+ [0x000CCC, 0x000CCD],
+ [0x000CE2, 0x000CE3],
+ [0x000D00, 0x000D01],
+ [0x000D3B, 0x000D3C],
+ [0x000D41, 0x000D44],
+ [0x000D62, 0x000D63],
+ [0x000DD2, 0x000DD4],
+ [0x000E34, 0x000E3A],
+ [0x000E46, 0x000E4E],
+ [0x000EB4, 0x000EBC],
+ [0x000EC8, 0x000ECE],
+ [0x000F18, 0x000F19],
+ [0x000F71, 0x000F7E],
+ [0x000F80, 0x000F84],
+ [0x000F86, 0x000F87],
+ [0x000F8D, 0x000F97],
+ [0x000F99, 0x000FBC],
+ [0x00102D, 0x001030],
+ [0x001032, 0x001037],
+ [0x001039, 0x00103A],
+ [0x00103D, 0x00103E],
+ [0x001058, 0x001059],
+ [0x00105E, 0x001060],
+ [0x001071, 0x001074],
+ [0x001085, 0x001086],
+ [0x00135D, 0x00135F],
+ [0x001712, 0x001714],
+ [0x001732, 0x001733],
+ [0x001752, 0x001753],
+ [0x001772, 0x001773],
+ [0x0017B4, 0x0017B5],
+ [0x0017B7, 0x0017BD],
+ [0x0017C9, 0x0017D3],
+ [0x00180B, 0x00180F],
+ [0x001885, 0x001886],
+ [0x001920, 0x001922],
+ [0x001927, 0x001928],
+ [0x001939, 0x00193B],
+ [0x001A17, 0x001A18],
+ [0x001A58, 0x001A5E],
+ [0x001A65, 0x001A6C],
+ [0x001A73, 0x001A7C],
+ [0x001AB0, 0x001ACE],
+ [0x001B00, 0x001B03],
+ [0x001B36, 0x001B3A],
+ [0x001B6B, 0x001B73],
+ [0x001B80, 0x001B81],
+ [0x001BA2, 0x001BA5],
+ [0x001BA8, 0x001BA9],
+ [0x001BAB, 0x001BAD],
+ [0x001BE8, 0x001BE9],
+ [0x001BEF, 0x001BF1],
+ [0x001C2C, 0x001C33],
+ [0x001C36, 0x001C37],
+ [0x001C78, 0x001C7D],
+ [0x001CD0, 0x001CD2],
+ [0x001CD4, 0x001CE0],
+ [0x001CE2, 0x001CE8],
+ [0x001CF8, 0x001CF9],
+ [0x001D2C, 0x001D6A],
+ [0x001D9B, 0x001DFF],
+ [0x001FBF, 0x001FC1],
+ [0x001FCD, 0x001FCF],
+ [0x001FDD, 0x001FDF],
+ [0x001FED, 0x001FEF],
+ [0x001FFD, 0x001FFE],
+ [0x00200B, 0x00200F],
+ [0x002018, 0x002019],
+ [0x00202A, 0x00202E],
+ [0x002060, 0x002064],
+ [0x002066, 0x00206F],
+ [0x002090, 0x00209C],
+ [0x0020D0, 0x0020F0],
+ [0x002C7C, 0x002C7D],
+ [0x002CEF, 0x002CF1],
+ [0x002DE0, 0x002DFF],
+ [0x00302A, 0x00302D],
+ [0x003031, 0x003035],
+ [0x003099, 0x00309E],
+ [0x0030FC, 0x0030FE],
+ [0x00A4F8, 0x00A4FD],
+ [0x00A66F, 0x00A672],
+ [0x00A674, 0x00A67D],
+ [0x00A69C, 0x00A69F],
+ [0x00A6F0, 0x00A6F1],
+ [0x00A700, 0x00A721],
+ [0x00A788, 0x00A78A],
+ [0x00A7F2, 0x00A7F4],
+ [0x00A7F8, 0x00A7F9],
+ [0x00A825, 0x00A826],
+ [0x00A8C4, 0x00A8C5],
+ [0x00A8E0, 0x00A8F1],
+ [0x00A926, 0x00A92D],
+ [0x00A947, 0x00A951],
+ [0x00A980, 0x00A982],
+ [0x00A9B6, 0x00A9B9],
+ [0x00A9BC, 0x00A9BD],
+ [0x00A9E5, 0x00A9E6],
+ [0x00AA29, 0x00AA2E],
+ [0x00AA31, 0x00AA32],
+ [0x00AA35, 0x00AA36],
+ [0x00AAB2, 0x00AAB4],
+ [0x00AAB7, 0x00AAB8],
+ [0x00AABE, 0x00AABF],
+ [0x00AAEC, 0x00AAED],
+ [0x00AAF3, 0x00AAF4],
+ [0x00AB5B, 0x00AB5F],
+ [0x00AB69, 0x00AB6B],
+ [0x00FBB2, 0x00FBC2],
+ [0x00FE00, 0x00FE0F],
+ [0x00FE20, 0x00FE2F],
+ [0x00FF9E, 0x00FF9F],
+ [0x00FFF9, 0x00FFFB],
+ [0x010376, 0x01037A],
+ [0x010780, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x010A01, 0x010A03],
+ [0x010A05, 0x010A06],
+ [0x010A0C, 0x010A0F],
+ [0x010A38, 0x010A3A],
+ [0x010AE5, 0x010AE6],
+ [0x010D24, 0x010D27],
+ [0x010EAB, 0x010EAC],
+ [0x010EFD, 0x010EFF],
+ [0x010F46, 0x010F50],
+ [0x010F82, 0x010F85],
+ [0x011038, 0x011046],
+ [0x011073, 0x011074],
+ [0x01107F, 0x011081],
+ [0x0110B3, 0x0110B6],
+ [0x0110B9, 0x0110BA],
+ [0x011100, 0x011102],
+ [0x011127, 0x01112B],
+ [0x01112D, 0x011134],
+ [0x011180, 0x011181],
+ [0x0111B6, 0x0111BE],
+ [0x0111C9, 0x0111CC],
+ [0x01122F, 0x011231],
+ [0x011236, 0x011237],
+ [0x0112E3, 0x0112EA],
+ [0x011300, 0x011301],
+ [0x01133B, 0x01133C],
+ [0x011366, 0x01136C],
+ [0x011370, 0x011374],
+ [0x011438, 0x01143F],
+ [0x011442, 0x011444],
+ [0x0114B3, 0x0114B8],
+ [0x0114BF, 0x0114C0],
+ [0x0114C2, 0x0114C3],
+ [0x0115B2, 0x0115B5],
+ [0x0115BC, 0x0115BD],
+ [0x0115BF, 0x0115C0],
+ [0x0115DC, 0x0115DD],
+ [0x011633, 0x01163A],
+ [0x01163F, 0x011640],
+ [0x0116B0, 0x0116B5],
+ [0x01171D, 0x01171F],
+ [0x011722, 0x011725],
+ [0x011727, 0x01172B],
+ [0x01182F, 0x011837],
+ [0x011839, 0x01183A],
+ [0x01193B, 0x01193C],
+ [0x0119D4, 0x0119D7],
+ [0x0119DA, 0x0119DB],
+ [0x011A01, 0x011A0A],
+ [0x011A33, 0x011A38],
+ [0x011A3B, 0x011A3E],
+ [0x011A51, 0x011A56],
+ [0x011A59, 0x011A5B],
+ [0x011A8A, 0x011A96],
+ [0x011A98, 0x011A99],
+ [0x011C30, 0x011C36],
+ [0x011C38, 0x011C3D],
+ [0x011C92, 0x011CA7],
+ [0x011CAA, 0x011CB0],
+ [0x011CB2, 0x011CB3],
+ [0x011CB5, 0x011CB6],
+ [0x011D31, 0x011D36],
+ [0x011D3C, 0x011D3D],
+ [0x011D3F, 0x011D45],
+ [0x011D90, 0x011D91],
+ [0x011EF3, 0x011EF4],
+ [0x011F00, 0x011F01],
+ [0x011F36, 0x011F3A],
+ [0x013430, 0x013440],
+ [0x013447, 0x013455],
+ [0x016AF0, 0x016AF4],
+ [0x016B30, 0x016B36],
+ [0x016B40, 0x016B43],
+ [0x016F8F, 0x016F9F],
+ [0x016FE0, 0x016FE1],
+ [0x016FE3, 0x016FE4],
+ [0x01AFF0, 0x01AFF3],
+ [0x01AFF5, 0x01AFFB],
+ [0x01AFFD, 0x01AFFE],
+ [0x01BC9D, 0x01BC9E],
+ [0x01BCA0, 0x01BCA3],
+ [0x01CF00, 0x01CF2D],
+ [0x01CF30, 0x01CF46],
+ [0x01D167, 0x01D169],
+ [0x01D173, 0x01D182],
+ [0x01D185, 0x01D18B],
+ [0x01D1AA, 0x01D1AD],
+ [0x01D242, 0x01D244],
+ [0x01DA00, 0x01DA36],
+ [0x01DA3B, 0x01DA6C],
+ [0x01DA9B, 0x01DA9F],
+ [0x01DAA1, 0x01DAAF],
+ [0x01E000, 0x01E006],
+ [0x01E008, 0x01E018],
+ [0x01E01B, 0x01E021],
+ [0x01E023, 0x01E024],
+ [0x01E026, 0x01E02A],
+ [0x01E030, 0x01E06D],
+ [0x01E130, 0x01E13D],
+ [0x01E2EC, 0x01E2EF],
+ [0x01E4EB, 0x01E4EF],
+ [0x01E8D0, 0x01E8D6],
+ [0x01E944, 0x01E94B],
+ [0x01F3FB, 0x01F3FF],
+ [0x0E0020, 0x0E007F],
+ [0x0E0100, 0x0E01EF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Case_Ignorable}+$/u,
+ matchSymbols,
+ "\\p{Case_Ignorable}"
+);
+testPropertyEscapes(
+ /^\p{CI}+$/u,
+ matchSymbols,
+ "\\p{CI}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00005F,
+ 0x0000AE,
+ 0x000386,
+ 0x0005BE,
+ 0x0005C0,
+ 0x0005C3,
+ 0x0005C6,
+ 0x00061B,
+ 0x0006DE,
+ 0x0006E9,
+ 0x000710,
+ 0x00093B,
+ 0x000AC6,
+ 0x000B00,
+ 0x000B40,
+ 0x000C3D,
+ 0x000C49,
+ 0x000DD5,
+ 0x000EC7,
+ 0x000F36,
+ 0x000F38,
+ 0x000F7F,
+ 0x000F85,
+ 0x000F98,
+ 0x001031,
+ 0x001038,
+ 0x0017B6,
+ 0x001A57,
+ 0x001A5F,
+ 0x001A61,
+ 0x001B35,
+ 0x001B3B,
+ 0x001BAA,
+ 0x001BE7,
+ 0x001BEE,
+ 0x001CD3,
+ 0x001CE1,
+ 0x001FBE,
+ 0x002065,
+ 0x002070,
+ 0x00A673,
+ 0x00A67E,
+ 0x00AAB1,
+ 0x00AAC0,
+ 0x00AAF5,
+ 0x00FF3F,
+ 0x010786,
+ 0x0107B1,
+ 0x010A04,
+ 0x01112C,
+ 0x011235,
+ 0x011445,
+ 0x0114B9,
+ 0x0114C1,
+ 0x0115BE,
+ 0x01163E,
+ 0x0116AC,
+ 0x0116B6,
+ 0x011726,
+ 0x011838,
+ 0x01193D,
+ 0x011A97,
+ 0x011C37,
+ 0x011C3E,
+ 0x011CB1,
+ 0x011CB4,
+ 0x011D3B,
+ 0x011D3E,
+ 0x011D46,
+ 0x011D96,
+ 0x011F41,
+ 0x016FE2,
+ 0x01AFF4,
+ 0x01AFFC,
+ 0x01BC9F,
+ 0x01DAA0,
+ 0x01E007,
+ 0x01E022,
+ 0x01E025
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000026],
+ [0x000028, 0x00002D],
+ [0x00002F, 0x000039],
+ [0x00003B, 0x00005D],
+ [0x000061, 0x0000A7],
+ [0x0000A9, 0x0000AC],
+ [0x0000B0, 0x0000B3],
+ [0x0000B5, 0x0000B6],
+ [0x0000B9, 0x0002AF],
+ [0x000370, 0x000373],
+ [0x000376, 0x000379],
+ [0x00037B, 0x000383],
+ [0x000388, 0x000482],
+ [0x00048A, 0x000558],
+ [0x00055A, 0x00055E],
+ [0x000560, 0x000590],
+ [0x0005C8, 0x0005F3],
+ [0x0005F5, 0x0005FF],
+ [0x000606, 0x00060F],
+ [0x00061D, 0x00063F],
+ [0x000641, 0x00064A],
+ [0x000660, 0x00066F],
+ [0x000671, 0x0006D5],
+ [0x0006EE, 0x00070E],
+ [0x000712, 0x00072F],
+ [0x00074B, 0x0007A5],
+ [0x0007B1, 0x0007EA],
+ [0x0007F6, 0x0007F9],
+ [0x0007FB, 0x0007FC],
+ [0x0007FE, 0x000815],
+ [0x00082E, 0x000858],
+ [0x00085C, 0x000887],
+ [0x000889, 0x00088F],
+ [0x000892, 0x000897],
+ [0x0008A0, 0x0008C8],
+ [0x000903, 0x000939],
+ [0x00093D, 0x000940],
+ [0x000949, 0x00094C],
+ [0x00094E, 0x000950],
+ [0x000958, 0x000961],
+ [0x000964, 0x000970],
+ [0x000972, 0x000980],
+ [0x000982, 0x0009BB],
+ [0x0009BD, 0x0009C0],
+ [0x0009C5, 0x0009CC],
+ [0x0009CE, 0x0009E1],
+ [0x0009E4, 0x0009FD],
+ [0x0009FF, 0x000A00],
+ [0x000A03, 0x000A3B],
+ [0x000A3D, 0x000A40],
+ [0x000A43, 0x000A46],
+ [0x000A49, 0x000A4A],
+ [0x000A4E, 0x000A50],
+ [0x000A52, 0x000A6F],
+ [0x000A72, 0x000A74],
+ [0x000A76, 0x000A80],
+ [0x000A83, 0x000ABB],
+ [0x000ABD, 0x000AC0],
+ [0x000AC9, 0x000ACC],
+ [0x000ACE, 0x000AE1],
+ [0x000AE4, 0x000AF9],
+ [0x000B02, 0x000B3B],
+ [0x000B3D, 0x000B3E],
+ [0x000B45, 0x000B4C],
+ [0x000B4E, 0x000B54],
+ [0x000B57, 0x000B61],
+ [0x000B64, 0x000B81],
+ [0x000B83, 0x000BBF],
+ [0x000BC1, 0x000BCC],
+ [0x000BCE, 0x000BFF],
+ [0x000C01, 0x000C03],
+ [0x000C05, 0x000C3B],
+ [0x000C41, 0x000C45],
+ [0x000C4E, 0x000C54],
+ [0x000C57, 0x000C61],
+ [0x000C64, 0x000C80],
+ [0x000C82, 0x000CBB],
+ [0x000CBD, 0x000CBE],
+ [0x000CC0, 0x000CC5],
+ [0x000CC7, 0x000CCB],
+ [0x000CCE, 0x000CE1],
+ [0x000CE4, 0x000CFF],
+ [0x000D02, 0x000D3A],
+ [0x000D3D, 0x000D40],
+ [0x000D45, 0x000D4C],
+ [0x000D4E, 0x000D61],
+ [0x000D64, 0x000D80],
+ [0x000D82, 0x000DC9],
+ [0x000DCB, 0x000DD1],
+ [0x000DD7, 0x000E30],
+ [0x000E32, 0x000E33],
+ [0x000E3B, 0x000E45],
+ [0x000E4F, 0x000EB0],
+ [0x000EB2, 0x000EB3],
+ [0x000EBD, 0x000EC5],
+ [0x000ECF, 0x000F17],
+ [0x000F1A, 0x000F34],
+ [0x000F3A, 0x000F70],
+ [0x000F88, 0x000F8C],
+ [0x000FBD, 0x000FC5],
+ [0x000FC7, 0x00102C],
+ [0x00103B, 0x00103C],
+ [0x00103F, 0x001057],
+ [0x00105A, 0x00105D],
+ [0x001061, 0x001070],
+ [0x001075, 0x001081],
+ [0x001083, 0x001084],
+ [0x001087, 0x00108C],
+ [0x00108E, 0x00109C],
+ [0x00109E, 0x0010FB],
+ [0x0010FD, 0x00135C],
+ [0x001360, 0x001711],
+ [0x001715, 0x001731],
+ [0x001734, 0x001751],
+ [0x001754, 0x001771],
+ [0x001774, 0x0017B3],
+ [0x0017BE, 0x0017C5],
+ [0x0017C7, 0x0017C8],
+ [0x0017D4, 0x0017D6],
+ [0x0017D8, 0x0017DC],
+ [0x0017DE, 0x00180A],
+ [0x001810, 0x001842],
+ [0x001844, 0x001884],
+ [0x001887, 0x0018A8],
+ [0x0018AA, 0x00191F],
+ [0x001923, 0x001926],
+ [0x001929, 0x001931],
+ [0x001933, 0x001938],
+ [0x00193C, 0x001A16],
+ [0x001A19, 0x001A1A],
+ [0x001A1C, 0x001A55],
+ [0x001A63, 0x001A64],
+ [0x001A6D, 0x001A72],
+ [0x001A7D, 0x001A7E],
+ [0x001A80, 0x001AA6],
+ [0x001AA8, 0x001AAF],
+ [0x001ACF, 0x001AFF],
+ [0x001B04, 0x001B33],
+ [0x001B3D, 0x001B41],
+ [0x001B43, 0x001B6A],
+ [0x001B74, 0x001B7F],
+ [0x001B82, 0x001BA1],
+ [0x001BA6, 0x001BA7],
+ [0x001BAE, 0x001BE5],
+ [0x001BEA, 0x001BEC],
+ [0x001BF2, 0x001C2B],
+ [0x001C34, 0x001C35],
+ [0x001C38, 0x001C77],
+ [0x001C7E, 0x001CCF],
+ [0x001CE9, 0x001CEC],
+ [0x001CEE, 0x001CF3],
+ [0x001CF5, 0x001CF7],
+ [0x001CFA, 0x001D2B],
+ [0x001D6B, 0x001D77],
+ [0x001D79, 0x001D9A],
+ [0x001E00, 0x001FBC],
+ [0x001FC2, 0x001FCC],
+ [0x001FD0, 0x001FDC],
+ [0x001FE0, 0x001FEC],
+ [0x001FF0, 0x001FFC],
+ [0x001FFF, 0x00200A],
+ [0x002010, 0x002017],
+ [0x00201A, 0x002023],
+ [0x002025, 0x002026],
+ [0x002028, 0x002029],
+ [0x00202F, 0x00205F],
+ [0x002072, 0x00207E],
+ [0x002080, 0x00208F],
+ [0x00209D, 0x0020CF],
+ [0x0020F1, 0x002C7B],
+ [0x002C7E, 0x002CEE],
+ [0x002CF2, 0x002D6E],
+ [0x002D70, 0x002D7E],
+ [0x002D80, 0x002DDF],
+ [0x002E00, 0x002E2E],
+ [0x002E30, 0x003004],
+ [0x003006, 0x003029],
+ [0x00302E, 0x003030],
+ [0x003036, 0x00303A],
+ [0x00303C, 0x003098],
+ [0x00309F, 0x0030FB],
+ [0x0030FF, 0x00A014],
+ [0x00A016, 0x00A4F7],
+ [0x00A4FE, 0x00A60B],
+ [0x00A60D, 0x00A66E],
+ [0x00A680, 0x00A69B],
+ [0x00A6A0, 0x00A6EF],
+ [0x00A6F2, 0x00A6FF],
+ [0x00A722, 0x00A76F],
+ [0x00A771, 0x00A787],
+ [0x00A78B, 0x00A7F1],
+ [0x00A7F5, 0x00A7F7],
+ [0x00A7FA, 0x00A801],
+ [0x00A803, 0x00A805],
+ [0x00A807, 0x00A80A],
+ [0x00A80C, 0x00A824],
+ [0x00A827, 0x00A82B],
+ [0x00A82D, 0x00A8C3],
+ [0x00A8C6, 0x00A8DF],
+ [0x00A8F2, 0x00A8FE],
+ [0x00A900, 0x00A925],
+ [0x00A92E, 0x00A946],
+ [0x00A952, 0x00A97F],
+ [0x00A983, 0x00A9B2],
+ [0x00A9B4, 0x00A9B5],
+ [0x00A9BA, 0x00A9BB],
+ [0x00A9BE, 0x00A9CE],
+ [0x00A9D0, 0x00A9E4],
+ [0x00A9E7, 0x00AA28],
+ [0x00AA2F, 0x00AA30],
+ [0x00AA33, 0x00AA34],
+ [0x00AA37, 0x00AA42],
+ [0x00AA44, 0x00AA4B],
+ [0x00AA4D, 0x00AA6F],
+ [0x00AA71, 0x00AA7B],
+ [0x00AA7D, 0x00AAAF],
+ [0x00AAB5, 0x00AAB6],
+ [0x00AAB9, 0x00AABD],
+ [0x00AAC2, 0x00AADC],
+ [0x00AADE, 0x00AAEB],
+ [0x00AAEE, 0x00AAF2],
+ [0x00AAF7, 0x00AB5A],
+ [0x00AB60, 0x00AB68],
+ [0x00AB6C, 0x00ABE4],
+ [0x00ABE6, 0x00ABE7],
+ [0x00ABE9, 0x00ABEC],
+ [0x00ABEE, 0x00DBFF],
+ [0x00E000, 0x00FB1D],
+ [0x00FB1F, 0x00FBB1],
+ [0x00FBC3, 0x00FDFF],
+ [0x00FE10, 0x00FE12],
+ [0x00FE14, 0x00FE1F],
+ [0x00FE30, 0x00FE51],
+ [0x00FE53, 0x00FE54],
+ [0x00FE56, 0x00FEFE],
+ [0x00FF00, 0x00FF06],
+ [0x00FF08, 0x00FF0D],
+ [0x00FF0F, 0x00FF19],
+ [0x00FF1B, 0x00FF3D],
+ [0x00FF41, 0x00FF6F],
+ [0x00FF71, 0x00FF9D],
+ [0x00FFA0, 0x00FFE2],
+ [0x00FFE4, 0x00FFF8],
+ [0x00FFFC, 0x0101FC],
+ [0x0101FE, 0x0102DF],
+ [0x0102E1, 0x010375],
+ [0x01037B, 0x01077F],
+ [0x0107BB, 0x010A00],
+ [0x010A07, 0x010A0B],
+ [0x010A10, 0x010A37],
+ [0x010A3B, 0x010A3E],
+ [0x010A40, 0x010AE4],
+ [0x010AE7, 0x010D23],
+ [0x010D28, 0x010EAA],
+ [0x010EAD, 0x010EFC],
+ [0x010F00, 0x010F45],
+ [0x010F51, 0x010F81],
+ [0x010F86, 0x011000],
+ [0x011002, 0x011037],
+ [0x011047, 0x01106F],
+ [0x011071, 0x011072],
+ [0x011075, 0x01107E],
+ [0x011082, 0x0110B2],
+ [0x0110B7, 0x0110B8],
+ [0x0110BB, 0x0110BC],
+ [0x0110BE, 0x0110C1],
+ [0x0110C3, 0x0110CC],
+ [0x0110CE, 0x0110FF],
+ [0x011103, 0x011126],
+ [0x011135, 0x011172],
+ [0x011174, 0x01117F],
+ [0x011182, 0x0111B5],
+ [0x0111BF, 0x0111C8],
+ [0x0111CD, 0x0111CE],
+ [0x0111D0, 0x01122E],
+ [0x011232, 0x011233],
+ [0x011238, 0x01123D],
+ [0x01123F, 0x011240],
+ [0x011242, 0x0112DE],
+ [0x0112E0, 0x0112E2],
+ [0x0112EB, 0x0112FF],
+ [0x011302, 0x01133A],
+ [0x01133D, 0x01133F],
+ [0x011341, 0x011365],
+ [0x01136D, 0x01136F],
+ [0x011375, 0x011437],
+ [0x011440, 0x011441],
+ [0x011447, 0x01145D],
+ [0x01145F, 0x0114B2],
+ [0x0114BB, 0x0114BE],
+ [0x0114C4, 0x0115B1],
+ [0x0115B6, 0x0115BB],
+ [0x0115C1, 0x0115DB],
+ [0x0115DE, 0x011632],
+ [0x01163B, 0x01163C],
+ [0x011641, 0x0116AA],
+ [0x0116AE, 0x0116AF],
+ [0x0116B8, 0x01171C],
+ [0x011720, 0x011721],
+ [0x01172C, 0x01182E],
+ [0x01183B, 0x01193A],
+ [0x01193F, 0x011942],
+ [0x011944, 0x0119D3],
+ [0x0119D8, 0x0119D9],
+ [0x0119DC, 0x0119DF],
+ [0x0119E1, 0x011A00],
+ [0x011A0B, 0x011A32],
+ [0x011A39, 0x011A3A],
+ [0x011A3F, 0x011A46],
+ [0x011A48, 0x011A50],
+ [0x011A57, 0x011A58],
+ [0x011A5C, 0x011A89],
+ [0x011A9A, 0x011C2F],
+ [0x011C40, 0x011C91],
+ [0x011CA8, 0x011CA9],
+ [0x011CB7, 0x011D30],
+ [0x011D37, 0x011D39],
+ [0x011D48, 0x011D8F],
+ [0x011D92, 0x011D94],
+ [0x011D98, 0x011EF2],
+ [0x011EF5, 0x011EFF],
+ [0x011F02, 0x011F35],
+ [0x011F3B, 0x011F3F],
+ [0x011F43, 0x01342F],
+ [0x013441, 0x013446],
+ [0x013456, 0x016AEF],
+ [0x016AF5, 0x016B2F],
+ [0x016B37, 0x016B3F],
+ [0x016B44, 0x016F4E],
+ [0x016F50, 0x016F8E],
+ [0x016FA0, 0x016FDF],
+ [0x016FE5, 0x01AFEF],
+ [0x01AFFF, 0x01BC9C],
+ [0x01BCA4, 0x01CEFF],
+ [0x01CF2E, 0x01CF2F],
+ [0x01CF47, 0x01D166],
+ [0x01D16A, 0x01D172],
+ [0x01D183, 0x01D184],
+ [0x01D18C, 0x01D1A9],
+ [0x01D1AE, 0x01D241],
+ [0x01D245, 0x01D9FF],
+ [0x01DA37, 0x01DA3A],
+ [0x01DA6D, 0x01DA74],
+ [0x01DA76, 0x01DA83],
+ [0x01DA85, 0x01DA9A],
+ [0x01DAB0, 0x01DFFF],
+ [0x01E019, 0x01E01A],
+ [0x01E02B, 0x01E02F],
+ [0x01E06E, 0x01E08E],
+ [0x01E090, 0x01E12F],
+ [0x01E13E, 0x01E2AD],
+ [0x01E2AF, 0x01E2EB],
+ [0x01E2F0, 0x01E4EA],
+ [0x01E4F0, 0x01E8CF],
+ [0x01E8D7, 0x01E943],
+ [0x01E94C, 0x01F3FA],
+ [0x01F400, 0x0E0000],
+ [0x0E0002, 0x0E001F],
+ [0x0E0080, 0x0E00FF],
+ [0x0E01F0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Case_Ignorable}+$/u,
+ nonMatchSymbols,
+ "\\P{Case_Ignorable}"
+);
+testPropertyEscapes(
+ /^\P{CI}+$/u,
+ nonMatchSymbols,
+ "\\P{CI}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Cased.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Cased.js
new file mode 100644
index 0000000000..bb38d736cc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Cased.js
@@ -0,0 +1,357 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Cased`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000AA,
+ 0x0000B5,
+ 0x0000BA,
+ 0x000345,
+ 0x00037F,
+ 0x000386,
+ 0x00038C,
+ 0x0010C7,
+ 0x0010CD,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x001FBE,
+ 0x002071,
+ 0x00207F,
+ 0x002102,
+ 0x002107,
+ 0x002115,
+ 0x002124,
+ 0x002126,
+ 0x002128,
+ 0x002139,
+ 0x00214E,
+ 0x002D27,
+ 0x002D2D,
+ 0x00A7D3,
+ 0x010780,
+ 0x01D4A2,
+ 0x01D4BB,
+ 0x01D546
+ ],
+ ranges: [
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000F6],
+ [0x0000F8, 0x0001BA],
+ [0x0001BC, 0x0001BF],
+ [0x0001C4, 0x000293],
+ [0x000295, 0x0002B8],
+ [0x0002C0, 0x0002C1],
+ [0x0002E0, 0x0002E4],
+ [0x000370, 0x000373],
+ [0x000376, 0x000377],
+ [0x00037A, 0x00037D],
+ [0x000388, 0x00038A],
+ [0x00038E, 0x0003A1],
+ [0x0003A3, 0x0003F5],
+ [0x0003F7, 0x000481],
+ [0x00048A, 0x00052F],
+ [0x000531, 0x000556],
+ [0x000560, 0x000588],
+ [0x0010A0, 0x0010C5],
+ [0x0010D0, 0x0010FA],
+ [0x0010FC, 0x0010FF],
+ [0x0013A0, 0x0013F5],
+ [0x0013F8, 0x0013FD],
+ [0x001C80, 0x001C88],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CBF],
+ [0x001D00, 0x001DBF],
+ [0x001E00, 0x001F15],
+ [0x001F18, 0x001F1D],
+ [0x001F20, 0x001F45],
+ [0x001F48, 0x001F4D],
+ [0x001F50, 0x001F57],
+ [0x001F5F, 0x001F7D],
+ [0x001F80, 0x001FB4],
+ [0x001FB6, 0x001FBC],
+ [0x001FC2, 0x001FC4],
+ [0x001FC6, 0x001FCC],
+ [0x001FD0, 0x001FD3],
+ [0x001FD6, 0x001FDB],
+ [0x001FE0, 0x001FEC],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FFC],
+ [0x002090, 0x00209C],
+ [0x00210A, 0x002113],
+ [0x002119, 0x00211D],
+ [0x00212A, 0x00212D],
+ [0x00212F, 0x002134],
+ [0x00213C, 0x00213F],
+ [0x002145, 0x002149],
+ [0x002160, 0x00217F],
+ [0x002183, 0x002184],
+ [0x0024B6, 0x0024E9],
+ [0x002C00, 0x002CE4],
+ [0x002CEB, 0x002CEE],
+ [0x002CF2, 0x002CF3],
+ [0x002D00, 0x002D25],
+ [0x00A640, 0x00A66D],
+ [0x00A680, 0x00A69D],
+ [0x00A722, 0x00A787],
+ [0x00A78B, 0x00A78E],
+ [0x00A790, 0x00A7CA],
+ [0x00A7D0, 0x00A7D1],
+ [0x00A7D5, 0x00A7D9],
+ [0x00A7F2, 0x00A7F6],
+ [0x00A7F8, 0x00A7FA],
+ [0x00AB30, 0x00AB5A],
+ [0x00AB5C, 0x00AB69],
+ [0x00AB70, 0x00ABBF],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FF21, 0x00FF3A],
+ [0x00FF41, 0x00FF5A],
+ [0x010400, 0x01044F],
+ [0x0104B0, 0x0104D3],
+ [0x0104D8, 0x0104FB],
+ [0x010570, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC],
+ [0x010783, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x010C80, 0x010CB2],
+ [0x010CC0, 0x010CF2],
+ [0x0118A0, 0x0118DF],
+ [0x016E40, 0x016E7F],
+ [0x01D400, 0x01D454],
+ [0x01D456, 0x01D49C],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D51E, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D552, 0x01D6A5],
+ [0x01D6A8, 0x01D6C0],
+ [0x01D6C2, 0x01D6DA],
+ [0x01D6DC, 0x01D6FA],
+ [0x01D6FC, 0x01D714],
+ [0x01D716, 0x01D734],
+ [0x01D736, 0x01D74E],
+ [0x01D750, 0x01D76E],
+ [0x01D770, 0x01D788],
+ [0x01D78A, 0x01D7A8],
+ [0x01D7AA, 0x01D7C2],
+ [0x01D7C4, 0x01D7CB],
+ [0x01DF00, 0x01DF09],
+ [0x01DF0B, 0x01DF1E],
+ [0x01DF25, 0x01DF2A],
+ [0x01E030, 0x01E06D],
+ [0x01E900, 0x01E943],
+ [0x01F130, 0x01F149],
+ [0x01F150, 0x01F169],
+ [0x01F170, 0x01F189]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Cased}+$/u,
+ matchSymbols,
+ "\\p{Cased}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000D7,
+ 0x0000F7,
+ 0x0001BB,
+ 0x000294,
+ 0x00037E,
+ 0x000387,
+ 0x00038B,
+ 0x00038D,
+ 0x0003A2,
+ 0x0003F6,
+ 0x000530,
+ 0x0010C6,
+ 0x0010FB,
+ 0x001F58,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x001FB5,
+ 0x001FBD,
+ 0x001FC5,
+ 0x001FF5,
+ 0x002114,
+ 0x002125,
+ 0x002127,
+ 0x002129,
+ 0x00212E,
+ 0x002D26,
+ 0x00A78F,
+ 0x00A7D2,
+ 0x00A7D4,
+ 0x00A7F7,
+ 0x00AB5B,
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x010596,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA,
+ 0x010786,
+ 0x0107B1,
+ 0x01D455,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D506,
+ 0x01D515,
+ 0x01D51D,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545,
+ 0x01D551,
+ 0x01D6C1,
+ 0x01D6DB,
+ 0x01D6FB,
+ 0x01D715,
+ 0x01D735,
+ 0x01D74F,
+ 0x01D76F,
+ 0x01D789,
+ 0x01D7A9,
+ 0x01D7C3,
+ 0x01DF0A
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000040],
+ [0x00005B, 0x000060],
+ [0x00007B, 0x0000A9],
+ [0x0000AB, 0x0000B4],
+ [0x0000B6, 0x0000B9],
+ [0x0000BB, 0x0000BF],
+ [0x0001C0, 0x0001C3],
+ [0x0002B9, 0x0002BF],
+ [0x0002C2, 0x0002DF],
+ [0x0002E5, 0x000344],
+ [0x000346, 0x00036F],
+ [0x000374, 0x000375],
+ [0x000378, 0x000379],
+ [0x000380, 0x000385],
+ [0x000482, 0x000489],
+ [0x000557, 0x00055F],
+ [0x000589, 0x00109F],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x0010CF],
+ [0x001100, 0x00139F],
+ [0x0013F6, 0x0013F7],
+ [0x0013FE, 0x001C7F],
+ [0x001C89, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC0, 0x001CFF],
+ [0x001DC0, 0x001DFF],
+ [0x001F16, 0x001F17],
+ [0x001F1E, 0x001F1F],
+ [0x001F46, 0x001F47],
+ [0x001F4E, 0x001F4F],
+ [0x001F7E, 0x001F7F],
+ [0x001FBF, 0x001FC1],
+ [0x001FCD, 0x001FCF],
+ [0x001FD4, 0x001FD5],
+ [0x001FDC, 0x001FDF],
+ [0x001FED, 0x001FF1],
+ [0x001FFD, 0x002070],
+ [0x002072, 0x00207E],
+ [0x002080, 0x00208F],
+ [0x00209D, 0x002101],
+ [0x002103, 0x002106],
+ [0x002108, 0x002109],
+ [0x002116, 0x002118],
+ [0x00211E, 0x002123],
+ [0x002135, 0x002138],
+ [0x00213A, 0x00213B],
+ [0x002140, 0x002144],
+ [0x00214A, 0x00214D],
+ [0x00214F, 0x00215F],
+ [0x002180, 0x002182],
+ [0x002185, 0x0024B5],
+ [0x0024EA, 0x002BFF],
+ [0x002CE5, 0x002CEA],
+ [0x002CEF, 0x002CF1],
+ [0x002CF4, 0x002CFF],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x00A63F],
+ [0x00A66E, 0x00A67F],
+ [0x00A69E, 0x00A721],
+ [0x00A788, 0x00A78A],
+ [0x00A7CB, 0x00A7CF],
+ [0x00A7DA, 0x00A7F1],
+ [0x00A7FB, 0x00AB2F],
+ [0x00AB6A, 0x00AB6F],
+ [0x00ABC0, 0x00DBFF],
+ [0x00E000, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FF20],
+ [0x00FF3B, 0x00FF40],
+ [0x00FF5B, 0x0103FF],
+ [0x010450, 0x0104AF],
+ [0x0104D4, 0x0104D7],
+ [0x0104FC, 0x01056F],
+ [0x0105BD, 0x01077F],
+ [0x010781, 0x010782],
+ [0x0107BB, 0x010C7F],
+ [0x010CB3, 0x010CBF],
+ [0x010CF3, 0x01189F],
+ [0x0118E0, 0x016E3F],
+ [0x016E80, 0x01D3FF],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D50B, 0x01D50C],
+ [0x01D547, 0x01D549],
+ [0x01D6A6, 0x01D6A7],
+ [0x01D7CC, 0x01DEFF],
+ [0x01DF1F, 0x01DF24],
+ [0x01DF2B, 0x01E02F],
+ [0x01E06E, 0x01E8FF],
+ [0x01E944, 0x01F12F],
+ [0x01F14A, 0x01F14F],
+ [0x01F16A, 0x01F16F],
+ [0x01F18A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Cased}+$/u,
+ nonMatchSymbols,
+ "\\P{Cased}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Casefolded.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Casefolded.js
new file mode 100644
index 0000000000..8da744f12a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Casefolded.js
@@ -0,0 +1,1297 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Changes_When_Casefolded`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000B5,
+ 0x000100,
+ 0x000102,
+ 0x000104,
+ 0x000106,
+ 0x000108,
+ 0x00010A,
+ 0x00010C,
+ 0x00010E,
+ 0x000110,
+ 0x000112,
+ 0x000114,
+ 0x000116,
+ 0x000118,
+ 0x00011A,
+ 0x00011C,
+ 0x00011E,
+ 0x000120,
+ 0x000122,
+ 0x000124,
+ 0x000126,
+ 0x000128,
+ 0x00012A,
+ 0x00012C,
+ 0x00012E,
+ 0x000130,
+ 0x000132,
+ 0x000134,
+ 0x000136,
+ 0x000139,
+ 0x00013B,
+ 0x00013D,
+ 0x00013F,
+ 0x000141,
+ 0x000143,
+ 0x000145,
+ 0x000147,
+ 0x00014C,
+ 0x00014E,
+ 0x000150,
+ 0x000152,
+ 0x000154,
+ 0x000156,
+ 0x000158,
+ 0x00015A,
+ 0x00015C,
+ 0x00015E,
+ 0x000160,
+ 0x000162,
+ 0x000164,
+ 0x000166,
+ 0x000168,
+ 0x00016A,
+ 0x00016C,
+ 0x00016E,
+ 0x000170,
+ 0x000172,
+ 0x000174,
+ 0x000176,
+ 0x00017B,
+ 0x00017D,
+ 0x00017F,
+ 0x000184,
+ 0x0001A2,
+ 0x0001A4,
+ 0x0001A9,
+ 0x0001AC,
+ 0x0001B5,
+ 0x0001BC,
+ 0x0001CD,
+ 0x0001CF,
+ 0x0001D1,
+ 0x0001D3,
+ 0x0001D5,
+ 0x0001D7,
+ 0x0001D9,
+ 0x0001DB,
+ 0x0001DE,
+ 0x0001E0,
+ 0x0001E2,
+ 0x0001E4,
+ 0x0001E6,
+ 0x0001E8,
+ 0x0001EA,
+ 0x0001EC,
+ 0x0001EE,
+ 0x0001F4,
+ 0x0001FA,
+ 0x0001FC,
+ 0x0001FE,
+ 0x000200,
+ 0x000202,
+ 0x000204,
+ 0x000206,
+ 0x000208,
+ 0x00020A,
+ 0x00020C,
+ 0x00020E,
+ 0x000210,
+ 0x000212,
+ 0x000214,
+ 0x000216,
+ 0x000218,
+ 0x00021A,
+ 0x00021C,
+ 0x00021E,
+ 0x000220,
+ 0x000222,
+ 0x000224,
+ 0x000226,
+ 0x000228,
+ 0x00022A,
+ 0x00022C,
+ 0x00022E,
+ 0x000230,
+ 0x000232,
+ 0x000241,
+ 0x000248,
+ 0x00024A,
+ 0x00024C,
+ 0x00024E,
+ 0x000345,
+ 0x000370,
+ 0x000372,
+ 0x000376,
+ 0x00037F,
+ 0x000386,
+ 0x00038C,
+ 0x0003C2,
+ 0x0003D8,
+ 0x0003DA,
+ 0x0003DC,
+ 0x0003DE,
+ 0x0003E0,
+ 0x0003E2,
+ 0x0003E4,
+ 0x0003E6,
+ 0x0003E8,
+ 0x0003EA,
+ 0x0003EC,
+ 0x0003EE,
+ 0x0003F7,
+ 0x000460,
+ 0x000462,
+ 0x000464,
+ 0x000466,
+ 0x000468,
+ 0x00046A,
+ 0x00046C,
+ 0x00046E,
+ 0x000470,
+ 0x000472,
+ 0x000474,
+ 0x000476,
+ 0x000478,
+ 0x00047A,
+ 0x00047C,
+ 0x00047E,
+ 0x000480,
+ 0x00048A,
+ 0x00048C,
+ 0x00048E,
+ 0x000490,
+ 0x000492,
+ 0x000494,
+ 0x000496,
+ 0x000498,
+ 0x00049A,
+ 0x00049C,
+ 0x00049E,
+ 0x0004A0,
+ 0x0004A2,
+ 0x0004A4,
+ 0x0004A6,
+ 0x0004A8,
+ 0x0004AA,
+ 0x0004AC,
+ 0x0004AE,
+ 0x0004B0,
+ 0x0004B2,
+ 0x0004B4,
+ 0x0004B6,
+ 0x0004B8,
+ 0x0004BA,
+ 0x0004BC,
+ 0x0004BE,
+ 0x0004C3,
+ 0x0004C5,
+ 0x0004C7,
+ 0x0004C9,
+ 0x0004CB,
+ 0x0004CD,
+ 0x0004D0,
+ 0x0004D2,
+ 0x0004D4,
+ 0x0004D6,
+ 0x0004D8,
+ 0x0004DA,
+ 0x0004DC,
+ 0x0004DE,
+ 0x0004E0,
+ 0x0004E2,
+ 0x0004E4,
+ 0x0004E6,
+ 0x0004E8,
+ 0x0004EA,
+ 0x0004EC,
+ 0x0004EE,
+ 0x0004F0,
+ 0x0004F2,
+ 0x0004F4,
+ 0x0004F6,
+ 0x0004F8,
+ 0x0004FA,
+ 0x0004FC,
+ 0x0004FE,
+ 0x000500,
+ 0x000502,
+ 0x000504,
+ 0x000506,
+ 0x000508,
+ 0x00050A,
+ 0x00050C,
+ 0x00050E,
+ 0x000510,
+ 0x000512,
+ 0x000514,
+ 0x000516,
+ 0x000518,
+ 0x00051A,
+ 0x00051C,
+ 0x00051E,
+ 0x000520,
+ 0x000522,
+ 0x000524,
+ 0x000526,
+ 0x000528,
+ 0x00052A,
+ 0x00052C,
+ 0x00052E,
+ 0x000587,
+ 0x0010C7,
+ 0x0010CD,
+ 0x001E00,
+ 0x001E02,
+ 0x001E04,
+ 0x001E06,
+ 0x001E08,
+ 0x001E0A,
+ 0x001E0C,
+ 0x001E0E,
+ 0x001E10,
+ 0x001E12,
+ 0x001E14,
+ 0x001E16,
+ 0x001E18,
+ 0x001E1A,
+ 0x001E1C,
+ 0x001E1E,
+ 0x001E20,
+ 0x001E22,
+ 0x001E24,
+ 0x001E26,
+ 0x001E28,
+ 0x001E2A,
+ 0x001E2C,
+ 0x001E2E,
+ 0x001E30,
+ 0x001E32,
+ 0x001E34,
+ 0x001E36,
+ 0x001E38,
+ 0x001E3A,
+ 0x001E3C,
+ 0x001E3E,
+ 0x001E40,
+ 0x001E42,
+ 0x001E44,
+ 0x001E46,
+ 0x001E48,
+ 0x001E4A,
+ 0x001E4C,
+ 0x001E4E,
+ 0x001E50,
+ 0x001E52,
+ 0x001E54,
+ 0x001E56,
+ 0x001E58,
+ 0x001E5A,
+ 0x001E5C,
+ 0x001E5E,
+ 0x001E60,
+ 0x001E62,
+ 0x001E64,
+ 0x001E66,
+ 0x001E68,
+ 0x001E6A,
+ 0x001E6C,
+ 0x001E6E,
+ 0x001E70,
+ 0x001E72,
+ 0x001E74,
+ 0x001E76,
+ 0x001E78,
+ 0x001E7A,
+ 0x001E7C,
+ 0x001E7E,
+ 0x001E80,
+ 0x001E82,
+ 0x001E84,
+ 0x001E86,
+ 0x001E88,
+ 0x001E8A,
+ 0x001E8C,
+ 0x001E8E,
+ 0x001E90,
+ 0x001E92,
+ 0x001E94,
+ 0x001E9E,
+ 0x001EA0,
+ 0x001EA2,
+ 0x001EA4,
+ 0x001EA6,
+ 0x001EA8,
+ 0x001EAA,
+ 0x001EAC,
+ 0x001EAE,
+ 0x001EB0,
+ 0x001EB2,
+ 0x001EB4,
+ 0x001EB6,
+ 0x001EB8,
+ 0x001EBA,
+ 0x001EBC,
+ 0x001EBE,
+ 0x001EC0,
+ 0x001EC2,
+ 0x001EC4,
+ 0x001EC6,
+ 0x001EC8,
+ 0x001ECA,
+ 0x001ECC,
+ 0x001ECE,
+ 0x001ED0,
+ 0x001ED2,
+ 0x001ED4,
+ 0x001ED6,
+ 0x001ED8,
+ 0x001EDA,
+ 0x001EDC,
+ 0x001EDE,
+ 0x001EE0,
+ 0x001EE2,
+ 0x001EE4,
+ 0x001EE6,
+ 0x001EE8,
+ 0x001EEA,
+ 0x001EEC,
+ 0x001EEE,
+ 0x001EF0,
+ 0x001EF2,
+ 0x001EF4,
+ 0x001EF6,
+ 0x001EF8,
+ 0x001EFA,
+ 0x001EFC,
+ 0x001EFE,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x001F5F,
+ 0x002126,
+ 0x002132,
+ 0x002183,
+ 0x002C60,
+ 0x002C67,
+ 0x002C69,
+ 0x002C6B,
+ 0x002C72,
+ 0x002C75,
+ 0x002C82,
+ 0x002C84,
+ 0x002C86,
+ 0x002C88,
+ 0x002C8A,
+ 0x002C8C,
+ 0x002C8E,
+ 0x002C90,
+ 0x002C92,
+ 0x002C94,
+ 0x002C96,
+ 0x002C98,
+ 0x002C9A,
+ 0x002C9C,
+ 0x002C9E,
+ 0x002CA0,
+ 0x002CA2,
+ 0x002CA4,
+ 0x002CA6,
+ 0x002CA8,
+ 0x002CAA,
+ 0x002CAC,
+ 0x002CAE,
+ 0x002CB0,
+ 0x002CB2,
+ 0x002CB4,
+ 0x002CB6,
+ 0x002CB8,
+ 0x002CBA,
+ 0x002CBC,
+ 0x002CBE,
+ 0x002CC0,
+ 0x002CC2,
+ 0x002CC4,
+ 0x002CC6,
+ 0x002CC8,
+ 0x002CCA,
+ 0x002CCC,
+ 0x002CCE,
+ 0x002CD0,
+ 0x002CD2,
+ 0x002CD4,
+ 0x002CD6,
+ 0x002CD8,
+ 0x002CDA,
+ 0x002CDC,
+ 0x002CDE,
+ 0x002CE0,
+ 0x002CE2,
+ 0x002CEB,
+ 0x002CED,
+ 0x002CF2,
+ 0x00A640,
+ 0x00A642,
+ 0x00A644,
+ 0x00A646,
+ 0x00A648,
+ 0x00A64A,
+ 0x00A64C,
+ 0x00A64E,
+ 0x00A650,
+ 0x00A652,
+ 0x00A654,
+ 0x00A656,
+ 0x00A658,
+ 0x00A65A,
+ 0x00A65C,
+ 0x00A65E,
+ 0x00A660,
+ 0x00A662,
+ 0x00A664,
+ 0x00A666,
+ 0x00A668,
+ 0x00A66A,
+ 0x00A66C,
+ 0x00A680,
+ 0x00A682,
+ 0x00A684,
+ 0x00A686,
+ 0x00A688,
+ 0x00A68A,
+ 0x00A68C,
+ 0x00A68E,
+ 0x00A690,
+ 0x00A692,
+ 0x00A694,
+ 0x00A696,
+ 0x00A698,
+ 0x00A69A,
+ 0x00A722,
+ 0x00A724,
+ 0x00A726,
+ 0x00A728,
+ 0x00A72A,
+ 0x00A72C,
+ 0x00A72E,
+ 0x00A732,
+ 0x00A734,
+ 0x00A736,
+ 0x00A738,
+ 0x00A73A,
+ 0x00A73C,
+ 0x00A73E,
+ 0x00A740,
+ 0x00A742,
+ 0x00A744,
+ 0x00A746,
+ 0x00A748,
+ 0x00A74A,
+ 0x00A74C,
+ 0x00A74E,
+ 0x00A750,
+ 0x00A752,
+ 0x00A754,
+ 0x00A756,
+ 0x00A758,
+ 0x00A75A,
+ 0x00A75C,
+ 0x00A75E,
+ 0x00A760,
+ 0x00A762,
+ 0x00A764,
+ 0x00A766,
+ 0x00A768,
+ 0x00A76A,
+ 0x00A76C,
+ 0x00A76E,
+ 0x00A779,
+ 0x00A77B,
+ 0x00A780,
+ 0x00A782,
+ 0x00A784,
+ 0x00A786,
+ 0x00A78B,
+ 0x00A78D,
+ 0x00A790,
+ 0x00A792,
+ 0x00A796,
+ 0x00A798,
+ 0x00A79A,
+ 0x00A79C,
+ 0x00A79E,
+ 0x00A7A0,
+ 0x00A7A2,
+ 0x00A7A4,
+ 0x00A7A6,
+ 0x00A7A8,
+ 0x00A7B6,
+ 0x00A7B8,
+ 0x00A7BA,
+ 0x00A7BC,
+ 0x00A7BE,
+ 0x00A7C0,
+ 0x00A7C2,
+ 0x00A7C9,
+ 0x00A7D0,
+ 0x00A7D6,
+ 0x00A7D8,
+ 0x00A7F5
+ ],
+ ranges: [
+ [0x000041, 0x00005A],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000DF],
+ [0x000149, 0x00014A],
+ [0x000178, 0x000179],
+ [0x000181, 0x000182],
+ [0x000186, 0x000187],
+ [0x000189, 0x00018B],
+ [0x00018E, 0x000191],
+ [0x000193, 0x000194],
+ [0x000196, 0x000198],
+ [0x00019C, 0x00019D],
+ [0x00019F, 0x0001A0],
+ [0x0001A6, 0x0001A7],
+ [0x0001AE, 0x0001AF],
+ [0x0001B1, 0x0001B3],
+ [0x0001B7, 0x0001B8],
+ [0x0001C4, 0x0001C5],
+ [0x0001C7, 0x0001C8],
+ [0x0001CA, 0x0001CB],
+ [0x0001F1, 0x0001F2],
+ [0x0001F6, 0x0001F8],
+ [0x00023A, 0x00023B],
+ [0x00023D, 0x00023E],
+ [0x000243, 0x000246],
+ [0x000388, 0x00038A],
+ [0x00038E, 0x00038F],
+ [0x000391, 0x0003A1],
+ [0x0003A3, 0x0003AB],
+ [0x0003CF, 0x0003D1],
+ [0x0003D5, 0x0003D6],
+ [0x0003F0, 0x0003F1],
+ [0x0003F4, 0x0003F5],
+ [0x0003F9, 0x0003FA],
+ [0x0003FD, 0x00042F],
+ [0x0004C0, 0x0004C1],
+ [0x000531, 0x000556],
+ [0x0010A0, 0x0010C5],
+ [0x0013F8, 0x0013FD],
+ [0x001C80, 0x001C88],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CBF],
+ [0x001E9A, 0x001E9B],
+ [0x001F08, 0x001F0F],
+ [0x001F18, 0x001F1D],
+ [0x001F28, 0x001F2F],
+ [0x001F38, 0x001F3F],
+ [0x001F48, 0x001F4D],
+ [0x001F68, 0x001F6F],
+ [0x001F80, 0x001FAF],
+ [0x001FB2, 0x001FB4],
+ [0x001FB7, 0x001FBC],
+ [0x001FC2, 0x001FC4],
+ [0x001FC7, 0x001FCC],
+ [0x001FD8, 0x001FDB],
+ [0x001FE8, 0x001FEC],
+ [0x001FF2, 0x001FF4],
+ [0x001FF7, 0x001FFC],
+ [0x00212A, 0x00212B],
+ [0x002160, 0x00216F],
+ [0x0024B6, 0x0024CF],
+ [0x002C00, 0x002C2F],
+ [0x002C62, 0x002C64],
+ [0x002C6D, 0x002C70],
+ [0x002C7E, 0x002C80],
+ [0x00A77D, 0x00A77E],
+ [0x00A7AA, 0x00A7AE],
+ [0x00A7B0, 0x00A7B4],
+ [0x00A7C4, 0x00A7C7],
+ [0x00AB70, 0x00ABBF],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FF21, 0x00FF3A],
+ [0x010400, 0x010427],
+ [0x0104B0, 0x0104D3],
+ [0x010570, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010C80, 0x010CB2],
+ [0x0118A0, 0x0118BF],
+ [0x016E40, 0x016E5F],
+ [0x01E900, 0x01E921]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Changes_When_Casefolded}+$/u,
+ matchSymbols,
+ "\\p{Changes_When_Casefolded}"
+);
+testPropertyEscapes(
+ /^\p{CWCF}+$/u,
+ matchSymbols,
+ "\\p{CWCF}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000D7,
+ 0x000101,
+ 0x000103,
+ 0x000105,
+ 0x000107,
+ 0x000109,
+ 0x00010B,
+ 0x00010D,
+ 0x00010F,
+ 0x000111,
+ 0x000113,
+ 0x000115,
+ 0x000117,
+ 0x000119,
+ 0x00011B,
+ 0x00011D,
+ 0x00011F,
+ 0x000121,
+ 0x000123,
+ 0x000125,
+ 0x000127,
+ 0x000129,
+ 0x00012B,
+ 0x00012D,
+ 0x00012F,
+ 0x000131,
+ 0x000133,
+ 0x000135,
+ 0x00013A,
+ 0x00013C,
+ 0x00013E,
+ 0x000140,
+ 0x000142,
+ 0x000144,
+ 0x000146,
+ 0x000148,
+ 0x00014B,
+ 0x00014D,
+ 0x00014F,
+ 0x000151,
+ 0x000153,
+ 0x000155,
+ 0x000157,
+ 0x000159,
+ 0x00015B,
+ 0x00015D,
+ 0x00015F,
+ 0x000161,
+ 0x000163,
+ 0x000165,
+ 0x000167,
+ 0x000169,
+ 0x00016B,
+ 0x00016D,
+ 0x00016F,
+ 0x000171,
+ 0x000173,
+ 0x000175,
+ 0x000177,
+ 0x00017A,
+ 0x00017C,
+ 0x00017E,
+ 0x000180,
+ 0x000183,
+ 0x000185,
+ 0x000188,
+ 0x000192,
+ 0x000195,
+ 0x00019E,
+ 0x0001A1,
+ 0x0001A3,
+ 0x0001A5,
+ 0x0001A8,
+ 0x0001AD,
+ 0x0001B0,
+ 0x0001B4,
+ 0x0001B6,
+ 0x0001C6,
+ 0x0001C9,
+ 0x0001CC,
+ 0x0001CE,
+ 0x0001D0,
+ 0x0001D2,
+ 0x0001D4,
+ 0x0001D6,
+ 0x0001D8,
+ 0x0001DA,
+ 0x0001DF,
+ 0x0001E1,
+ 0x0001E3,
+ 0x0001E5,
+ 0x0001E7,
+ 0x0001E9,
+ 0x0001EB,
+ 0x0001ED,
+ 0x0001F3,
+ 0x0001F5,
+ 0x0001F9,
+ 0x0001FB,
+ 0x0001FD,
+ 0x0001FF,
+ 0x000201,
+ 0x000203,
+ 0x000205,
+ 0x000207,
+ 0x000209,
+ 0x00020B,
+ 0x00020D,
+ 0x00020F,
+ 0x000211,
+ 0x000213,
+ 0x000215,
+ 0x000217,
+ 0x000219,
+ 0x00021B,
+ 0x00021D,
+ 0x00021F,
+ 0x000221,
+ 0x000223,
+ 0x000225,
+ 0x000227,
+ 0x000229,
+ 0x00022B,
+ 0x00022D,
+ 0x00022F,
+ 0x000231,
+ 0x00023C,
+ 0x000242,
+ 0x000247,
+ 0x000249,
+ 0x00024B,
+ 0x00024D,
+ 0x000371,
+ 0x000387,
+ 0x00038B,
+ 0x00038D,
+ 0x000390,
+ 0x0003A2,
+ 0x0003D7,
+ 0x0003D9,
+ 0x0003DB,
+ 0x0003DD,
+ 0x0003DF,
+ 0x0003E1,
+ 0x0003E3,
+ 0x0003E5,
+ 0x0003E7,
+ 0x0003E9,
+ 0x0003EB,
+ 0x0003ED,
+ 0x0003EF,
+ 0x0003F6,
+ 0x0003F8,
+ 0x000461,
+ 0x000463,
+ 0x000465,
+ 0x000467,
+ 0x000469,
+ 0x00046B,
+ 0x00046D,
+ 0x00046F,
+ 0x000471,
+ 0x000473,
+ 0x000475,
+ 0x000477,
+ 0x000479,
+ 0x00047B,
+ 0x00047D,
+ 0x00047F,
+ 0x00048B,
+ 0x00048D,
+ 0x00048F,
+ 0x000491,
+ 0x000493,
+ 0x000495,
+ 0x000497,
+ 0x000499,
+ 0x00049B,
+ 0x00049D,
+ 0x00049F,
+ 0x0004A1,
+ 0x0004A3,
+ 0x0004A5,
+ 0x0004A7,
+ 0x0004A9,
+ 0x0004AB,
+ 0x0004AD,
+ 0x0004AF,
+ 0x0004B1,
+ 0x0004B3,
+ 0x0004B5,
+ 0x0004B7,
+ 0x0004B9,
+ 0x0004BB,
+ 0x0004BD,
+ 0x0004BF,
+ 0x0004C2,
+ 0x0004C4,
+ 0x0004C6,
+ 0x0004C8,
+ 0x0004CA,
+ 0x0004CC,
+ 0x0004D1,
+ 0x0004D3,
+ 0x0004D5,
+ 0x0004D7,
+ 0x0004D9,
+ 0x0004DB,
+ 0x0004DD,
+ 0x0004DF,
+ 0x0004E1,
+ 0x0004E3,
+ 0x0004E5,
+ 0x0004E7,
+ 0x0004E9,
+ 0x0004EB,
+ 0x0004ED,
+ 0x0004EF,
+ 0x0004F1,
+ 0x0004F3,
+ 0x0004F5,
+ 0x0004F7,
+ 0x0004F9,
+ 0x0004FB,
+ 0x0004FD,
+ 0x0004FF,
+ 0x000501,
+ 0x000503,
+ 0x000505,
+ 0x000507,
+ 0x000509,
+ 0x00050B,
+ 0x00050D,
+ 0x00050F,
+ 0x000511,
+ 0x000513,
+ 0x000515,
+ 0x000517,
+ 0x000519,
+ 0x00051B,
+ 0x00051D,
+ 0x00051F,
+ 0x000521,
+ 0x000523,
+ 0x000525,
+ 0x000527,
+ 0x000529,
+ 0x00052B,
+ 0x00052D,
+ 0x0010C6,
+ 0x001E01,
+ 0x001E03,
+ 0x001E05,
+ 0x001E07,
+ 0x001E09,
+ 0x001E0B,
+ 0x001E0D,
+ 0x001E0F,
+ 0x001E11,
+ 0x001E13,
+ 0x001E15,
+ 0x001E17,
+ 0x001E19,
+ 0x001E1B,
+ 0x001E1D,
+ 0x001E1F,
+ 0x001E21,
+ 0x001E23,
+ 0x001E25,
+ 0x001E27,
+ 0x001E29,
+ 0x001E2B,
+ 0x001E2D,
+ 0x001E2F,
+ 0x001E31,
+ 0x001E33,
+ 0x001E35,
+ 0x001E37,
+ 0x001E39,
+ 0x001E3B,
+ 0x001E3D,
+ 0x001E3F,
+ 0x001E41,
+ 0x001E43,
+ 0x001E45,
+ 0x001E47,
+ 0x001E49,
+ 0x001E4B,
+ 0x001E4D,
+ 0x001E4F,
+ 0x001E51,
+ 0x001E53,
+ 0x001E55,
+ 0x001E57,
+ 0x001E59,
+ 0x001E5B,
+ 0x001E5D,
+ 0x001E5F,
+ 0x001E61,
+ 0x001E63,
+ 0x001E65,
+ 0x001E67,
+ 0x001E69,
+ 0x001E6B,
+ 0x001E6D,
+ 0x001E6F,
+ 0x001E71,
+ 0x001E73,
+ 0x001E75,
+ 0x001E77,
+ 0x001E79,
+ 0x001E7B,
+ 0x001E7D,
+ 0x001E7F,
+ 0x001E81,
+ 0x001E83,
+ 0x001E85,
+ 0x001E87,
+ 0x001E89,
+ 0x001E8B,
+ 0x001E8D,
+ 0x001E8F,
+ 0x001E91,
+ 0x001E93,
+ 0x001E9F,
+ 0x001EA1,
+ 0x001EA3,
+ 0x001EA5,
+ 0x001EA7,
+ 0x001EA9,
+ 0x001EAB,
+ 0x001EAD,
+ 0x001EAF,
+ 0x001EB1,
+ 0x001EB3,
+ 0x001EB5,
+ 0x001EB7,
+ 0x001EB9,
+ 0x001EBB,
+ 0x001EBD,
+ 0x001EBF,
+ 0x001EC1,
+ 0x001EC3,
+ 0x001EC5,
+ 0x001EC7,
+ 0x001EC9,
+ 0x001ECB,
+ 0x001ECD,
+ 0x001ECF,
+ 0x001ED1,
+ 0x001ED3,
+ 0x001ED5,
+ 0x001ED7,
+ 0x001ED9,
+ 0x001EDB,
+ 0x001EDD,
+ 0x001EDF,
+ 0x001EE1,
+ 0x001EE3,
+ 0x001EE5,
+ 0x001EE7,
+ 0x001EE9,
+ 0x001EEB,
+ 0x001EED,
+ 0x001EEF,
+ 0x001EF1,
+ 0x001EF3,
+ 0x001EF5,
+ 0x001EF7,
+ 0x001EF9,
+ 0x001EFB,
+ 0x001EFD,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x002C61,
+ 0x002C68,
+ 0x002C6A,
+ 0x002C6C,
+ 0x002C71,
+ 0x002C81,
+ 0x002C83,
+ 0x002C85,
+ 0x002C87,
+ 0x002C89,
+ 0x002C8B,
+ 0x002C8D,
+ 0x002C8F,
+ 0x002C91,
+ 0x002C93,
+ 0x002C95,
+ 0x002C97,
+ 0x002C99,
+ 0x002C9B,
+ 0x002C9D,
+ 0x002C9F,
+ 0x002CA1,
+ 0x002CA3,
+ 0x002CA5,
+ 0x002CA7,
+ 0x002CA9,
+ 0x002CAB,
+ 0x002CAD,
+ 0x002CAF,
+ 0x002CB1,
+ 0x002CB3,
+ 0x002CB5,
+ 0x002CB7,
+ 0x002CB9,
+ 0x002CBB,
+ 0x002CBD,
+ 0x002CBF,
+ 0x002CC1,
+ 0x002CC3,
+ 0x002CC5,
+ 0x002CC7,
+ 0x002CC9,
+ 0x002CCB,
+ 0x002CCD,
+ 0x002CCF,
+ 0x002CD1,
+ 0x002CD3,
+ 0x002CD5,
+ 0x002CD7,
+ 0x002CD9,
+ 0x002CDB,
+ 0x002CDD,
+ 0x002CDF,
+ 0x002CE1,
+ 0x002CEC,
+ 0x00A641,
+ 0x00A643,
+ 0x00A645,
+ 0x00A647,
+ 0x00A649,
+ 0x00A64B,
+ 0x00A64D,
+ 0x00A64F,
+ 0x00A651,
+ 0x00A653,
+ 0x00A655,
+ 0x00A657,
+ 0x00A659,
+ 0x00A65B,
+ 0x00A65D,
+ 0x00A65F,
+ 0x00A661,
+ 0x00A663,
+ 0x00A665,
+ 0x00A667,
+ 0x00A669,
+ 0x00A66B,
+ 0x00A681,
+ 0x00A683,
+ 0x00A685,
+ 0x00A687,
+ 0x00A689,
+ 0x00A68B,
+ 0x00A68D,
+ 0x00A68F,
+ 0x00A691,
+ 0x00A693,
+ 0x00A695,
+ 0x00A697,
+ 0x00A699,
+ 0x00A723,
+ 0x00A725,
+ 0x00A727,
+ 0x00A729,
+ 0x00A72B,
+ 0x00A72D,
+ 0x00A733,
+ 0x00A735,
+ 0x00A737,
+ 0x00A739,
+ 0x00A73B,
+ 0x00A73D,
+ 0x00A73F,
+ 0x00A741,
+ 0x00A743,
+ 0x00A745,
+ 0x00A747,
+ 0x00A749,
+ 0x00A74B,
+ 0x00A74D,
+ 0x00A74F,
+ 0x00A751,
+ 0x00A753,
+ 0x00A755,
+ 0x00A757,
+ 0x00A759,
+ 0x00A75B,
+ 0x00A75D,
+ 0x00A75F,
+ 0x00A761,
+ 0x00A763,
+ 0x00A765,
+ 0x00A767,
+ 0x00A769,
+ 0x00A76B,
+ 0x00A76D,
+ 0x00A77A,
+ 0x00A77C,
+ 0x00A77F,
+ 0x00A781,
+ 0x00A783,
+ 0x00A785,
+ 0x00A78C,
+ 0x00A791,
+ 0x00A797,
+ 0x00A799,
+ 0x00A79B,
+ 0x00A79D,
+ 0x00A79F,
+ 0x00A7A1,
+ 0x00A7A3,
+ 0x00A7A5,
+ 0x00A7A7,
+ 0x00A7A9,
+ 0x00A7AF,
+ 0x00A7B5,
+ 0x00A7B7,
+ 0x00A7B9,
+ 0x00A7BB,
+ 0x00A7BD,
+ 0x00A7BF,
+ 0x00A7C1,
+ 0x00A7C3,
+ 0x00A7C8,
+ 0x00A7D7,
+ 0x01057B,
+ 0x01058B,
+ 0x010593
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000040],
+ [0x00005B, 0x0000B4],
+ [0x0000B6, 0x0000BF],
+ [0x0000E0, 0x0000FF],
+ [0x000137, 0x000138],
+ [0x00018C, 0x00018D],
+ [0x000199, 0x00019B],
+ [0x0001AA, 0x0001AB],
+ [0x0001B9, 0x0001BB],
+ [0x0001BD, 0x0001C3],
+ [0x0001DC, 0x0001DD],
+ [0x0001EF, 0x0001F0],
+ [0x000233, 0x000239],
+ [0x00023F, 0x000240],
+ [0x00024F, 0x000344],
+ [0x000346, 0x00036F],
+ [0x000373, 0x000375],
+ [0x000377, 0x00037E],
+ [0x000380, 0x000385],
+ [0x0003AC, 0x0003C1],
+ [0x0003C3, 0x0003CE],
+ [0x0003D2, 0x0003D4],
+ [0x0003F2, 0x0003F3],
+ [0x0003FB, 0x0003FC],
+ [0x000430, 0x00045F],
+ [0x000481, 0x000489],
+ [0x0004CE, 0x0004CF],
+ [0x00052F, 0x000530],
+ [0x000557, 0x000586],
+ [0x000588, 0x00109F],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x0013F7],
+ [0x0013FE, 0x001C7F],
+ [0x001C89, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC0, 0x001DFF],
+ [0x001E95, 0x001E99],
+ [0x001E9C, 0x001E9D],
+ [0x001EFF, 0x001F07],
+ [0x001F10, 0x001F17],
+ [0x001F1E, 0x001F27],
+ [0x001F30, 0x001F37],
+ [0x001F40, 0x001F47],
+ [0x001F4E, 0x001F58],
+ [0x001F60, 0x001F67],
+ [0x001F70, 0x001F7F],
+ [0x001FB0, 0x001FB1],
+ [0x001FB5, 0x001FB6],
+ [0x001FBD, 0x001FC1],
+ [0x001FC5, 0x001FC6],
+ [0x001FCD, 0x001FD7],
+ [0x001FDC, 0x001FE7],
+ [0x001FED, 0x001FF1],
+ [0x001FF5, 0x001FF6],
+ [0x001FFD, 0x002125],
+ [0x002127, 0x002129],
+ [0x00212C, 0x002131],
+ [0x002133, 0x00215F],
+ [0x002170, 0x002182],
+ [0x002184, 0x0024B5],
+ [0x0024D0, 0x002BFF],
+ [0x002C30, 0x002C5F],
+ [0x002C65, 0x002C66],
+ [0x002C73, 0x002C74],
+ [0x002C76, 0x002C7D],
+ [0x002CE3, 0x002CEA],
+ [0x002CEE, 0x002CF1],
+ [0x002CF3, 0x00A63F],
+ [0x00A66D, 0x00A67F],
+ [0x00A69B, 0x00A721],
+ [0x00A72F, 0x00A731],
+ [0x00A76F, 0x00A778],
+ [0x00A787, 0x00A78A],
+ [0x00A78E, 0x00A78F],
+ [0x00A793, 0x00A795],
+ [0x00A7CA, 0x00A7CF],
+ [0x00A7D1, 0x00A7D5],
+ [0x00A7D9, 0x00A7F4],
+ [0x00A7F6, 0x00AB6F],
+ [0x00ABC0, 0x00DBFF],
+ [0x00E000, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FF20],
+ [0x00FF3B, 0x0103FF],
+ [0x010428, 0x0104AF],
+ [0x0104D4, 0x01056F],
+ [0x010596, 0x010C7F],
+ [0x010CB3, 0x01189F],
+ [0x0118C0, 0x016E3F],
+ [0x016E60, 0x01E8FF],
+ [0x01E922, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Changes_When_Casefolded}+$/u,
+ nonMatchSymbols,
+ "\\P{Changes_When_Casefolded}"
+);
+testPropertyEscapes(
+ /^\P{CWCF}+$/u,
+ nonMatchSymbols,
+ "\\P{CWCF}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Casemapped.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Casemapped.js
new file mode 100644
index 0000000000..4471237db0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Casemapped.js
@@ -0,0 +1,315 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Changes_When_Casemapped`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000B5,
+ 0x0001BF,
+ 0x000259,
+ 0x000263,
+ 0x00026F,
+ 0x000275,
+ 0x00027D,
+ 0x000280,
+ 0x000292,
+ 0x000345,
+ 0x00037F,
+ 0x000386,
+ 0x00038C,
+ 0x0010C7,
+ 0x0010CD,
+ 0x001D79,
+ 0x001D7D,
+ 0x001D8E,
+ 0x001E9E,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x001FBE,
+ 0x002126,
+ 0x002132,
+ 0x00214E,
+ 0x002D27,
+ 0x002D2D,
+ 0x00AB53
+ ],
+ ranges: [
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000F6],
+ [0x0000F8, 0x000137],
+ [0x000139, 0x00018C],
+ [0x00018E, 0x00019A],
+ [0x00019C, 0x0001A9],
+ [0x0001AC, 0x0001B9],
+ [0x0001BC, 0x0001BD],
+ [0x0001C4, 0x000220],
+ [0x000222, 0x000233],
+ [0x00023A, 0x000254],
+ [0x000256, 0x000257],
+ [0x00025B, 0x00025C],
+ [0x000260, 0x000261],
+ [0x000265, 0x000266],
+ [0x000268, 0x00026C],
+ [0x000271, 0x000272],
+ [0x000282, 0x000283],
+ [0x000287, 0x00028C],
+ [0x00029D, 0x00029E],
+ [0x000370, 0x000373],
+ [0x000376, 0x000377],
+ [0x00037B, 0x00037D],
+ [0x000388, 0x00038A],
+ [0x00038E, 0x0003A1],
+ [0x0003A3, 0x0003D1],
+ [0x0003D5, 0x0003F5],
+ [0x0003F7, 0x0003FB],
+ [0x0003FD, 0x000481],
+ [0x00048A, 0x00052F],
+ [0x000531, 0x000556],
+ [0x000561, 0x000587],
+ [0x0010A0, 0x0010C5],
+ [0x0010D0, 0x0010FA],
+ [0x0010FD, 0x0010FF],
+ [0x0013A0, 0x0013F5],
+ [0x0013F8, 0x0013FD],
+ [0x001C80, 0x001C88],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CBF],
+ [0x001E00, 0x001E9B],
+ [0x001EA0, 0x001F15],
+ [0x001F18, 0x001F1D],
+ [0x001F20, 0x001F45],
+ [0x001F48, 0x001F4D],
+ [0x001F50, 0x001F57],
+ [0x001F5F, 0x001F7D],
+ [0x001F80, 0x001FB4],
+ [0x001FB6, 0x001FBC],
+ [0x001FC2, 0x001FC4],
+ [0x001FC6, 0x001FCC],
+ [0x001FD0, 0x001FD3],
+ [0x001FD6, 0x001FDB],
+ [0x001FE0, 0x001FEC],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FFC],
+ [0x00212A, 0x00212B],
+ [0x002160, 0x00217F],
+ [0x002183, 0x002184],
+ [0x0024B6, 0x0024E9],
+ [0x002C00, 0x002C70],
+ [0x002C72, 0x002C73],
+ [0x002C75, 0x002C76],
+ [0x002C7E, 0x002CE3],
+ [0x002CEB, 0x002CEE],
+ [0x002CF2, 0x002CF3],
+ [0x002D00, 0x002D25],
+ [0x00A640, 0x00A66D],
+ [0x00A680, 0x00A69B],
+ [0x00A722, 0x00A72F],
+ [0x00A732, 0x00A76F],
+ [0x00A779, 0x00A787],
+ [0x00A78B, 0x00A78D],
+ [0x00A790, 0x00A794],
+ [0x00A796, 0x00A7AE],
+ [0x00A7B0, 0x00A7CA],
+ [0x00A7D0, 0x00A7D1],
+ [0x00A7D6, 0x00A7D9],
+ [0x00A7F5, 0x00A7F6],
+ [0x00AB70, 0x00ABBF],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FF21, 0x00FF3A],
+ [0x00FF41, 0x00FF5A],
+ [0x010400, 0x01044F],
+ [0x0104B0, 0x0104D3],
+ [0x0104D8, 0x0104FB],
+ [0x010570, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC],
+ [0x010C80, 0x010CB2],
+ [0x010CC0, 0x010CF2],
+ [0x0118A0, 0x0118DF],
+ [0x016E40, 0x016E7F],
+ [0x01E900, 0x01E943]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Changes_When_Casemapped}+$/u,
+ matchSymbols,
+ "\\p{Changes_When_Casemapped}"
+);
+testPropertyEscapes(
+ /^\p{CWCM}+$/u,
+ matchSymbols,
+ "\\p{CWCM}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000D7,
+ 0x0000F7,
+ 0x000138,
+ 0x00018D,
+ 0x00019B,
+ 0x0001BE,
+ 0x000221,
+ 0x000255,
+ 0x000258,
+ 0x00025A,
+ 0x000262,
+ 0x000264,
+ 0x000267,
+ 0x000270,
+ 0x000281,
+ 0x00037E,
+ 0x000387,
+ 0x00038B,
+ 0x00038D,
+ 0x0003A2,
+ 0x0003F6,
+ 0x0003FC,
+ 0x000530,
+ 0x0010C6,
+ 0x001E9F,
+ 0x001F58,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x001FB5,
+ 0x001FBD,
+ 0x001FC5,
+ 0x001FF5,
+ 0x002C71,
+ 0x002C74,
+ 0x002D26,
+ 0x00A795,
+ 0x00A7AF,
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x010596,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000040],
+ [0x00005B, 0x000060],
+ [0x00007B, 0x0000B4],
+ [0x0000B6, 0x0000BF],
+ [0x0001AA, 0x0001AB],
+ [0x0001BA, 0x0001BB],
+ [0x0001C0, 0x0001C3],
+ [0x000234, 0x000239],
+ [0x00025D, 0x00025F],
+ [0x00026D, 0x00026E],
+ [0x000273, 0x000274],
+ [0x000276, 0x00027C],
+ [0x00027E, 0x00027F],
+ [0x000284, 0x000286],
+ [0x00028D, 0x000291],
+ [0x000293, 0x00029C],
+ [0x00029F, 0x000344],
+ [0x000346, 0x00036F],
+ [0x000374, 0x000375],
+ [0x000378, 0x00037A],
+ [0x000380, 0x000385],
+ [0x0003D2, 0x0003D4],
+ [0x000482, 0x000489],
+ [0x000557, 0x000560],
+ [0x000588, 0x00109F],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x0010CF],
+ [0x0010FB, 0x0010FC],
+ [0x001100, 0x00139F],
+ [0x0013F6, 0x0013F7],
+ [0x0013FE, 0x001C7F],
+ [0x001C89, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC0, 0x001D78],
+ [0x001D7A, 0x001D7C],
+ [0x001D7E, 0x001D8D],
+ [0x001D8F, 0x001DFF],
+ [0x001E9C, 0x001E9D],
+ [0x001F16, 0x001F17],
+ [0x001F1E, 0x001F1F],
+ [0x001F46, 0x001F47],
+ [0x001F4E, 0x001F4F],
+ [0x001F7E, 0x001F7F],
+ [0x001FBF, 0x001FC1],
+ [0x001FCD, 0x001FCF],
+ [0x001FD4, 0x001FD5],
+ [0x001FDC, 0x001FDF],
+ [0x001FED, 0x001FF1],
+ [0x001FFD, 0x002125],
+ [0x002127, 0x002129],
+ [0x00212C, 0x002131],
+ [0x002133, 0x00214D],
+ [0x00214F, 0x00215F],
+ [0x002180, 0x002182],
+ [0x002185, 0x0024B5],
+ [0x0024EA, 0x002BFF],
+ [0x002C77, 0x002C7D],
+ [0x002CE4, 0x002CEA],
+ [0x002CEF, 0x002CF1],
+ [0x002CF4, 0x002CFF],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x00A63F],
+ [0x00A66E, 0x00A67F],
+ [0x00A69C, 0x00A721],
+ [0x00A730, 0x00A731],
+ [0x00A770, 0x00A778],
+ [0x00A788, 0x00A78A],
+ [0x00A78E, 0x00A78F],
+ [0x00A7CB, 0x00A7CF],
+ [0x00A7D2, 0x00A7D5],
+ [0x00A7DA, 0x00A7F4],
+ [0x00A7F7, 0x00AB52],
+ [0x00AB54, 0x00AB6F],
+ [0x00ABC0, 0x00DBFF],
+ [0x00E000, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FF20],
+ [0x00FF3B, 0x00FF40],
+ [0x00FF5B, 0x0103FF],
+ [0x010450, 0x0104AF],
+ [0x0104D4, 0x0104D7],
+ [0x0104FC, 0x01056F],
+ [0x0105BD, 0x010C7F],
+ [0x010CB3, 0x010CBF],
+ [0x010CF3, 0x01189F],
+ [0x0118E0, 0x016E3F],
+ [0x016E80, 0x01E8FF],
+ [0x01E944, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Changes_When_Casemapped}+$/u,
+ nonMatchSymbols,
+ "\\P{Changes_When_Casemapped}"
+);
+testPropertyEscapes(
+ /^\P{CWCM}+$/u,
+ nonMatchSymbols,
+ "\\P{CWCM}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Lowercased.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Lowercased.js
new file mode 100644
index 0000000000..b3c0f0f51b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Lowercased.js
@@ -0,0 +1,1271 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Changes_When_Lowercased`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000100,
+ 0x000102,
+ 0x000104,
+ 0x000106,
+ 0x000108,
+ 0x00010A,
+ 0x00010C,
+ 0x00010E,
+ 0x000110,
+ 0x000112,
+ 0x000114,
+ 0x000116,
+ 0x000118,
+ 0x00011A,
+ 0x00011C,
+ 0x00011E,
+ 0x000120,
+ 0x000122,
+ 0x000124,
+ 0x000126,
+ 0x000128,
+ 0x00012A,
+ 0x00012C,
+ 0x00012E,
+ 0x000130,
+ 0x000132,
+ 0x000134,
+ 0x000136,
+ 0x000139,
+ 0x00013B,
+ 0x00013D,
+ 0x00013F,
+ 0x000141,
+ 0x000143,
+ 0x000145,
+ 0x000147,
+ 0x00014A,
+ 0x00014C,
+ 0x00014E,
+ 0x000150,
+ 0x000152,
+ 0x000154,
+ 0x000156,
+ 0x000158,
+ 0x00015A,
+ 0x00015C,
+ 0x00015E,
+ 0x000160,
+ 0x000162,
+ 0x000164,
+ 0x000166,
+ 0x000168,
+ 0x00016A,
+ 0x00016C,
+ 0x00016E,
+ 0x000170,
+ 0x000172,
+ 0x000174,
+ 0x000176,
+ 0x00017B,
+ 0x00017D,
+ 0x000184,
+ 0x0001A2,
+ 0x0001A4,
+ 0x0001A9,
+ 0x0001AC,
+ 0x0001B5,
+ 0x0001BC,
+ 0x0001CD,
+ 0x0001CF,
+ 0x0001D1,
+ 0x0001D3,
+ 0x0001D5,
+ 0x0001D7,
+ 0x0001D9,
+ 0x0001DB,
+ 0x0001DE,
+ 0x0001E0,
+ 0x0001E2,
+ 0x0001E4,
+ 0x0001E6,
+ 0x0001E8,
+ 0x0001EA,
+ 0x0001EC,
+ 0x0001EE,
+ 0x0001F4,
+ 0x0001FA,
+ 0x0001FC,
+ 0x0001FE,
+ 0x000200,
+ 0x000202,
+ 0x000204,
+ 0x000206,
+ 0x000208,
+ 0x00020A,
+ 0x00020C,
+ 0x00020E,
+ 0x000210,
+ 0x000212,
+ 0x000214,
+ 0x000216,
+ 0x000218,
+ 0x00021A,
+ 0x00021C,
+ 0x00021E,
+ 0x000220,
+ 0x000222,
+ 0x000224,
+ 0x000226,
+ 0x000228,
+ 0x00022A,
+ 0x00022C,
+ 0x00022E,
+ 0x000230,
+ 0x000232,
+ 0x000241,
+ 0x000248,
+ 0x00024A,
+ 0x00024C,
+ 0x00024E,
+ 0x000370,
+ 0x000372,
+ 0x000376,
+ 0x00037F,
+ 0x000386,
+ 0x00038C,
+ 0x0003CF,
+ 0x0003D8,
+ 0x0003DA,
+ 0x0003DC,
+ 0x0003DE,
+ 0x0003E0,
+ 0x0003E2,
+ 0x0003E4,
+ 0x0003E6,
+ 0x0003E8,
+ 0x0003EA,
+ 0x0003EC,
+ 0x0003EE,
+ 0x0003F4,
+ 0x0003F7,
+ 0x000460,
+ 0x000462,
+ 0x000464,
+ 0x000466,
+ 0x000468,
+ 0x00046A,
+ 0x00046C,
+ 0x00046E,
+ 0x000470,
+ 0x000472,
+ 0x000474,
+ 0x000476,
+ 0x000478,
+ 0x00047A,
+ 0x00047C,
+ 0x00047E,
+ 0x000480,
+ 0x00048A,
+ 0x00048C,
+ 0x00048E,
+ 0x000490,
+ 0x000492,
+ 0x000494,
+ 0x000496,
+ 0x000498,
+ 0x00049A,
+ 0x00049C,
+ 0x00049E,
+ 0x0004A0,
+ 0x0004A2,
+ 0x0004A4,
+ 0x0004A6,
+ 0x0004A8,
+ 0x0004AA,
+ 0x0004AC,
+ 0x0004AE,
+ 0x0004B0,
+ 0x0004B2,
+ 0x0004B4,
+ 0x0004B6,
+ 0x0004B8,
+ 0x0004BA,
+ 0x0004BC,
+ 0x0004BE,
+ 0x0004C3,
+ 0x0004C5,
+ 0x0004C7,
+ 0x0004C9,
+ 0x0004CB,
+ 0x0004CD,
+ 0x0004D0,
+ 0x0004D2,
+ 0x0004D4,
+ 0x0004D6,
+ 0x0004D8,
+ 0x0004DA,
+ 0x0004DC,
+ 0x0004DE,
+ 0x0004E0,
+ 0x0004E2,
+ 0x0004E4,
+ 0x0004E6,
+ 0x0004E8,
+ 0x0004EA,
+ 0x0004EC,
+ 0x0004EE,
+ 0x0004F0,
+ 0x0004F2,
+ 0x0004F4,
+ 0x0004F6,
+ 0x0004F8,
+ 0x0004FA,
+ 0x0004FC,
+ 0x0004FE,
+ 0x000500,
+ 0x000502,
+ 0x000504,
+ 0x000506,
+ 0x000508,
+ 0x00050A,
+ 0x00050C,
+ 0x00050E,
+ 0x000510,
+ 0x000512,
+ 0x000514,
+ 0x000516,
+ 0x000518,
+ 0x00051A,
+ 0x00051C,
+ 0x00051E,
+ 0x000520,
+ 0x000522,
+ 0x000524,
+ 0x000526,
+ 0x000528,
+ 0x00052A,
+ 0x00052C,
+ 0x00052E,
+ 0x0010C7,
+ 0x0010CD,
+ 0x001E00,
+ 0x001E02,
+ 0x001E04,
+ 0x001E06,
+ 0x001E08,
+ 0x001E0A,
+ 0x001E0C,
+ 0x001E0E,
+ 0x001E10,
+ 0x001E12,
+ 0x001E14,
+ 0x001E16,
+ 0x001E18,
+ 0x001E1A,
+ 0x001E1C,
+ 0x001E1E,
+ 0x001E20,
+ 0x001E22,
+ 0x001E24,
+ 0x001E26,
+ 0x001E28,
+ 0x001E2A,
+ 0x001E2C,
+ 0x001E2E,
+ 0x001E30,
+ 0x001E32,
+ 0x001E34,
+ 0x001E36,
+ 0x001E38,
+ 0x001E3A,
+ 0x001E3C,
+ 0x001E3E,
+ 0x001E40,
+ 0x001E42,
+ 0x001E44,
+ 0x001E46,
+ 0x001E48,
+ 0x001E4A,
+ 0x001E4C,
+ 0x001E4E,
+ 0x001E50,
+ 0x001E52,
+ 0x001E54,
+ 0x001E56,
+ 0x001E58,
+ 0x001E5A,
+ 0x001E5C,
+ 0x001E5E,
+ 0x001E60,
+ 0x001E62,
+ 0x001E64,
+ 0x001E66,
+ 0x001E68,
+ 0x001E6A,
+ 0x001E6C,
+ 0x001E6E,
+ 0x001E70,
+ 0x001E72,
+ 0x001E74,
+ 0x001E76,
+ 0x001E78,
+ 0x001E7A,
+ 0x001E7C,
+ 0x001E7E,
+ 0x001E80,
+ 0x001E82,
+ 0x001E84,
+ 0x001E86,
+ 0x001E88,
+ 0x001E8A,
+ 0x001E8C,
+ 0x001E8E,
+ 0x001E90,
+ 0x001E92,
+ 0x001E94,
+ 0x001E9E,
+ 0x001EA0,
+ 0x001EA2,
+ 0x001EA4,
+ 0x001EA6,
+ 0x001EA8,
+ 0x001EAA,
+ 0x001EAC,
+ 0x001EAE,
+ 0x001EB0,
+ 0x001EB2,
+ 0x001EB4,
+ 0x001EB6,
+ 0x001EB8,
+ 0x001EBA,
+ 0x001EBC,
+ 0x001EBE,
+ 0x001EC0,
+ 0x001EC2,
+ 0x001EC4,
+ 0x001EC6,
+ 0x001EC8,
+ 0x001ECA,
+ 0x001ECC,
+ 0x001ECE,
+ 0x001ED0,
+ 0x001ED2,
+ 0x001ED4,
+ 0x001ED6,
+ 0x001ED8,
+ 0x001EDA,
+ 0x001EDC,
+ 0x001EDE,
+ 0x001EE0,
+ 0x001EE2,
+ 0x001EE4,
+ 0x001EE6,
+ 0x001EE8,
+ 0x001EEA,
+ 0x001EEC,
+ 0x001EEE,
+ 0x001EF0,
+ 0x001EF2,
+ 0x001EF4,
+ 0x001EF6,
+ 0x001EF8,
+ 0x001EFA,
+ 0x001EFC,
+ 0x001EFE,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x001F5F,
+ 0x002126,
+ 0x002132,
+ 0x002183,
+ 0x002C60,
+ 0x002C67,
+ 0x002C69,
+ 0x002C6B,
+ 0x002C72,
+ 0x002C75,
+ 0x002C82,
+ 0x002C84,
+ 0x002C86,
+ 0x002C88,
+ 0x002C8A,
+ 0x002C8C,
+ 0x002C8E,
+ 0x002C90,
+ 0x002C92,
+ 0x002C94,
+ 0x002C96,
+ 0x002C98,
+ 0x002C9A,
+ 0x002C9C,
+ 0x002C9E,
+ 0x002CA0,
+ 0x002CA2,
+ 0x002CA4,
+ 0x002CA6,
+ 0x002CA8,
+ 0x002CAA,
+ 0x002CAC,
+ 0x002CAE,
+ 0x002CB0,
+ 0x002CB2,
+ 0x002CB4,
+ 0x002CB6,
+ 0x002CB8,
+ 0x002CBA,
+ 0x002CBC,
+ 0x002CBE,
+ 0x002CC0,
+ 0x002CC2,
+ 0x002CC4,
+ 0x002CC6,
+ 0x002CC8,
+ 0x002CCA,
+ 0x002CCC,
+ 0x002CCE,
+ 0x002CD0,
+ 0x002CD2,
+ 0x002CD4,
+ 0x002CD6,
+ 0x002CD8,
+ 0x002CDA,
+ 0x002CDC,
+ 0x002CDE,
+ 0x002CE0,
+ 0x002CE2,
+ 0x002CEB,
+ 0x002CED,
+ 0x002CF2,
+ 0x00A640,
+ 0x00A642,
+ 0x00A644,
+ 0x00A646,
+ 0x00A648,
+ 0x00A64A,
+ 0x00A64C,
+ 0x00A64E,
+ 0x00A650,
+ 0x00A652,
+ 0x00A654,
+ 0x00A656,
+ 0x00A658,
+ 0x00A65A,
+ 0x00A65C,
+ 0x00A65E,
+ 0x00A660,
+ 0x00A662,
+ 0x00A664,
+ 0x00A666,
+ 0x00A668,
+ 0x00A66A,
+ 0x00A66C,
+ 0x00A680,
+ 0x00A682,
+ 0x00A684,
+ 0x00A686,
+ 0x00A688,
+ 0x00A68A,
+ 0x00A68C,
+ 0x00A68E,
+ 0x00A690,
+ 0x00A692,
+ 0x00A694,
+ 0x00A696,
+ 0x00A698,
+ 0x00A69A,
+ 0x00A722,
+ 0x00A724,
+ 0x00A726,
+ 0x00A728,
+ 0x00A72A,
+ 0x00A72C,
+ 0x00A72E,
+ 0x00A732,
+ 0x00A734,
+ 0x00A736,
+ 0x00A738,
+ 0x00A73A,
+ 0x00A73C,
+ 0x00A73E,
+ 0x00A740,
+ 0x00A742,
+ 0x00A744,
+ 0x00A746,
+ 0x00A748,
+ 0x00A74A,
+ 0x00A74C,
+ 0x00A74E,
+ 0x00A750,
+ 0x00A752,
+ 0x00A754,
+ 0x00A756,
+ 0x00A758,
+ 0x00A75A,
+ 0x00A75C,
+ 0x00A75E,
+ 0x00A760,
+ 0x00A762,
+ 0x00A764,
+ 0x00A766,
+ 0x00A768,
+ 0x00A76A,
+ 0x00A76C,
+ 0x00A76E,
+ 0x00A779,
+ 0x00A77B,
+ 0x00A780,
+ 0x00A782,
+ 0x00A784,
+ 0x00A786,
+ 0x00A78B,
+ 0x00A78D,
+ 0x00A790,
+ 0x00A792,
+ 0x00A796,
+ 0x00A798,
+ 0x00A79A,
+ 0x00A79C,
+ 0x00A79E,
+ 0x00A7A0,
+ 0x00A7A2,
+ 0x00A7A4,
+ 0x00A7A6,
+ 0x00A7A8,
+ 0x00A7B6,
+ 0x00A7B8,
+ 0x00A7BA,
+ 0x00A7BC,
+ 0x00A7BE,
+ 0x00A7C0,
+ 0x00A7C2,
+ 0x00A7C9,
+ 0x00A7D0,
+ 0x00A7D6,
+ 0x00A7D8,
+ 0x00A7F5
+ ],
+ ranges: [
+ [0x000041, 0x00005A],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000DE],
+ [0x000178, 0x000179],
+ [0x000181, 0x000182],
+ [0x000186, 0x000187],
+ [0x000189, 0x00018B],
+ [0x00018E, 0x000191],
+ [0x000193, 0x000194],
+ [0x000196, 0x000198],
+ [0x00019C, 0x00019D],
+ [0x00019F, 0x0001A0],
+ [0x0001A6, 0x0001A7],
+ [0x0001AE, 0x0001AF],
+ [0x0001B1, 0x0001B3],
+ [0x0001B7, 0x0001B8],
+ [0x0001C4, 0x0001C5],
+ [0x0001C7, 0x0001C8],
+ [0x0001CA, 0x0001CB],
+ [0x0001F1, 0x0001F2],
+ [0x0001F6, 0x0001F8],
+ [0x00023A, 0x00023B],
+ [0x00023D, 0x00023E],
+ [0x000243, 0x000246],
+ [0x000388, 0x00038A],
+ [0x00038E, 0x00038F],
+ [0x000391, 0x0003A1],
+ [0x0003A3, 0x0003AB],
+ [0x0003F9, 0x0003FA],
+ [0x0003FD, 0x00042F],
+ [0x0004C0, 0x0004C1],
+ [0x000531, 0x000556],
+ [0x0010A0, 0x0010C5],
+ [0x0013A0, 0x0013F5],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CBF],
+ [0x001F08, 0x001F0F],
+ [0x001F18, 0x001F1D],
+ [0x001F28, 0x001F2F],
+ [0x001F38, 0x001F3F],
+ [0x001F48, 0x001F4D],
+ [0x001F68, 0x001F6F],
+ [0x001F88, 0x001F8F],
+ [0x001F98, 0x001F9F],
+ [0x001FA8, 0x001FAF],
+ [0x001FB8, 0x001FBC],
+ [0x001FC8, 0x001FCC],
+ [0x001FD8, 0x001FDB],
+ [0x001FE8, 0x001FEC],
+ [0x001FF8, 0x001FFC],
+ [0x00212A, 0x00212B],
+ [0x002160, 0x00216F],
+ [0x0024B6, 0x0024CF],
+ [0x002C00, 0x002C2F],
+ [0x002C62, 0x002C64],
+ [0x002C6D, 0x002C70],
+ [0x002C7E, 0x002C80],
+ [0x00A77D, 0x00A77E],
+ [0x00A7AA, 0x00A7AE],
+ [0x00A7B0, 0x00A7B4],
+ [0x00A7C4, 0x00A7C7],
+ [0x00FF21, 0x00FF3A],
+ [0x010400, 0x010427],
+ [0x0104B0, 0x0104D3],
+ [0x010570, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010C80, 0x010CB2],
+ [0x0118A0, 0x0118BF],
+ [0x016E40, 0x016E5F],
+ [0x01E900, 0x01E921]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Changes_When_Lowercased}+$/u,
+ matchSymbols,
+ "\\p{Changes_When_Lowercased}"
+);
+testPropertyEscapes(
+ /^\p{CWL}+$/u,
+ matchSymbols,
+ "\\p{CWL}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000D7,
+ 0x000101,
+ 0x000103,
+ 0x000105,
+ 0x000107,
+ 0x000109,
+ 0x00010B,
+ 0x00010D,
+ 0x00010F,
+ 0x000111,
+ 0x000113,
+ 0x000115,
+ 0x000117,
+ 0x000119,
+ 0x00011B,
+ 0x00011D,
+ 0x00011F,
+ 0x000121,
+ 0x000123,
+ 0x000125,
+ 0x000127,
+ 0x000129,
+ 0x00012B,
+ 0x00012D,
+ 0x00012F,
+ 0x000131,
+ 0x000133,
+ 0x000135,
+ 0x00013A,
+ 0x00013C,
+ 0x00013E,
+ 0x000140,
+ 0x000142,
+ 0x000144,
+ 0x000146,
+ 0x00014B,
+ 0x00014D,
+ 0x00014F,
+ 0x000151,
+ 0x000153,
+ 0x000155,
+ 0x000157,
+ 0x000159,
+ 0x00015B,
+ 0x00015D,
+ 0x00015F,
+ 0x000161,
+ 0x000163,
+ 0x000165,
+ 0x000167,
+ 0x000169,
+ 0x00016B,
+ 0x00016D,
+ 0x00016F,
+ 0x000171,
+ 0x000173,
+ 0x000175,
+ 0x000177,
+ 0x00017A,
+ 0x00017C,
+ 0x000183,
+ 0x000185,
+ 0x000188,
+ 0x000192,
+ 0x000195,
+ 0x00019E,
+ 0x0001A1,
+ 0x0001A3,
+ 0x0001A5,
+ 0x0001A8,
+ 0x0001AD,
+ 0x0001B0,
+ 0x0001B4,
+ 0x0001B6,
+ 0x0001C6,
+ 0x0001C9,
+ 0x0001CC,
+ 0x0001CE,
+ 0x0001D0,
+ 0x0001D2,
+ 0x0001D4,
+ 0x0001D6,
+ 0x0001D8,
+ 0x0001DA,
+ 0x0001DF,
+ 0x0001E1,
+ 0x0001E3,
+ 0x0001E5,
+ 0x0001E7,
+ 0x0001E9,
+ 0x0001EB,
+ 0x0001ED,
+ 0x0001F3,
+ 0x0001F5,
+ 0x0001F9,
+ 0x0001FB,
+ 0x0001FD,
+ 0x0001FF,
+ 0x000201,
+ 0x000203,
+ 0x000205,
+ 0x000207,
+ 0x000209,
+ 0x00020B,
+ 0x00020D,
+ 0x00020F,
+ 0x000211,
+ 0x000213,
+ 0x000215,
+ 0x000217,
+ 0x000219,
+ 0x00021B,
+ 0x00021D,
+ 0x00021F,
+ 0x000221,
+ 0x000223,
+ 0x000225,
+ 0x000227,
+ 0x000229,
+ 0x00022B,
+ 0x00022D,
+ 0x00022F,
+ 0x000231,
+ 0x00023C,
+ 0x000242,
+ 0x000247,
+ 0x000249,
+ 0x00024B,
+ 0x00024D,
+ 0x000371,
+ 0x000387,
+ 0x00038B,
+ 0x00038D,
+ 0x000390,
+ 0x0003A2,
+ 0x0003D9,
+ 0x0003DB,
+ 0x0003DD,
+ 0x0003DF,
+ 0x0003E1,
+ 0x0003E3,
+ 0x0003E5,
+ 0x0003E7,
+ 0x0003E9,
+ 0x0003EB,
+ 0x0003ED,
+ 0x0003F8,
+ 0x000461,
+ 0x000463,
+ 0x000465,
+ 0x000467,
+ 0x000469,
+ 0x00046B,
+ 0x00046D,
+ 0x00046F,
+ 0x000471,
+ 0x000473,
+ 0x000475,
+ 0x000477,
+ 0x000479,
+ 0x00047B,
+ 0x00047D,
+ 0x00047F,
+ 0x00048B,
+ 0x00048D,
+ 0x00048F,
+ 0x000491,
+ 0x000493,
+ 0x000495,
+ 0x000497,
+ 0x000499,
+ 0x00049B,
+ 0x00049D,
+ 0x00049F,
+ 0x0004A1,
+ 0x0004A3,
+ 0x0004A5,
+ 0x0004A7,
+ 0x0004A9,
+ 0x0004AB,
+ 0x0004AD,
+ 0x0004AF,
+ 0x0004B1,
+ 0x0004B3,
+ 0x0004B5,
+ 0x0004B7,
+ 0x0004B9,
+ 0x0004BB,
+ 0x0004BD,
+ 0x0004BF,
+ 0x0004C2,
+ 0x0004C4,
+ 0x0004C6,
+ 0x0004C8,
+ 0x0004CA,
+ 0x0004CC,
+ 0x0004D1,
+ 0x0004D3,
+ 0x0004D5,
+ 0x0004D7,
+ 0x0004D9,
+ 0x0004DB,
+ 0x0004DD,
+ 0x0004DF,
+ 0x0004E1,
+ 0x0004E3,
+ 0x0004E5,
+ 0x0004E7,
+ 0x0004E9,
+ 0x0004EB,
+ 0x0004ED,
+ 0x0004EF,
+ 0x0004F1,
+ 0x0004F3,
+ 0x0004F5,
+ 0x0004F7,
+ 0x0004F9,
+ 0x0004FB,
+ 0x0004FD,
+ 0x0004FF,
+ 0x000501,
+ 0x000503,
+ 0x000505,
+ 0x000507,
+ 0x000509,
+ 0x00050B,
+ 0x00050D,
+ 0x00050F,
+ 0x000511,
+ 0x000513,
+ 0x000515,
+ 0x000517,
+ 0x000519,
+ 0x00051B,
+ 0x00051D,
+ 0x00051F,
+ 0x000521,
+ 0x000523,
+ 0x000525,
+ 0x000527,
+ 0x000529,
+ 0x00052B,
+ 0x00052D,
+ 0x0010C6,
+ 0x001E01,
+ 0x001E03,
+ 0x001E05,
+ 0x001E07,
+ 0x001E09,
+ 0x001E0B,
+ 0x001E0D,
+ 0x001E0F,
+ 0x001E11,
+ 0x001E13,
+ 0x001E15,
+ 0x001E17,
+ 0x001E19,
+ 0x001E1B,
+ 0x001E1D,
+ 0x001E1F,
+ 0x001E21,
+ 0x001E23,
+ 0x001E25,
+ 0x001E27,
+ 0x001E29,
+ 0x001E2B,
+ 0x001E2D,
+ 0x001E2F,
+ 0x001E31,
+ 0x001E33,
+ 0x001E35,
+ 0x001E37,
+ 0x001E39,
+ 0x001E3B,
+ 0x001E3D,
+ 0x001E3F,
+ 0x001E41,
+ 0x001E43,
+ 0x001E45,
+ 0x001E47,
+ 0x001E49,
+ 0x001E4B,
+ 0x001E4D,
+ 0x001E4F,
+ 0x001E51,
+ 0x001E53,
+ 0x001E55,
+ 0x001E57,
+ 0x001E59,
+ 0x001E5B,
+ 0x001E5D,
+ 0x001E5F,
+ 0x001E61,
+ 0x001E63,
+ 0x001E65,
+ 0x001E67,
+ 0x001E69,
+ 0x001E6B,
+ 0x001E6D,
+ 0x001E6F,
+ 0x001E71,
+ 0x001E73,
+ 0x001E75,
+ 0x001E77,
+ 0x001E79,
+ 0x001E7B,
+ 0x001E7D,
+ 0x001E7F,
+ 0x001E81,
+ 0x001E83,
+ 0x001E85,
+ 0x001E87,
+ 0x001E89,
+ 0x001E8B,
+ 0x001E8D,
+ 0x001E8F,
+ 0x001E91,
+ 0x001E93,
+ 0x001E9F,
+ 0x001EA1,
+ 0x001EA3,
+ 0x001EA5,
+ 0x001EA7,
+ 0x001EA9,
+ 0x001EAB,
+ 0x001EAD,
+ 0x001EAF,
+ 0x001EB1,
+ 0x001EB3,
+ 0x001EB5,
+ 0x001EB7,
+ 0x001EB9,
+ 0x001EBB,
+ 0x001EBD,
+ 0x001EBF,
+ 0x001EC1,
+ 0x001EC3,
+ 0x001EC5,
+ 0x001EC7,
+ 0x001EC9,
+ 0x001ECB,
+ 0x001ECD,
+ 0x001ECF,
+ 0x001ED1,
+ 0x001ED3,
+ 0x001ED5,
+ 0x001ED7,
+ 0x001ED9,
+ 0x001EDB,
+ 0x001EDD,
+ 0x001EDF,
+ 0x001EE1,
+ 0x001EE3,
+ 0x001EE5,
+ 0x001EE7,
+ 0x001EE9,
+ 0x001EEB,
+ 0x001EED,
+ 0x001EEF,
+ 0x001EF1,
+ 0x001EF3,
+ 0x001EF5,
+ 0x001EF7,
+ 0x001EF9,
+ 0x001EFB,
+ 0x001EFD,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x002C61,
+ 0x002C68,
+ 0x002C6A,
+ 0x002C6C,
+ 0x002C71,
+ 0x002C81,
+ 0x002C83,
+ 0x002C85,
+ 0x002C87,
+ 0x002C89,
+ 0x002C8B,
+ 0x002C8D,
+ 0x002C8F,
+ 0x002C91,
+ 0x002C93,
+ 0x002C95,
+ 0x002C97,
+ 0x002C99,
+ 0x002C9B,
+ 0x002C9D,
+ 0x002C9F,
+ 0x002CA1,
+ 0x002CA3,
+ 0x002CA5,
+ 0x002CA7,
+ 0x002CA9,
+ 0x002CAB,
+ 0x002CAD,
+ 0x002CAF,
+ 0x002CB1,
+ 0x002CB3,
+ 0x002CB5,
+ 0x002CB7,
+ 0x002CB9,
+ 0x002CBB,
+ 0x002CBD,
+ 0x002CBF,
+ 0x002CC1,
+ 0x002CC3,
+ 0x002CC5,
+ 0x002CC7,
+ 0x002CC9,
+ 0x002CCB,
+ 0x002CCD,
+ 0x002CCF,
+ 0x002CD1,
+ 0x002CD3,
+ 0x002CD5,
+ 0x002CD7,
+ 0x002CD9,
+ 0x002CDB,
+ 0x002CDD,
+ 0x002CDF,
+ 0x002CE1,
+ 0x002CEC,
+ 0x00A641,
+ 0x00A643,
+ 0x00A645,
+ 0x00A647,
+ 0x00A649,
+ 0x00A64B,
+ 0x00A64D,
+ 0x00A64F,
+ 0x00A651,
+ 0x00A653,
+ 0x00A655,
+ 0x00A657,
+ 0x00A659,
+ 0x00A65B,
+ 0x00A65D,
+ 0x00A65F,
+ 0x00A661,
+ 0x00A663,
+ 0x00A665,
+ 0x00A667,
+ 0x00A669,
+ 0x00A66B,
+ 0x00A681,
+ 0x00A683,
+ 0x00A685,
+ 0x00A687,
+ 0x00A689,
+ 0x00A68B,
+ 0x00A68D,
+ 0x00A68F,
+ 0x00A691,
+ 0x00A693,
+ 0x00A695,
+ 0x00A697,
+ 0x00A699,
+ 0x00A723,
+ 0x00A725,
+ 0x00A727,
+ 0x00A729,
+ 0x00A72B,
+ 0x00A72D,
+ 0x00A733,
+ 0x00A735,
+ 0x00A737,
+ 0x00A739,
+ 0x00A73B,
+ 0x00A73D,
+ 0x00A73F,
+ 0x00A741,
+ 0x00A743,
+ 0x00A745,
+ 0x00A747,
+ 0x00A749,
+ 0x00A74B,
+ 0x00A74D,
+ 0x00A74F,
+ 0x00A751,
+ 0x00A753,
+ 0x00A755,
+ 0x00A757,
+ 0x00A759,
+ 0x00A75B,
+ 0x00A75D,
+ 0x00A75F,
+ 0x00A761,
+ 0x00A763,
+ 0x00A765,
+ 0x00A767,
+ 0x00A769,
+ 0x00A76B,
+ 0x00A76D,
+ 0x00A77A,
+ 0x00A77C,
+ 0x00A77F,
+ 0x00A781,
+ 0x00A783,
+ 0x00A785,
+ 0x00A78C,
+ 0x00A791,
+ 0x00A797,
+ 0x00A799,
+ 0x00A79B,
+ 0x00A79D,
+ 0x00A79F,
+ 0x00A7A1,
+ 0x00A7A3,
+ 0x00A7A5,
+ 0x00A7A7,
+ 0x00A7A9,
+ 0x00A7AF,
+ 0x00A7B5,
+ 0x00A7B7,
+ 0x00A7B9,
+ 0x00A7BB,
+ 0x00A7BD,
+ 0x00A7BF,
+ 0x00A7C1,
+ 0x00A7C3,
+ 0x00A7C8,
+ 0x00A7D7,
+ 0x01057B,
+ 0x01058B,
+ 0x010593
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000040],
+ [0x00005B, 0x0000BF],
+ [0x0000DF, 0x0000FF],
+ [0x000137, 0x000138],
+ [0x000148, 0x000149],
+ [0x00017E, 0x000180],
+ [0x00018C, 0x00018D],
+ [0x000199, 0x00019B],
+ [0x0001AA, 0x0001AB],
+ [0x0001B9, 0x0001BB],
+ [0x0001BD, 0x0001C3],
+ [0x0001DC, 0x0001DD],
+ [0x0001EF, 0x0001F0],
+ [0x000233, 0x000239],
+ [0x00023F, 0x000240],
+ [0x00024F, 0x00036F],
+ [0x000373, 0x000375],
+ [0x000377, 0x00037E],
+ [0x000380, 0x000385],
+ [0x0003AC, 0x0003CE],
+ [0x0003D0, 0x0003D7],
+ [0x0003EF, 0x0003F3],
+ [0x0003F5, 0x0003F6],
+ [0x0003FB, 0x0003FC],
+ [0x000430, 0x00045F],
+ [0x000481, 0x000489],
+ [0x0004CE, 0x0004CF],
+ [0x00052F, 0x000530],
+ [0x000557, 0x00109F],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x00139F],
+ [0x0013F6, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC0, 0x001DFF],
+ [0x001E95, 0x001E9D],
+ [0x001EFF, 0x001F07],
+ [0x001F10, 0x001F17],
+ [0x001F1E, 0x001F27],
+ [0x001F30, 0x001F37],
+ [0x001F40, 0x001F47],
+ [0x001F4E, 0x001F58],
+ [0x001F60, 0x001F67],
+ [0x001F70, 0x001F87],
+ [0x001F90, 0x001F97],
+ [0x001FA0, 0x001FA7],
+ [0x001FB0, 0x001FB7],
+ [0x001FBD, 0x001FC7],
+ [0x001FCD, 0x001FD7],
+ [0x001FDC, 0x001FE7],
+ [0x001FED, 0x001FF7],
+ [0x001FFD, 0x002125],
+ [0x002127, 0x002129],
+ [0x00212C, 0x002131],
+ [0x002133, 0x00215F],
+ [0x002170, 0x002182],
+ [0x002184, 0x0024B5],
+ [0x0024D0, 0x002BFF],
+ [0x002C30, 0x002C5F],
+ [0x002C65, 0x002C66],
+ [0x002C73, 0x002C74],
+ [0x002C76, 0x002C7D],
+ [0x002CE3, 0x002CEA],
+ [0x002CEE, 0x002CF1],
+ [0x002CF3, 0x00A63F],
+ [0x00A66D, 0x00A67F],
+ [0x00A69B, 0x00A721],
+ [0x00A72F, 0x00A731],
+ [0x00A76F, 0x00A778],
+ [0x00A787, 0x00A78A],
+ [0x00A78E, 0x00A78F],
+ [0x00A793, 0x00A795],
+ [0x00A7CA, 0x00A7CF],
+ [0x00A7D1, 0x00A7D5],
+ [0x00A7D9, 0x00A7F4],
+ [0x00A7F6, 0x00DBFF],
+ [0x00E000, 0x00FF20],
+ [0x00FF3B, 0x0103FF],
+ [0x010428, 0x0104AF],
+ [0x0104D4, 0x01056F],
+ [0x010596, 0x010C7F],
+ [0x010CB3, 0x01189F],
+ [0x0118C0, 0x016E3F],
+ [0x016E60, 0x01E8FF],
+ [0x01E922, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Changes_When_Lowercased}+$/u,
+ nonMatchSymbols,
+ "\\P{Changes_When_Lowercased}"
+);
+testPropertyEscapes(
+ /^\P{CWL}+$/u,
+ nonMatchSymbols,
+ "\\P{CWL}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_NFKC_Casefolded.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_NFKC_Casefolded.js
new file mode 100644
index 0000000000..b0f8606839
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_NFKC_Casefolded.js
@@ -0,0 +1,1731 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Changes_When_NFKC_Casefolded`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000A0,
+ 0x0000A8,
+ 0x0000AA,
+ 0x0000AD,
+ 0x0000AF,
+ 0x000100,
+ 0x000102,
+ 0x000104,
+ 0x000106,
+ 0x000108,
+ 0x00010A,
+ 0x00010C,
+ 0x00010E,
+ 0x000110,
+ 0x000112,
+ 0x000114,
+ 0x000116,
+ 0x000118,
+ 0x00011A,
+ 0x00011C,
+ 0x00011E,
+ 0x000120,
+ 0x000122,
+ 0x000124,
+ 0x000126,
+ 0x000128,
+ 0x00012A,
+ 0x00012C,
+ 0x00012E,
+ 0x000130,
+ 0x000136,
+ 0x000139,
+ 0x00013B,
+ 0x00013D,
+ 0x000143,
+ 0x000145,
+ 0x000147,
+ 0x00014C,
+ 0x00014E,
+ 0x000150,
+ 0x000152,
+ 0x000154,
+ 0x000156,
+ 0x000158,
+ 0x00015A,
+ 0x00015C,
+ 0x00015E,
+ 0x000160,
+ 0x000162,
+ 0x000164,
+ 0x000166,
+ 0x000168,
+ 0x00016A,
+ 0x00016C,
+ 0x00016E,
+ 0x000170,
+ 0x000172,
+ 0x000174,
+ 0x000176,
+ 0x00017B,
+ 0x00017D,
+ 0x00017F,
+ 0x000184,
+ 0x0001A2,
+ 0x0001A4,
+ 0x0001A9,
+ 0x0001AC,
+ 0x0001B5,
+ 0x0001BC,
+ 0x0001CF,
+ 0x0001D1,
+ 0x0001D3,
+ 0x0001D5,
+ 0x0001D7,
+ 0x0001D9,
+ 0x0001DB,
+ 0x0001DE,
+ 0x0001E0,
+ 0x0001E2,
+ 0x0001E4,
+ 0x0001E6,
+ 0x0001E8,
+ 0x0001EA,
+ 0x0001EC,
+ 0x0001EE,
+ 0x0001FA,
+ 0x0001FC,
+ 0x0001FE,
+ 0x000200,
+ 0x000202,
+ 0x000204,
+ 0x000206,
+ 0x000208,
+ 0x00020A,
+ 0x00020C,
+ 0x00020E,
+ 0x000210,
+ 0x000212,
+ 0x000214,
+ 0x000216,
+ 0x000218,
+ 0x00021A,
+ 0x00021C,
+ 0x00021E,
+ 0x000220,
+ 0x000222,
+ 0x000224,
+ 0x000226,
+ 0x000228,
+ 0x00022A,
+ 0x00022C,
+ 0x00022E,
+ 0x000230,
+ 0x000232,
+ 0x000241,
+ 0x000248,
+ 0x00024A,
+ 0x00024C,
+ 0x00024E,
+ 0x00034F,
+ 0x000370,
+ 0x000372,
+ 0x000374,
+ 0x000376,
+ 0x00037A,
+ 0x00038C,
+ 0x0003C2,
+ 0x0003D8,
+ 0x0003DA,
+ 0x0003DC,
+ 0x0003DE,
+ 0x0003E0,
+ 0x0003E2,
+ 0x0003E4,
+ 0x0003E6,
+ 0x0003E8,
+ 0x0003EA,
+ 0x0003EC,
+ 0x0003EE,
+ 0x0003F7,
+ 0x000460,
+ 0x000462,
+ 0x000464,
+ 0x000466,
+ 0x000468,
+ 0x00046A,
+ 0x00046C,
+ 0x00046E,
+ 0x000470,
+ 0x000472,
+ 0x000474,
+ 0x000476,
+ 0x000478,
+ 0x00047A,
+ 0x00047C,
+ 0x00047E,
+ 0x000480,
+ 0x00048A,
+ 0x00048C,
+ 0x00048E,
+ 0x000490,
+ 0x000492,
+ 0x000494,
+ 0x000496,
+ 0x000498,
+ 0x00049A,
+ 0x00049C,
+ 0x00049E,
+ 0x0004A0,
+ 0x0004A2,
+ 0x0004A4,
+ 0x0004A6,
+ 0x0004A8,
+ 0x0004AA,
+ 0x0004AC,
+ 0x0004AE,
+ 0x0004B0,
+ 0x0004B2,
+ 0x0004B4,
+ 0x0004B6,
+ 0x0004B8,
+ 0x0004BA,
+ 0x0004BC,
+ 0x0004BE,
+ 0x0004C3,
+ 0x0004C5,
+ 0x0004C7,
+ 0x0004C9,
+ 0x0004CB,
+ 0x0004CD,
+ 0x0004D0,
+ 0x0004D2,
+ 0x0004D4,
+ 0x0004D6,
+ 0x0004D8,
+ 0x0004DA,
+ 0x0004DC,
+ 0x0004DE,
+ 0x0004E0,
+ 0x0004E2,
+ 0x0004E4,
+ 0x0004E6,
+ 0x0004E8,
+ 0x0004EA,
+ 0x0004EC,
+ 0x0004EE,
+ 0x0004F0,
+ 0x0004F2,
+ 0x0004F4,
+ 0x0004F6,
+ 0x0004F8,
+ 0x0004FA,
+ 0x0004FC,
+ 0x0004FE,
+ 0x000500,
+ 0x000502,
+ 0x000504,
+ 0x000506,
+ 0x000508,
+ 0x00050A,
+ 0x00050C,
+ 0x00050E,
+ 0x000510,
+ 0x000512,
+ 0x000514,
+ 0x000516,
+ 0x000518,
+ 0x00051A,
+ 0x00051C,
+ 0x00051E,
+ 0x000520,
+ 0x000522,
+ 0x000524,
+ 0x000526,
+ 0x000528,
+ 0x00052A,
+ 0x00052C,
+ 0x00052E,
+ 0x000587,
+ 0x00061C,
+ 0x0009DF,
+ 0x000A33,
+ 0x000A36,
+ 0x000A5E,
+ 0x000E33,
+ 0x000EB3,
+ 0x000F0C,
+ 0x000F43,
+ 0x000F4D,
+ 0x000F52,
+ 0x000F57,
+ 0x000F5C,
+ 0x000F69,
+ 0x000F73,
+ 0x000F81,
+ 0x000F93,
+ 0x000F9D,
+ 0x000FA2,
+ 0x000FA7,
+ 0x000FAC,
+ 0x000FB9,
+ 0x0010C7,
+ 0x0010CD,
+ 0x0010FC,
+ 0x001D78,
+ 0x001E00,
+ 0x001E02,
+ 0x001E04,
+ 0x001E06,
+ 0x001E08,
+ 0x001E0A,
+ 0x001E0C,
+ 0x001E0E,
+ 0x001E10,
+ 0x001E12,
+ 0x001E14,
+ 0x001E16,
+ 0x001E18,
+ 0x001E1A,
+ 0x001E1C,
+ 0x001E1E,
+ 0x001E20,
+ 0x001E22,
+ 0x001E24,
+ 0x001E26,
+ 0x001E28,
+ 0x001E2A,
+ 0x001E2C,
+ 0x001E2E,
+ 0x001E30,
+ 0x001E32,
+ 0x001E34,
+ 0x001E36,
+ 0x001E38,
+ 0x001E3A,
+ 0x001E3C,
+ 0x001E3E,
+ 0x001E40,
+ 0x001E42,
+ 0x001E44,
+ 0x001E46,
+ 0x001E48,
+ 0x001E4A,
+ 0x001E4C,
+ 0x001E4E,
+ 0x001E50,
+ 0x001E52,
+ 0x001E54,
+ 0x001E56,
+ 0x001E58,
+ 0x001E5A,
+ 0x001E5C,
+ 0x001E5E,
+ 0x001E60,
+ 0x001E62,
+ 0x001E64,
+ 0x001E66,
+ 0x001E68,
+ 0x001E6A,
+ 0x001E6C,
+ 0x001E6E,
+ 0x001E70,
+ 0x001E72,
+ 0x001E74,
+ 0x001E76,
+ 0x001E78,
+ 0x001E7A,
+ 0x001E7C,
+ 0x001E7E,
+ 0x001E80,
+ 0x001E82,
+ 0x001E84,
+ 0x001E86,
+ 0x001E88,
+ 0x001E8A,
+ 0x001E8C,
+ 0x001E8E,
+ 0x001E90,
+ 0x001E92,
+ 0x001E94,
+ 0x001E9E,
+ 0x001EA0,
+ 0x001EA2,
+ 0x001EA4,
+ 0x001EA6,
+ 0x001EA8,
+ 0x001EAA,
+ 0x001EAC,
+ 0x001EAE,
+ 0x001EB0,
+ 0x001EB2,
+ 0x001EB4,
+ 0x001EB6,
+ 0x001EB8,
+ 0x001EBA,
+ 0x001EBC,
+ 0x001EBE,
+ 0x001EC0,
+ 0x001EC2,
+ 0x001EC4,
+ 0x001EC6,
+ 0x001EC8,
+ 0x001ECA,
+ 0x001ECC,
+ 0x001ECE,
+ 0x001ED0,
+ 0x001ED2,
+ 0x001ED4,
+ 0x001ED6,
+ 0x001ED8,
+ 0x001EDA,
+ 0x001EDC,
+ 0x001EDE,
+ 0x001EE0,
+ 0x001EE2,
+ 0x001EE4,
+ 0x001EE6,
+ 0x001EE8,
+ 0x001EEA,
+ 0x001EEC,
+ 0x001EEE,
+ 0x001EF0,
+ 0x001EF2,
+ 0x001EF4,
+ 0x001EF6,
+ 0x001EF8,
+ 0x001EFA,
+ 0x001EFC,
+ 0x001EFE,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x001F5F,
+ 0x001F71,
+ 0x001F73,
+ 0x001F75,
+ 0x001F77,
+ 0x001F79,
+ 0x001F7B,
+ 0x001F7D,
+ 0x001FD3,
+ 0x001FE3,
+ 0x002011,
+ 0x002017,
+ 0x00203C,
+ 0x00203E,
+ 0x002057,
+ 0x0020A8,
+ 0x002124,
+ 0x002126,
+ 0x002128,
+ 0x002183,
+ 0x002189,
+ 0x002A0C,
+ 0x002ADC,
+ 0x002C60,
+ 0x002C67,
+ 0x002C69,
+ 0x002C6B,
+ 0x002C72,
+ 0x002C75,
+ 0x002C82,
+ 0x002C84,
+ 0x002C86,
+ 0x002C88,
+ 0x002C8A,
+ 0x002C8C,
+ 0x002C8E,
+ 0x002C90,
+ 0x002C92,
+ 0x002C94,
+ 0x002C96,
+ 0x002C98,
+ 0x002C9A,
+ 0x002C9C,
+ 0x002C9E,
+ 0x002CA0,
+ 0x002CA2,
+ 0x002CA4,
+ 0x002CA6,
+ 0x002CA8,
+ 0x002CAA,
+ 0x002CAC,
+ 0x002CAE,
+ 0x002CB0,
+ 0x002CB2,
+ 0x002CB4,
+ 0x002CB6,
+ 0x002CB8,
+ 0x002CBA,
+ 0x002CBC,
+ 0x002CBE,
+ 0x002CC0,
+ 0x002CC2,
+ 0x002CC4,
+ 0x002CC6,
+ 0x002CC8,
+ 0x002CCA,
+ 0x002CCC,
+ 0x002CCE,
+ 0x002CD0,
+ 0x002CD2,
+ 0x002CD4,
+ 0x002CD6,
+ 0x002CD8,
+ 0x002CDA,
+ 0x002CDC,
+ 0x002CDE,
+ 0x002CE0,
+ 0x002CE2,
+ 0x002CEB,
+ 0x002CED,
+ 0x002CF2,
+ 0x002D6F,
+ 0x002E9F,
+ 0x002EF3,
+ 0x003000,
+ 0x003036,
+ 0x00309F,
+ 0x0030FF,
+ 0x00A640,
+ 0x00A642,
+ 0x00A644,
+ 0x00A646,
+ 0x00A648,
+ 0x00A64A,
+ 0x00A64C,
+ 0x00A64E,
+ 0x00A650,
+ 0x00A652,
+ 0x00A654,
+ 0x00A656,
+ 0x00A658,
+ 0x00A65A,
+ 0x00A65C,
+ 0x00A65E,
+ 0x00A660,
+ 0x00A662,
+ 0x00A664,
+ 0x00A666,
+ 0x00A668,
+ 0x00A66A,
+ 0x00A66C,
+ 0x00A680,
+ 0x00A682,
+ 0x00A684,
+ 0x00A686,
+ 0x00A688,
+ 0x00A68A,
+ 0x00A68C,
+ 0x00A68E,
+ 0x00A690,
+ 0x00A692,
+ 0x00A694,
+ 0x00A696,
+ 0x00A698,
+ 0x00A69A,
+ 0x00A722,
+ 0x00A724,
+ 0x00A726,
+ 0x00A728,
+ 0x00A72A,
+ 0x00A72C,
+ 0x00A72E,
+ 0x00A732,
+ 0x00A734,
+ 0x00A736,
+ 0x00A738,
+ 0x00A73A,
+ 0x00A73C,
+ 0x00A73E,
+ 0x00A740,
+ 0x00A742,
+ 0x00A744,
+ 0x00A746,
+ 0x00A748,
+ 0x00A74A,
+ 0x00A74C,
+ 0x00A74E,
+ 0x00A750,
+ 0x00A752,
+ 0x00A754,
+ 0x00A756,
+ 0x00A758,
+ 0x00A75A,
+ 0x00A75C,
+ 0x00A75E,
+ 0x00A760,
+ 0x00A762,
+ 0x00A764,
+ 0x00A766,
+ 0x00A768,
+ 0x00A76A,
+ 0x00A76C,
+ 0x00A76E,
+ 0x00A770,
+ 0x00A779,
+ 0x00A77B,
+ 0x00A780,
+ 0x00A782,
+ 0x00A784,
+ 0x00A786,
+ 0x00A78B,
+ 0x00A78D,
+ 0x00A790,
+ 0x00A792,
+ 0x00A796,
+ 0x00A798,
+ 0x00A79A,
+ 0x00A79C,
+ 0x00A79E,
+ 0x00A7A0,
+ 0x00A7A2,
+ 0x00A7A4,
+ 0x00A7A6,
+ 0x00A7A8,
+ 0x00A7B6,
+ 0x00A7B8,
+ 0x00A7BA,
+ 0x00A7BC,
+ 0x00A7BE,
+ 0x00A7C0,
+ 0x00A7C2,
+ 0x00A7C9,
+ 0x00A7D0,
+ 0x00A7D6,
+ 0x00A7D8,
+ 0x00AB69,
+ 0x00FA10,
+ 0x00FA12,
+ 0x00FA20,
+ 0x00FA22,
+ 0x00FB1D,
+ 0x00FB3E,
+ 0x00FE74,
+ 0x00FEFF,
+ 0x01D4A2,
+ 0x01D4BB,
+ 0x01D546,
+ 0x01EE24,
+ 0x01EE27,
+ 0x01EE39,
+ 0x01EE3B,
+ 0x01EE42,
+ 0x01EE47,
+ 0x01EE49,
+ 0x01EE4B,
+ 0x01EE54,
+ 0x01EE57,
+ 0x01EE59,
+ 0x01EE5B,
+ 0x01EE5D,
+ 0x01EE5F,
+ 0x01EE64,
+ 0x01EE7E,
+ 0x01F190
+ ],
+ ranges: [
+ [0x000041, 0x00005A],
+ [0x0000B2, 0x0000B5],
+ [0x0000B8, 0x0000BA],
+ [0x0000BC, 0x0000BE],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000DF],
+ [0x000132, 0x000134],
+ [0x00013F, 0x000141],
+ [0x000149, 0x00014A],
+ [0x000178, 0x000179],
+ [0x000181, 0x000182],
+ [0x000186, 0x000187],
+ [0x000189, 0x00018B],
+ [0x00018E, 0x000191],
+ [0x000193, 0x000194],
+ [0x000196, 0x000198],
+ [0x00019C, 0x00019D],
+ [0x00019F, 0x0001A0],
+ [0x0001A6, 0x0001A7],
+ [0x0001AE, 0x0001AF],
+ [0x0001B1, 0x0001B3],
+ [0x0001B7, 0x0001B8],
+ [0x0001C4, 0x0001CD],
+ [0x0001F1, 0x0001F4],
+ [0x0001F6, 0x0001F8],
+ [0x00023A, 0x00023B],
+ [0x00023D, 0x00023E],
+ [0x000243, 0x000246],
+ [0x0002B0, 0x0002B8],
+ [0x0002D8, 0x0002DD],
+ [0x0002E0, 0x0002E4],
+ [0x000340, 0x000341],
+ [0x000343, 0x000345],
+ [0x00037E, 0x00037F],
+ [0x000384, 0x00038A],
+ [0x00038E, 0x00038F],
+ [0x000391, 0x0003A1],
+ [0x0003A3, 0x0003AB],
+ [0x0003CF, 0x0003D6],
+ [0x0003F0, 0x0003F2],
+ [0x0003F4, 0x0003F5],
+ [0x0003F9, 0x0003FA],
+ [0x0003FD, 0x00042F],
+ [0x0004C0, 0x0004C1],
+ [0x000531, 0x000556],
+ [0x000675, 0x000678],
+ [0x000958, 0x00095F],
+ [0x0009DC, 0x0009DD],
+ [0x000A59, 0x000A5B],
+ [0x000B5C, 0x000B5D],
+ [0x000EDC, 0x000EDD],
+ [0x000F75, 0x000F79],
+ [0x0010A0, 0x0010C5],
+ [0x00115F, 0x001160],
+ [0x0013F8, 0x0013FD],
+ [0x0017B4, 0x0017B5],
+ [0x00180B, 0x00180F],
+ [0x001C80, 0x001C88],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CBF],
+ [0x001D2C, 0x001D2E],
+ [0x001D30, 0x001D3A],
+ [0x001D3C, 0x001D4D],
+ [0x001D4F, 0x001D6A],
+ [0x001D9B, 0x001DBF],
+ [0x001E9A, 0x001E9B],
+ [0x001F08, 0x001F0F],
+ [0x001F18, 0x001F1D],
+ [0x001F28, 0x001F2F],
+ [0x001F38, 0x001F3F],
+ [0x001F48, 0x001F4D],
+ [0x001F68, 0x001F6F],
+ [0x001F80, 0x001FAF],
+ [0x001FB2, 0x001FB4],
+ [0x001FB7, 0x001FC4],
+ [0x001FC7, 0x001FCF],
+ [0x001FD8, 0x001FDB],
+ [0x001FDD, 0x001FDF],
+ [0x001FE8, 0x001FEF],
+ [0x001FF2, 0x001FF4],
+ [0x001FF7, 0x001FFE],
+ [0x002000, 0x00200F],
+ [0x002024, 0x002026],
+ [0x00202A, 0x00202F],
+ [0x002033, 0x002034],
+ [0x002036, 0x002037],
+ [0x002047, 0x002049],
+ [0x00205F, 0x002071],
+ [0x002074, 0x00208E],
+ [0x002090, 0x00209C],
+ [0x002100, 0x002103],
+ [0x002105, 0x002107],
+ [0x002109, 0x002113],
+ [0x002115, 0x002116],
+ [0x002119, 0x00211D],
+ [0x002120, 0x002122],
+ [0x00212A, 0x00212D],
+ [0x00212F, 0x002139],
+ [0x00213B, 0x002140],
+ [0x002145, 0x002149],
+ [0x002150, 0x00217F],
+ [0x00222C, 0x00222D],
+ [0x00222F, 0x002230],
+ [0x002329, 0x00232A],
+ [0x002460, 0x0024EA],
+ [0x002A74, 0x002A76],
+ [0x002C00, 0x002C2F],
+ [0x002C62, 0x002C64],
+ [0x002C6D, 0x002C70],
+ [0x002C7C, 0x002C80],
+ [0x002F00, 0x002FD5],
+ [0x003038, 0x00303A],
+ [0x00309B, 0x00309C],
+ [0x003131, 0x00318E],
+ [0x003192, 0x00319F],
+ [0x003200, 0x00321E],
+ [0x003220, 0x003247],
+ [0x003250, 0x00327E],
+ [0x003280, 0x0033FF],
+ [0x00A69C, 0x00A69D],
+ [0x00A77D, 0x00A77E],
+ [0x00A7AA, 0x00A7AE],
+ [0x00A7B0, 0x00A7B4],
+ [0x00A7C4, 0x00A7C7],
+ [0x00A7F2, 0x00A7F5],
+ [0x00A7F8, 0x00A7F9],
+ [0x00AB5C, 0x00AB5F],
+ [0x00AB70, 0x00ABBF],
+ [0x00F900, 0x00FA0D],
+ [0x00FA15, 0x00FA1E],
+ [0x00FA25, 0x00FA26],
+ [0x00FA2A, 0x00FA6D],
+ [0x00FA70, 0x00FAD9],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FB1F, 0x00FB36],
+ [0x00FB38, 0x00FB3C],
+ [0x00FB40, 0x00FB41],
+ [0x00FB43, 0x00FB44],
+ [0x00FB46, 0x00FBB1],
+ [0x00FBD3, 0x00FD3D],
+ [0x00FD50, 0x00FD8F],
+ [0x00FD92, 0x00FDC7],
+ [0x00FDF0, 0x00FDFC],
+ [0x00FE00, 0x00FE19],
+ [0x00FE30, 0x00FE44],
+ [0x00FE47, 0x00FE52],
+ [0x00FE54, 0x00FE66],
+ [0x00FE68, 0x00FE6B],
+ [0x00FE70, 0x00FE72],
+ [0x00FE76, 0x00FEFC],
+ [0x00FF01, 0x00FFBE],
+ [0x00FFC2, 0x00FFC7],
+ [0x00FFCA, 0x00FFCF],
+ [0x00FFD2, 0x00FFD7],
+ [0x00FFDA, 0x00FFDC],
+ [0x00FFE0, 0x00FFE6],
+ [0x00FFE8, 0x00FFEE],
+ [0x00FFF0, 0x00FFF8],
+ [0x010400, 0x010427],
+ [0x0104B0, 0x0104D3],
+ [0x010570, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010781, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x010C80, 0x010CB2],
+ [0x0118A0, 0x0118BF],
+ [0x016E40, 0x016E5F],
+ [0x01BCA0, 0x01BCA3],
+ [0x01D15E, 0x01D164],
+ [0x01D173, 0x01D17A],
+ [0x01D1BB, 0x01D1C0],
+ [0x01D400, 0x01D454],
+ [0x01D456, 0x01D49C],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D51E, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D552, 0x01D6A5],
+ [0x01D6A8, 0x01D7CB],
+ [0x01D7CE, 0x01D7FF],
+ [0x01E030, 0x01E06D],
+ [0x01E900, 0x01E921],
+ [0x01EE00, 0x01EE03],
+ [0x01EE05, 0x01EE1F],
+ [0x01EE21, 0x01EE22],
+ [0x01EE29, 0x01EE32],
+ [0x01EE34, 0x01EE37],
+ [0x01EE4D, 0x01EE4F],
+ [0x01EE51, 0x01EE52],
+ [0x01EE61, 0x01EE62],
+ [0x01EE67, 0x01EE6A],
+ [0x01EE6C, 0x01EE72],
+ [0x01EE74, 0x01EE77],
+ [0x01EE79, 0x01EE7C],
+ [0x01EE80, 0x01EE89],
+ [0x01EE8B, 0x01EE9B],
+ [0x01EEA1, 0x01EEA3],
+ [0x01EEA5, 0x01EEA9],
+ [0x01EEAB, 0x01EEBB],
+ [0x01F100, 0x01F10A],
+ [0x01F110, 0x01F12E],
+ [0x01F130, 0x01F14F],
+ [0x01F16A, 0x01F16C],
+ [0x01F200, 0x01F202],
+ [0x01F210, 0x01F23B],
+ [0x01F240, 0x01F248],
+ [0x01F250, 0x01F251],
+ [0x01FBF0, 0x01FBF9],
+ [0x02F800, 0x02FA1D],
+ [0x0E0000, 0x0E0FFF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Changes_When_NFKC_Casefolded}+$/u,
+ matchSymbols,
+ "\\p{Changes_When_NFKC_Casefolded}"
+);
+testPropertyEscapes(
+ /^\p{CWKCF}+$/u,
+ matchSymbols,
+ "\\p{CWKCF}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000A9,
+ 0x0000AE,
+ 0x0000BB,
+ 0x0000BF,
+ 0x0000D7,
+ 0x000101,
+ 0x000103,
+ 0x000105,
+ 0x000107,
+ 0x000109,
+ 0x00010B,
+ 0x00010D,
+ 0x00010F,
+ 0x000111,
+ 0x000113,
+ 0x000115,
+ 0x000117,
+ 0x000119,
+ 0x00011B,
+ 0x00011D,
+ 0x00011F,
+ 0x000121,
+ 0x000123,
+ 0x000125,
+ 0x000127,
+ 0x000129,
+ 0x00012B,
+ 0x00012D,
+ 0x00012F,
+ 0x000131,
+ 0x000135,
+ 0x00013A,
+ 0x00013C,
+ 0x00013E,
+ 0x000142,
+ 0x000144,
+ 0x000146,
+ 0x000148,
+ 0x00014B,
+ 0x00014D,
+ 0x00014F,
+ 0x000151,
+ 0x000153,
+ 0x000155,
+ 0x000157,
+ 0x000159,
+ 0x00015B,
+ 0x00015D,
+ 0x00015F,
+ 0x000161,
+ 0x000163,
+ 0x000165,
+ 0x000167,
+ 0x000169,
+ 0x00016B,
+ 0x00016D,
+ 0x00016F,
+ 0x000171,
+ 0x000173,
+ 0x000175,
+ 0x000177,
+ 0x00017A,
+ 0x00017C,
+ 0x00017E,
+ 0x000180,
+ 0x000183,
+ 0x000185,
+ 0x000188,
+ 0x000192,
+ 0x000195,
+ 0x00019E,
+ 0x0001A1,
+ 0x0001A3,
+ 0x0001A5,
+ 0x0001A8,
+ 0x0001AD,
+ 0x0001B0,
+ 0x0001B4,
+ 0x0001B6,
+ 0x0001CE,
+ 0x0001D0,
+ 0x0001D2,
+ 0x0001D4,
+ 0x0001D6,
+ 0x0001D8,
+ 0x0001DA,
+ 0x0001DF,
+ 0x0001E1,
+ 0x0001E3,
+ 0x0001E5,
+ 0x0001E7,
+ 0x0001E9,
+ 0x0001EB,
+ 0x0001ED,
+ 0x0001F5,
+ 0x0001F9,
+ 0x0001FB,
+ 0x0001FD,
+ 0x0001FF,
+ 0x000201,
+ 0x000203,
+ 0x000205,
+ 0x000207,
+ 0x000209,
+ 0x00020B,
+ 0x00020D,
+ 0x00020F,
+ 0x000211,
+ 0x000213,
+ 0x000215,
+ 0x000217,
+ 0x000219,
+ 0x00021B,
+ 0x00021D,
+ 0x00021F,
+ 0x000221,
+ 0x000223,
+ 0x000225,
+ 0x000227,
+ 0x000229,
+ 0x00022B,
+ 0x00022D,
+ 0x00022F,
+ 0x000231,
+ 0x00023C,
+ 0x000242,
+ 0x000247,
+ 0x000249,
+ 0x00024B,
+ 0x00024D,
+ 0x000342,
+ 0x000371,
+ 0x000373,
+ 0x000375,
+ 0x00038B,
+ 0x00038D,
+ 0x000390,
+ 0x0003A2,
+ 0x0003D7,
+ 0x0003D9,
+ 0x0003DB,
+ 0x0003DD,
+ 0x0003DF,
+ 0x0003E1,
+ 0x0003E3,
+ 0x0003E5,
+ 0x0003E7,
+ 0x0003E9,
+ 0x0003EB,
+ 0x0003ED,
+ 0x0003EF,
+ 0x0003F3,
+ 0x0003F6,
+ 0x0003F8,
+ 0x000461,
+ 0x000463,
+ 0x000465,
+ 0x000467,
+ 0x000469,
+ 0x00046B,
+ 0x00046D,
+ 0x00046F,
+ 0x000471,
+ 0x000473,
+ 0x000475,
+ 0x000477,
+ 0x000479,
+ 0x00047B,
+ 0x00047D,
+ 0x00047F,
+ 0x00048B,
+ 0x00048D,
+ 0x00048F,
+ 0x000491,
+ 0x000493,
+ 0x000495,
+ 0x000497,
+ 0x000499,
+ 0x00049B,
+ 0x00049D,
+ 0x00049F,
+ 0x0004A1,
+ 0x0004A3,
+ 0x0004A5,
+ 0x0004A7,
+ 0x0004A9,
+ 0x0004AB,
+ 0x0004AD,
+ 0x0004AF,
+ 0x0004B1,
+ 0x0004B3,
+ 0x0004B5,
+ 0x0004B7,
+ 0x0004B9,
+ 0x0004BB,
+ 0x0004BD,
+ 0x0004BF,
+ 0x0004C2,
+ 0x0004C4,
+ 0x0004C6,
+ 0x0004C8,
+ 0x0004CA,
+ 0x0004CC,
+ 0x0004D1,
+ 0x0004D3,
+ 0x0004D5,
+ 0x0004D7,
+ 0x0004D9,
+ 0x0004DB,
+ 0x0004DD,
+ 0x0004DF,
+ 0x0004E1,
+ 0x0004E3,
+ 0x0004E5,
+ 0x0004E7,
+ 0x0004E9,
+ 0x0004EB,
+ 0x0004ED,
+ 0x0004EF,
+ 0x0004F1,
+ 0x0004F3,
+ 0x0004F5,
+ 0x0004F7,
+ 0x0004F9,
+ 0x0004FB,
+ 0x0004FD,
+ 0x0004FF,
+ 0x000501,
+ 0x000503,
+ 0x000505,
+ 0x000507,
+ 0x000509,
+ 0x00050B,
+ 0x00050D,
+ 0x00050F,
+ 0x000511,
+ 0x000513,
+ 0x000515,
+ 0x000517,
+ 0x000519,
+ 0x00051B,
+ 0x00051D,
+ 0x00051F,
+ 0x000521,
+ 0x000523,
+ 0x000525,
+ 0x000527,
+ 0x000529,
+ 0x00052B,
+ 0x00052D,
+ 0x0009DE,
+ 0x000F74,
+ 0x0010C6,
+ 0x001D2F,
+ 0x001D3B,
+ 0x001D4E,
+ 0x001E01,
+ 0x001E03,
+ 0x001E05,
+ 0x001E07,
+ 0x001E09,
+ 0x001E0B,
+ 0x001E0D,
+ 0x001E0F,
+ 0x001E11,
+ 0x001E13,
+ 0x001E15,
+ 0x001E17,
+ 0x001E19,
+ 0x001E1B,
+ 0x001E1D,
+ 0x001E1F,
+ 0x001E21,
+ 0x001E23,
+ 0x001E25,
+ 0x001E27,
+ 0x001E29,
+ 0x001E2B,
+ 0x001E2D,
+ 0x001E2F,
+ 0x001E31,
+ 0x001E33,
+ 0x001E35,
+ 0x001E37,
+ 0x001E39,
+ 0x001E3B,
+ 0x001E3D,
+ 0x001E3F,
+ 0x001E41,
+ 0x001E43,
+ 0x001E45,
+ 0x001E47,
+ 0x001E49,
+ 0x001E4B,
+ 0x001E4D,
+ 0x001E4F,
+ 0x001E51,
+ 0x001E53,
+ 0x001E55,
+ 0x001E57,
+ 0x001E59,
+ 0x001E5B,
+ 0x001E5D,
+ 0x001E5F,
+ 0x001E61,
+ 0x001E63,
+ 0x001E65,
+ 0x001E67,
+ 0x001E69,
+ 0x001E6B,
+ 0x001E6D,
+ 0x001E6F,
+ 0x001E71,
+ 0x001E73,
+ 0x001E75,
+ 0x001E77,
+ 0x001E79,
+ 0x001E7B,
+ 0x001E7D,
+ 0x001E7F,
+ 0x001E81,
+ 0x001E83,
+ 0x001E85,
+ 0x001E87,
+ 0x001E89,
+ 0x001E8B,
+ 0x001E8D,
+ 0x001E8F,
+ 0x001E91,
+ 0x001E93,
+ 0x001E9F,
+ 0x001EA1,
+ 0x001EA3,
+ 0x001EA5,
+ 0x001EA7,
+ 0x001EA9,
+ 0x001EAB,
+ 0x001EAD,
+ 0x001EAF,
+ 0x001EB1,
+ 0x001EB3,
+ 0x001EB5,
+ 0x001EB7,
+ 0x001EB9,
+ 0x001EBB,
+ 0x001EBD,
+ 0x001EBF,
+ 0x001EC1,
+ 0x001EC3,
+ 0x001EC5,
+ 0x001EC7,
+ 0x001EC9,
+ 0x001ECB,
+ 0x001ECD,
+ 0x001ECF,
+ 0x001ED1,
+ 0x001ED3,
+ 0x001ED5,
+ 0x001ED7,
+ 0x001ED9,
+ 0x001EDB,
+ 0x001EDD,
+ 0x001EDF,
+ 0x001EE1,
+ 0x001EE3,
+ 0x001EE5,
+ 0x001EE7,
+ 0x001EE9,
+ 0x001EEB,
+ 0x001EED,
+ 0x001EEF,
+ 0x001EF1,
+ 0x001EF3,
+ 0x001EF5,
+ 0x001EF7,
+ 0x001EF9,
+ 0x001EFB,
+ 0x001EFD,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x001F70,
+ 0x001F72,
+ 0x001F74,
+ 0x001F76,
+ 0x001F78,
+ 0x001F7A,
+ 0x001F7C,
+ 0x001FDC,
+ 0x001FFF,
+ 0x002010,
+ 0x002035,
+ 0x00203D,
+ 0x00208F,
+ 0x002104,
+ 0x002108,
+ 0x002114,
+ 0x002123,
+ 0x002125,
+ 0x002127,
+ 0x002129,
+ 0x00212E,
+ 0x00213A,
+ 0x00222E,
+ 0x002C61,
+ 0x002C68,
+ 0x002C6A,
+ 0x002C6C,
+ 0x002C71,
+ 0x002C81,
+ 0x002C83,
+ 0x002C85,
+ 0x002C87,
+ 0x002C89,
+ 0x002C8B,
+ 0x002C8D,
+ 0x002C8F,
+ 0x002C91,
+ 0x002C93,
+ 0x002C95,
+ 0x002C97,
+ 0x002C99,
+ 0x002C9B,
+ 0x002C9D,
+ 0x002C9F,
+ 0x002CA1,
+ 0x002CA3,
+ 0x002CA5,
+ 0x002CA7,
+ 0x002CA9,
+ 0x002CAB,
+ 0x002CAD,
+ 0x002CAF,
+ 0x002CB1,
+ 0x002CB3,
+ 0x002CB5,
+ 0x002CB7,
+ 0x002CB9,
+ 0x002CBB,
+ 0x002CBD,
+ 0x002CBF,
+ 0x002CC1,
+ 0x002CC3,
+ 0x002CC5,
+ 0x002CC7,
+ 0x002CC9,
+ 0x002CCB,
+ 0x002CCD,
+ 0x002CCF,
+ 0x002CD1,
+ 0x002CD3,
+ 0x002CD5,
+ 0x002CD7,
+ 0x002CD9,
+ 0x002CDB,
+ 0x002CDD,
+ 0x002CDF,
+ 0x002CE1,
+ 0x002CEC,
+ 0x003037,
+ 0x00321F,
+ 0x00327F,
+ 0x00A641,
+ 0x00A643,
+ 0x00A645,
+ 0x00A647,
+ 0x00A649,
+ 0x00A64B,
+ 0x00A64D,
+ 0x00A64F,
+ 0x00A651,
+ 0x00A653,
+ 0x00A655,
+ 0x00A657,
+ 0x00A659,
+ 0x00A65B,
+ 0x00A65D,
+ 0x00A65F,
+ 0x00A661,
+ 0x00A663,
+ 0x00A665,
+ 0x00A667,
+ 0x00A669,
+ 0x00A66B,
+ 0x00A681,
+ 0x00A683,
+ 0x00A685,
+ 0x00A687,
+ 0x00A689,
+ 0x00A68B,
+ 0x00A68D,
+ 0x00A68F,
+ 0x00A691,
+ 0x00A693,
+ 0x00A695,
+ 0x00A697,
+ 0x00A699,
+ 0x00A69B,
+ 0x00A723,
+ 0x00A725,
+ 0x00A727,
+ 0x00A729,
+ 0x00A72B,
+ 0x00A72D,
+ 0x00A733,
+ 0x00A735,
+ 0x00A737,
+ 0x00A739,
+ 0x00A73B,
+ 0x00A73D,
+ 0x00A73F,
+ 0x00A741,
+ 0x00A743,
+ 0x00A745,
+ 0x00A747,
+ 0x00A749,
+ 0x00A74B,
+ 0x00A74D,
+ 0x00A74F,
+ 0x00A751,
+ 0x00A753,
+ 0x00A755,
+ 0x00A757,
+ 0x00A759,
+ 0x00A75B,
+ 0x00A75D,
+ 0x00A75F,
+ 0x00A761,
+ 0x00A763,
+ 0x00A765,
+ 0x00A767,
+ 0x00A769,
+ 0x00A76B,
+ 0x00A76D,
+ 0x00A76F,
+ 0x00A77A,
+ 0x00A77C,
+ 0x00A77F,
+ 0x00A781,
+ 0x00A783,
+ 0x00A785,
+ 0x00A78C,
+ 0x00A791,
+ 0x00A797,
+ 0x00A799,
+ 0x00A79B,
+ 0x00A79D,
+ 0x00A79F,
+ 0x00A7A1,
+ 0x00A7A3,
+ 0x00A7A5,
+ 0x00A7A7,
+ 0x00A7A9,
+ 0x00A7AF,
+ 0x00A7B5,
+ 0x00A7B7,
+ 0x00A7B9,
+ 0x00A7BB,
+ 0x00A7BD,
+ 0x00A7BF,
+ 0x00A7C1,
+ 0x00A7C3,
+ 0x00A7C8,
+ 0x00A7D7,
+ 0x00FA11,
+ 0x00FA1F,
+ 0x00FA21,
+ 0x00FB1E,
+ 0x00FB37,
+ 0x00FB3D,
+ 0x00FB3F,
+ 0x00FB42,
+ 0x00FB45,
+ 0x00FE53,
+ 0x00FE67,
+ 0x00FE73,
+ 0x00FE75,
+ 0x00FF00,
+ 0x00FFE7,
+ 0x00FFEF,
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x010786,
+ 0x0107B1,
+ 0x01D455,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D506,
+ 0x01D515,
+ 0x01D51D,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545,
+ 0x01D551,
+ 0x01EE04,
+ 0x01EE20,
+ 0x01EE23,
+ 0x01EE28,
+ 0x01EE33,
+ 0x01EE38,
+ 0x01EE3A,
+ 0x01EE48,
+ 0x01EE4A,
+ 0x01EE4C,
+ 0x01EE50,
+ 0x01EE53,
+ 0x01EE58,
+ 0x01EE5A,
+ 0x01EE5C,
+ 0x01EE5E,
+ 0x01EE60,
+ 0x01EE63,
+ 0x01EE6B,
+ 0x01EE73,
+ 0x01EE78,
+ 0x01EE7D,
+ 0x01EE7F,
+ 0x01EE8A,
+ 0x01EEA4,
+ 0x01EEAA,
+ 0x01F12F
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000040],
+ [0x00005B, 0x00009F],
+ [0x0000A1, 0x0000A7],
+ [0x0000AB, 0x0000AC],
+ [0x0000B0, 0x0000B1],
+ [0x0000B6, 0x0000B7],
+ [0x0000E0, 0x0000FF],
+ [0x000137, 0x000138],
+ [0x00018C, 0x00018D],
+ [0x000199, 0x00019B],
+ [0x0001AA, 0x0001AB],
+ [0x0001B9, 0x0001BB],
+ [0x0001BD, 0x0001C3],
+ [0x0001DC, 0x0001DD],
+ [0x0001EF, 0x0001F0],
+ [0x000233, 0x000239],
+ [0x00023F, 0x000240],
+ [0x00024F, 0x0002AF],
+ [0x0002B9, 0x0002D7],
+ [0x0002DE, 0x0002DF],
+ [0x0002E5, 0x00033F],
+ [0x000346, 0x00034E],
+ [0x000350, 0x00036F],
+ [0x000377, 0x000379],
+ [0x00037B, 0x00037D],
+ [0x000380, 0x000383],
+ [0x0003AC, 0x0003C1],
+ [0x0003C3, 0x0003CE],
+ [0x0003FB, 0x0003FC],
+ [0x000430, 0x00045F],
+ [0x000481, 0x000489],
+ [0x0004CE, 0x0004CF],
+ [0x00052F, 0x000530],
+ [0x000557, 0x000586],
+ [0x000588, 0x00061B],
+ [0x00061D, 0x000674],
+ [0x000679, 0x000957],
+ [0x000960, 0x0009DB],
+ [0x0009E0, 0x000A32],
+ [0x000A34, 0x000A35],
+ [0x000A37, 0x000A58],
+ [0x000A5C, 0x000A5D],
+ [0x000A5F, 0x000B5B],
+ [0x000B5E, 0x000E32],
+ [0x000E34, 0x000EB2],
+ [0x000EB4, 0x000EDB],
+ [0x000EDE, 0x000F0B],
+ [0x000F0D, 0x000F42],
+ [0x000F44, 0x000F4C],
+ [0x000F4E, 0x000F51],
+ [0x000F53, 0x000F56],
+ [0x000F58, 0x000F5B],
+ [0x000F5D, 0x000F68],
+ [0x000F6A, 0x000F72],
+ [0x000F7A, 0x000F80],
+ [0x000F82, 0x000F92],
+ [0x000F94, 0x000F9C],
+ [0x000F9E, 0x000FA1],
+ [0x000FA3, 0x000FA6],
+ [0x000FA8, 0x000FAB],
+ [0x000FAD, 0x000FB8],
+ [0x000FBA, 0x00109F],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x0010FB],
+ [0x0010FD, 0x00115E],
+ [0x001161, 0x0013F7],
+ [0x0013FE, 0x0017B3],
+ [0x0017B6, 0x00180A],
+ [0x001810, 0x001C7F],
+ [0x001C89, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC0, 0x001D2B],
+ [0x001D6B, 0x001D77],
+ [0x001D79, 0x001D9A],
+ [0x001DC0, 0x001DFF],
+ [0x001E95, 0x001E99],
+ [0x001E9C, 0x001E9D],
+ [0x001EFF, 0x001F07],
+ [0x001F10, 0x001F17],
+ [0x001F1E, 0x001F27],
+ [0x001F30, 0x001F37],
+ [0x001F40, 0x001F47],
+ [0x001F4E, 0x001F58],
+ [0x001F60, 0x001F67],
+ [0x001F7E, 0x001F7F],
+ [0x001FB0, 0x001FB1],
+ [0x001FB5, 0x001FB6],
+ [0x001FC5, 0x001FC6],
+ [0x001FD0, 0x001FD2],
+ [0x001FD4, 0x001FD7],
+ [0x001FE0, 0x001FE2],
+ [0x001FE4, 0x001FE7],
+ [0x001FF0, 0x001FF1],
+ [0x001FF5, 0x001FF6],
+ [0x002012, 0x002016],
+ [0x002018, 0x002023],
+ [0x002027, 0x002029],
+ [0x002030, 0x002032],
+ [0x002038, 0x00203B],
+ [0x00203F, 0x002046],
+ [0x00204A, 0x002056],
+ [0x002058, 0x00205E],
+ [0x002072, 0x002073],
+ [0x00209D, 0x0020A7],
+ [0x0020A9, 0x0020FF],
+ [0x002117, 0x002118],
+ [0x00211E, 0x00211F],
+ [0x002141, 0x002144],
+ [0x00214A, 0x00214F],
+ [0x002180, 0x002182],
+ [0x002184, 0x002188],
+ [0x00218A, 0x00222B],
+ [0x002231, 0x002328],
+ [0x00232B, 0x00245F],
+ [0x0024EB, 0x002A0B],
+ [0x002A0D, 0x002A73],
+ [0x002A77, 0x002ADB],
+ [0x002ADD, 0x002BFF],
+ [0x002C30, 0x002C5F],
+ [0x002C65, 0x002C66],
+ [0x002C73, 0x002C74],
+ [0x002C76, 0x002C7B],
+ [0x002CE3, 0x002CEA],
+ [0x002CEE, 0x002CF1],
+ [0x002CF3, 0x002D6E],
+ [0x002D70, 0x002E9E],
+ [0x002EA0, 0x002EF2],
+ [0x002EF4, 0x002EFF],
+ [0x002FD6, 0x002FFF],
+ [0x003001, 0x003035],
+ [0x00303B, 0x00309A],
+ [0x00309D, 0x00309E],
+ [0x0030A0, 0x0030FE],
+ [0x003100, 0x003130],
+ [0x00318F, 0x003191],
+ [0x0031A0, 0x0031FF],
+ [0x003248, 0x00324F],
+ [0x003400, 0x00A63F],
+ [0x00A66D, 0x00A67F],
+ [0x00A69E, 0x00A721],
+ [0x00A72F, 0x00A731],
+ [0x00A771, 0x00A778],
+ [0x00A787, 0x00A78A],
+ [0x00A78E, 0x00A78F],
+ [0x00A793, 0x00A795],
+ [0x00A7CA, 0x00A7CF],
+ [0x00A7D1, 0x00A7D5],
+ [0x00A7D9, 0x00A7F1],
+ [0x00A7F6, 0x00A7F7],
+ [0x00A7FA, 0x00AB5B],
+ [0x00AB60, 0x00AB68],
+ [0x00AB6A, 0x00AB6F],
+ [0x00ABC0, 0x00DBFF],
+ [0x00E000, 0x00F8FF],
+ [0x00FA0E, 0x00FA0F],
+ [0x00FA13, 0x00FA14],
+ [0x00FA23, 0x00FA24],
+ [0x00FA27, 0x00FA29],
+ [0x00FA6E, 0x00FA6F],
+ [0x00FADA, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FB1C],
+ [0x00FBB2, 0x00FBD2],
+ [0x00FD3E, 0x00FD4F],
+ [0x00FD90, 0x00FD91],
+ [0x00FDC8, 0x00FDEF],
+ [0x00FDFD, 0x00FDFF],
+ [0x00FE1A, 0x00FE2F],
+ [0x00FE45, 0x00FE46],
+ [0x00FE6C, 0x00FE6F],
+ [0x00FEFD, 0x00FEFE],
+ [0x00FFBF, 0x00FFC1],
+ [0x00FFC8, 0x00FFC9],
+ [0x00FFD0, 0x00FFD1],
+ [0x00FFD8, 0x00FFD9],
+ [0x00FFDD, 0x00FFDF],
+ [0x00FFF9, 0x0103FF],
+ [0x010428, 0x0104AF],
+ [0x0104D4, 0x01056F],
+ [0x010596, 0x010780],
+ [0x0107BB, 0x010C7F],
+ [0x010CB3, 0x01189F],
+ [0x0118C0, 0x016E3F],
+ [0x016E60, 0x01BC9F],
+ [0x01BCA4, 0x01D15D],
+ [0x01D165, 0x01D172],
+ [0x01D17B, 0x01D1BA],
+ [0x01D1C1, 0x01D3FF],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D50B, 0x01D50C],
+ [0x01D547, 0x01D549],
+ [0x01D6A6, 0x01D6A7],
+ [0x01D7CC, 0x01D7CD],
+ [0x01D800, 0x01E02F],
+ [0x01E06E, 0x01E8FF],
+ [0x01E922, 0x01EDFF],
+ [0x01EE25, 0x01EE26],
+ [0x01EE3C, 0x01EE41],
+ [0x01EE43, 0x01EE46],
+ [0x01EE55, 0x01EE56],
+ [0x01EE65, 0x01EE66],
+ [0x01EE9C, 0x01EEA0],
+ [0x01EEBC, 0x01F0FF],
+ [0x01F10B, 0x01F10F],
+ [0x01F150, 0x01F169],
+ [0x01F16D, 0x01F18F],
+ [0x01F191, 0x01F1FF],
+ [0x01F203, 0x01F20F],
+ [0x01F23C, 0x01F23F],
+ [0x01F249, 0x01F24F],
+ [0x01F252, 0x01FBEF],
+ [0x01FBFA, 0x02F7FF],
+ [0x02FA1E, 0x0DFFFF],
+ [0x0E1000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Changes_When_NFKC_Casefolded}+$/u,
+ nonMatchSymbols,
+ "\\P{Changes_When_NFKC_Casefolded}"
+);
+testPropertyEscapes(
+ /^\P{CWKCF}+$/u,
+ nonMatchSymbols,
+ "\\P{CWKCF}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Titlecased.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Titlecased.js
new file mode 100644
index 0000000000..335a0ea862
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Titlecased.js
@@ -0,0 +1,1305 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Changes_When_Titlecased`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000B5,
+ 0x000101,
+ 0x000103,
+ 0x000105,
+ 0x000107,
+ 0x000109,
+ 0x00010B,
+ 0x00010D,
+ 0x00010F,
+ 0x000111,
+ 0x000113,
+ 0x000115,
+ 0x000117,
+ 0x000119,
+ 0x00011B,
+ 0x00011D,
+ 0x00011F,
+ 0x000121,
+ 0x000123,
+ 0x000125,
+ 0x000127,
+ 0x000129,
+ 0x00012B,
+ 0x00012D,
+ 0x00012F,
+ 0x000131,
+ 0x000133,
+ 0x000135,
+ 0x000137,
+ 0x00013A,
+ 0x00013C,
+ 0x00013E,
+ 0x000140,
+ 0x000142,
+ 0x000144,
+ 0x000146,
+ 0x00014B,
+ 0x00014D,
+ 0x00014F,
+ 0x000151,
+ 0x000153,
+ 0x000155,
+ 0x000157,
+ 0x000159,
+ 0x00015B,
+ 0x00015D,
+ 0x00015F,
+ 0x000161,
+ 0x000163,
+ 0x000165,
+ 0x000167,
+ 0x000169,
+ 0x00016B,
+ 0x00016D,
+ 0x00016F,
+ 0x000171,
+ 0x000173,
+ 0x000175,
+ 0x000177,
+ 0x00017A,
+ 0x00017C,
+ 0x000183,
+ 0x000185,
+ 0x000188,
+ 0x00018C,
+ 0x000192,
+ 0x000195,
+ 0x00019E,
+ 0x0001A1,
+ 0x0001A3,
+ 0x0001A5,
+ 0x0001A8,
+ 0x0001AD,
+ 0x0001B0,
+ 0x0001B4,
+ 0x0001B6,
+ 0x0001B9,
+ 0x0001BD,
+ 0x0001BF,
+ 0x0001C4,
+ 0x0001CC,
+ 0x0001CE,
+ 0x0001D0,
+ 0x0001D2,
+ 0x0001D4,
+ 0x0001D6,
+ 0x0001D8,
+ 0x0001DA,
+ 0x0001DF,
+ 0x0001E1,
+ 0x0001E3,
+ 0x0001E5,
+ 0x0001E7,
+ 0x0001E9,
+ 0x0001EB,
+ 0x0001ED,
+ 0x0001F3,
+ 0x0001F5,
+ 0x0001F9,
+ 0x0001FB,
+ 0x0001FD,
+ 0x0001FF,
+ 0x000201,
+ 0x000203,
+ 0x000205,
+ 0x000207,
+ 0x000209,
+ 0x00020B,
+ 0x00020D,
+ 0x00020F,
+ 0x000211,
+ 0x000213,
+ 0x000215,
+ 0x000217,
+ 0x000219,
+ 0x00021B,
+ 0x00021D,
+ 0x00021F,
+ 0x000223,
+ 0x000225,
+ 0x000227,
+ 0x000229,
+ 0x00022B,
+ 0x00022D,
+ 0x00022F,
+ 0x000231,
+ 0x000233,
+ 0x00023C,
+ 0x000242,
+ 0x000247,
+ 0x000249,
+ 0x00024B,
+ 0x00024D,
+ 0x000259,
+ 0x000263,
+ 0x00026F,
+ 0x000275,
+ 0x00027D,
+ 0x000280,
+ 0x000292,
+ 0x000345,
+ 0x000371,
+ 0x000373,
+ 0x000377,
+ 0x000390,
+ 0x0003D9,
+ 0x0003DB,
+ 0x0003DD,
+ 0x0003DF,
+ 0x0003E1,
+ 0x0003E3,
+ 0x0003E5,
+ 0x0003E7,
+ 0x0003E9,
+ 0x0003EB,
+ 0x0003ED,
+ 0x0003F5,
+ 0x0003F8,
+ 0x0003FB,
+ 0x000461,
+ 0x000463,
+ 0x000465,
+ 0x000467,
+ 0x000469,
+ 0x00046B,
+ 0x00046D,
+ 0x00046F,
+ 0x000471,
+ 0x000473,
+ 0x000475,
+ 0x000477,
+ 0x000479,
+ 0x00047B,
+ 0x00047D,
+ 0x00047F,
+ 0x000481,
+ 0x00048B,
+ 0x00048D,
+ 0x00048F,
+ 0x000491,
+ 0x000493,
+ 0x000495,
+ 0x000497,
+ 0x000499,
+ 0x00049B,
+ 0x00049D,
+ 0x00049F,
+ 0x0004A1,
+ 0x0004A3,
+ 0x0004A5,
+ 0x0004A7,
+ 0x0004A9,
+ 0x0004AB,
+ 0x0004AD,
+ 0x0004AF,
+ 0x0004B1,
+ 0x0004B3,
+ 0x0004B5,
+ 0x0004B7,
+ 0x0004B9,
+ 0x0004BB,
+ 0x0004BD,
+ 0x0004BF,
+ 0x0004C2,
+ 0x0004C4,
+ 0x0004C6,
+ 0x0004C8,
+ 0x0004CA,
+ 0x0004CC,
+ 0x0004D1,
+ 0x0004D3,
+ 0x0004D5,
+ 0x0004D7,
+ 0x0004D9,
+ 0x0004DB,
+ 0x0004DD,
+ 0x0004DF,
+ 0x0004E1,
+ 0x0004E3,
+ 0x0004E5,
+ 0x0004E7,
+ 0x0004E9,
+ 0x0004EB,
+ 0x0004ED,
+ 0x0004EF,
+ 0x0004F1,
+ 0x0004F3,
+ 0x0004F5,
+ 0x0004F7,
+ 0x0004F9,
+ 0x0004FB,
+ 0x0004FD,
+ 0x0004FF,
+ 0x000501,
+ 0x000503,
+ 0x000505,
+ 0x000507,
+ 0x000509,
+ 0x00050B,
+ 0x00050D,
+ 0x00050F,
+ 0x000511,
+ 0x000513,
+ 0x000515,
+ 0x000517,
+ 0x000519,
+ 0x00051B,
+ 0x00051D,
+ 0x00051F,
+ 0x000521,
+ 0x000523,
+ 0x000525,
+ 0x000527,
+ 0x000529,
+ 0x00052B,
+ 0x00052D,
+ 0x00052F,
+ 0x001D79,
+ 0x001D7D,
+ 0x001D8E,
+ 0x001E01,
+ 0x001E03,
+ 0x001E05,
+ 0x001E07,
+ 0x001E09,
+ 0x001E0B,
+ 0x001E0D,
+ 0x001E0F,
+ 0x001E11,
+ 0x001E13,
+ 0x001E15,
+ 0x001E17,
+ 0x001E19,
+ 0x001E1B,
+ 0x001E1D,
+ 0x001E1F,
+ 0x001E21,
+ 0x001E23,
+ 0x001E25,
+ 0x001E27,
+ 0x001E29,
+ 0x001E2B,
+ 0x001E2D,
+ 0x001E2F,
+ 0x001E31,
+ 0x001E33,
+ 0x001E35,
+ 0x001E37,
+ 0x001E39,
+ 0x001E3B,
+ 0x001E3D,
+ 0x001E3F,
+ 0x001E41,
+ 0x001E43,
+ 0x001E45,
+ 0x001E47,
+ 0x001E49,
+ 0x001E4B,
+ 0x001E4D,
+ 0x001E4F,
+ 0x001E51,
+ 0x001E53,
+ 0x001E55,
+ 0x001E57,
+ 0x001E59,
+ 0x001E5B,
+ 0x001E5D,
+ 0x001E5F,
+ 0x001E61,
+ 0x001E63,
+ 0x001E65,
+ 0x001E67,
+ 0x001E69,
+ 0x001E6B,
+ 0x001E6D,
+ 0x001E6F,
+ 0x001E71,
+ 0x001E73,
+ 0x001E75,
+ 0x001E77,
+ 0x001E79,
+ 0x001E7B,
+ 0x001E7D,
+ 0x001E7F,
+ 0x001E81,
+ 0x001E83,
+ 0x001E85,
+ 0x001E87,
+ 0x001E89,
+ 0x001E8B,
+ 0x001E8D,
+ 0x001E8F,
+ 0x001E91,
+ 0x001E93,
+ 0x001EA1,
+ 0x001EA3,
+ 0x001EA5,
+ 0x001EA7,
+ 0x001EA9,
+ 0x001EAB,
+ 0x001EAD,
+ 0x001EAF,
+ 0x001EB1,
+ 0x001EB3,
+ 0x001EB5,
+ 0x001EB7,
+ 0x001EB9,
+ 0x001EBB,
+ 0x001EBD,
+ 0x001EBF,
+ 0x001EC1,
+ 0x001EC3,
+ 0x001EC5,
+ 0x001EC7,
+ 0x001EC9,
+ 0x001ECB,
+ 0x001ECD,
+ 0x001ECF,
+ 0x001ED1,
+ 0x001ED3,
+ 0x001ED5,
+ 0x001ED7,
+ 0x001ED9,
+ 0x001EDB,
+ 0x001EDD,
+ 0x001EDF,
+ 0x001EE1,
+ 0x001EE3,
+ 0x001EE5,
+ 0x001EE7,
+ 0x001EE9,
+ 0x001EEB,
+ 0x001EED,
+ 0x001EEF,
+ 0x001EF1,
+ 0x001EF3,
+ 0x001EF5,
+ 0x001EF7,
+ 0x001EF9,
+ 0x001EFB,
+ 0x001EFD,
+ 0x001FBE,
+ 0x00214E,
+ 0x002184,
+ 0x002C61,
+ 0x002C68,
+ 0x002C6A,
+ 0x002C6C,
+ 0x002C73,
+ 0x002C76,
+ 0x002C81,
+ 0x002C83,
+ 0x002C85,
+ 0x002C87,
+ 0x002C89,
+ 0x002C8B,
+ 0x002C8D,
+ 0x002C8F,
+ 0x002C91,
+ 0x002C93,
+ 0x002C95,
+ 0x002C97,
+ 0x002C99,
+ 0x002C9B,
+ 0x002C9D,
+ 0x002C9F,
+ 0x002CA1,
+ 0x002CA3,
+ 0x002CA5,
+ 0x002CA7,
+ 0x002CA9,
+ 0x002CAB,
+ 0x002CAD,
+ 0x002CAF,
+ 0x002CB1,
+ 0x002CB3,
+ 0x002CB5,
+ 0x002CB7,
+ 0x002CB9,
+ 0x002CBB,
+ 0x002CBD,
+ 0x002CBF,
+ 0x002CC1,
+ 0x002CC3,
+ 0x002CC5,
+ 0x002CC7,
+ 0x002CC9,
+ 0x002CCB,
+ 0x002CCD,
+ 0x002CCF,
+ 0x002CD1,
+ 0x002CD3,
+ 0x002CD5,
+ 0x002CD7,
+ 0x002CD9,
+ 0x002CDB,
+ 0x002CDD,
+ 0x002CDF,
+ 0x002CE1,
+ 0x002CE3,
+ 0x002CEC,
+ 0x002CEE,
+ 0x002CF3,
+ 0x002D27,
+ 0x002D2D,
+ 0x00A641,
+ 0x00A643,
+ 0x00A645,
+ 0x00A647,
+ 0x00A649,
+ 0x00A64B,
+ 0x00A64D,
+ 0x00A64F,
+ 0x00A651,
+ 0x00A653,
+ 0x00A655,
+ 0x00A657,
+ 0x00A659,
+ 0x00A65B,
+ 0x00A65D,
+ 0x00A65F,
+ 0x00A661,
+ 0x00A663,
+ 0x00A665,
+ 0x00A667,
+ 0x00A669,
+ 0x00A66B,
+ 0x00A66D,
+ 0x00A681,
+ 0x00A683,
+ 0x00A685,
+ 0x00A687,
+ 0x00A689,
+ 0x00A68B,
+ 0x00A68D,
+ 0x00A68F,
+ 0x00A691,
+ 0x00A693,
+ 0x00A695,
+ 0x00A697,
+ 0x00A699,
+ 0x00A69B,
+ 0x00A723,
+ 0x00A725,
+ 0x00A727,
+ 0x00A729,
+ 0x00A72B,
+ 0x00A72D,
+ 0x00A72F,
+ 0x00A733,
+ 0x00A735,
+ 0x00A737,
+ 0x00A739,
+ 0x00A73B,
+ 0x00A73D,
+ 0x00A73F,
+ 0x00A741,
+ 0x00A743,
+ 0x00A745,
+ 0x00A747,
+ 0x00A749,
+ 0x00A74B,
+ 0x00A74D,
+ 0x00A74F,
+ 0x00A751,
+ 0x00A753,
+ 0x00A755,
+ 0x00A757,
+ 0x00A759,
+ 0x00A75B,
+ 0x00A75D,
+ 0x00A75F,
+ 0x00A761,
+ 0x00A763,
+ 0x00A765,
+ 0x00A767,
+ 0x00A769,
+ 0x00A76B,
+ 0x00A76D,
+ 0x00A76F,
+ 0x00A77A,
+ 0x00A77C,
+ 0x00A77F,
+ 0x00A781,
+ 0x00A783,
+ 0x00A785,
+ 0x00A787,
+ 0x00A78C,
+ 0x00A791,
+ 0x00A797,
+ 0x00A799,
+ 0x00A79B,
+ 0x00A79D,
+ 0x00A79F,
+ 0x00A7A1,
+ 0x00A7A3,
+ 0x00A7A5,
+ 0x00A7A7,
+ 0x00A7A9,
+ 0x00A7B5,
+ 0x00A7B7,
+ 0x00A7B9,
+ 0x00A7BB,
+ 0x00A7BD,
+ 0x00A7BF,
+ 0x00A7C1,
+ 0x00A7C3,
+ 0x00A7C8,
+ 0x00A7CA,
+ 0x00A7D1,
+ 0x00A7D7,
+ 0x00A7D9,
+ 0x00A7F6,
+ 0x00AB53
+ ],
+ ranges: [
+ [0x000061, 0x00007A],
+ [0x0000DF, 0x0000F6],
+ [0x0000F8, 0x0000FF],
+ [0x000148, 0x000149],
+ [0x00017E, 0x000180],
+ [0x000199, 0x00019A],
+ [0x0001C6, 0x0001C7],
+ [0x0001C9, 0x0001CA],
+ [0x0001DC, 0x0001DD],
+ [0x0001EF, 0x0001F1],
+ [0x00023F, 0x000240],
+ [0x00024F, 0x000254],
+ [0x000256, 0x000257],
+ [0x00025B, 0x00025C],
+ [0x000260, 0x000261],
+ [0x000265, 0x000266],
+ [0x000268, 0x00026C],
+ [0x000271, 0x000272],
+ [0x000282, 0x000283],
+ [0x000287, 0x00028C],
+ [0x00029D, 0x00029E],
+ [0x00037B, 0x00037D],
+ [0x0003AC, 0x0003CE],
+ [0x0003D0, 0x0003D1],
+ [0x0003D5, 0x0003D7],
+ [0x0003EF, 0x0003F3],
+ [0x000430, 0x00045F],
+ [0x0004CE, 0x0004CF],
+ [0x000561, 0x000587],
+ [0x0013F8, 0x0013FD],
+ [0x001C80, 0x001C88],
+ [0x001E95, 0x001E9B],
+ [0x001EFF, 0x001F07],
+ [0x001F10, 0x001F15],
+ [0x001F20, 0x001F27],
+ [0x001F30, 0x001F37],
+ [0x001F40, 0x001F45],
+ [0x001F50, 0x001F57],
+ [0x001F60, 0x001F67],
+ [0x001F70, 0x001F7D],
+ [0x001F80, 0x001F87],
+ [0x001F90, 0x001F97],
+ [0x001FA0, 0x001FA7],
+ [0x001FB0, 0x001FB4],
+ [0x001FB6, 0x001FB7],
+ [0x001FC2, 0x001FC4],
+ [0x001FC6, 0x001FC7],
+ [0x001FD0, 0x001FD3],
+ [0x001FD6, 0x001FD7],
+ [0x001FE0, 0x001FE7],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FF7],
+ [0x002170, 0x00217F],
+ [0x0024D0, 0x0024E9],
+ [0x002C30, 0x002C5F],
+ [0x002C65, 0x002C66],
+ [0x002D00, 0x002D25],
+ [0x00A793, 0x00A794],
+ [0x00AB70, 0x00ABBF],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FF41, 0x00FF5A],
+ [0x010428, 0x01044F],
+ [0x0104D8, 0x0104FB],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC],
+ [0x010CC0, 0x010CF2],
+ [0x0118C0, 0x0118DF],
+ [0x016E60, 0x016E7F],
+ [0x01E922, 0x01E943]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Changes_When_Titlecased}+$/u,
+ matchSymbols,
+ "\\p{Changes_When_Titlecased}"
+);
+testPropertyEscapes(
+ /^\p{CWT}+$/u,
+ matchSymbols,
+ "\\p{CWT}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000F7,
+ 0x000100,
+ 0x000102,
+ 0x000104,
+ 0x000106,
+ 0x000108,
+ 0x00010A,
+ 0x00010C,
+ 0x00010E,
+ 0x000110,
+ 0x000112,
+ 0x000114,
+ 0x000116,
+ 0x000118,
+ 0x00011A,
+ 0x00011C,
+ 0x00011E,
+ 0x000120,
+ 0x000122,
+ 0x000124,
+ 0x000126,
+ 0x000128,
+ 0x00012A,
+ 0x00012C,
+ 0x00012E,
+ 0x000130,
+ 0x000132,
+ 0x000134,
+ 0x000136,
+ 0x00013B,
+ 0x00013D,
+ 0x00013F,
+ 0x000141,
+ 0x000143,
+ 0x000145,
+ 0x000147,
+ 0x00014A,
+ 0x00014C,
+ 0x00014E,
+ 0x000150,
+ 0x000152,
+ 0x000154,
+ 0x000156,
+ 0x000158,
+ 0x00015A,
+ 0x00015C,
+ 0x00015E,
+ 0x000160,
+ 0x000162,
+ 0x000164,
+ 0x000166,
+ 0x000168,
+ 0x00016A,
+ 0x00016C,
+ 0x00016E,
+ 0x000170,
+ 0x000172,
+ 0x000174,
+ 0x000176,
+ 0x00017B,
+ 0x00017D,
+ 0x000184,
+ 0x0001A2,
+ 0x0001A4,
+ 0x0001B5,
+ 0x0001BE,
+ 0x0001C5,
+ 0x0001C8,
+ 0x0001CB,
+ 0x0001CD,
+ 0x0001CF,
+ 0x0001D1,
+ 0x0001D3,
+ 0x0001D5,
+ 0x0001D7,
+ 0x0001D9,
+ 0x0001DB,
+ 0x0001DE,
+ 0x0001E0,
+ 0x0001E2,
+ 0x0001E4,
+ 0x0001E6,
+ 0x0001E8,
+ 0x0001EA,
+ 0x0001EC,
+ 0x0001EE,
+ 0x0001F2,
+ 0x0001F4,
+ 0x0001FA,
+ 0x0001FC,
+ 0x0001FE,
+ 0x000200,
+ 0x000202,
+ 0x000204,
+ 0x000206,
+ 0x000208,
+ 0x00020A,
+ 0x00020C,
+ 0x00020E,
+ 0x000210,
+ 0x000212,
+ 0x000214,
+ 0x000216,
+ 0x000218,
+ 0x00021A,
+ 0x00021C,
+ 0x00021E,
+ 0x000224,
+ 0x000226,
+ 0x000228,
+ 0x00022A,
+ 0x00022C,
+ 0x00022E,
+ 0x000230,
+ 0x000232,
+ 0x000241,
+ 0x000248,
+ 0x00024A,
+ 0x00024C,
+ 0x00024E,
+ 0x000255,
+ 0x000258,
+ 0x00025A,
+ 0x000262,
+ 0x000264,
+ 0x000267,
+ 0x000270,
+ 0x000281,
+ 0x000372,
+ 0x0003CF,
+ 0x0003D8,
+ 0x0003DA,
+ 0x0003DC,
+ 0x0003DE,
+ 0x0003E0,
+ 0x0003E2,
+ 0x0003E4,
+ 0x0003E6,
+ 0x0003E8,
+ 0x0003EA,
+ 0x0003EC,
+ 0x0003EE,
+ 0x0003F4,
+ 0x000460,
+ 0x000462,
+ 0x000464,
+ 0x000466,
+ 0x000468,
+ 0x00046A,
+ 0x00046C,
+ 0x00046E,
+ 0x000470,
+ 0x000472,
+ 0x000474,
+ 0x000476,
+ 0x000478,
+ 0x00047A,
+ 0x00047C,
+ 0x00047E,
+ 0x000480,
+ 0x00048C,
+ 0x00048E,
+ 0x000490,
+ 0x000492,
+ 0x000494,
+ 0x000496,
+ 0x000498,
+ 0x00049A,
+ 0x00049C,
+ 0x00049E,
+ 0x0004A0,
+ 0x0004A2,
+ 0x0004A4,
+ 0x0004A6,
+ 0x0004A8,
+ 0x0004AA,
+ 0x0004AC,
+ 0x0004AE,
+ 0x0004B0,
+ 0x0004B2,
+ 0x0004B4,
+ 0x0004B6,
+ 0x0004B8,
+ 0x0004BA,
+ 0x0004BC,
+ 0x0004BE,
+ 0x0004C3,
+ 0x0004C5,
+ 0x0004C7,
+ 0x0004C9,
+ 0x0004CB,
+ 0x0004CD,
+ 0x0004D0,
+ 0x0004D2,
+ 0x0004D4,
+ 0x0004D6,
+ 0x0004D8,
+ 0x0004DA,
+ 0x0004DC,
+ 0x0004DE,
+ 0x0004E0,
+ 0x0004E2,
+ 0x0004E4,
+ 0x0004E6,
+ 0x0004E8,
+ 0x0004EA,
+ 0x0004EC,
+ 0x0004EE,
+ 0x0004F0,
+ 0x0004F2,
+ 0x0004F4,
+ 0x0004F6,
+ 0x0004F8,
+ 0x0004FA,
+ 0x0004FC,
+ 0x0004FE,
+ 0x000500,
+ 0x000502,
+ 0x000504,
+ 0x000506,
+ 0x000508,
+ 0x00050A,
+ 0x00050C,
+ 0x00050E,
+ 0x000510,
+ 0x000512,
+ 0x000514,
+ 0x000516,
+ 0x000518,
+ 0x00051A,
+ 0x00051C,
+ 0x00051E,
+ 0x000520,
+ 0x000522,
+ 0x000524,
+ 0x000526,
+ 0x000528,
+ 0x00052A,
+ 0x00052C,
+ 0x00052E,
+ 0x001E02,
+ 0x001E04,
+ 0x001E06,
+ 0x001E08,
+ 0x001E0A,
+ 0x001E0C,
+ 0x001E0E,
+ 0x001E10,
+ 0x001E12,
+ 0x001E14,
+ 0x001E16,
+ 0x001E18,
+ 0x001E1A,
+ 0x001E1C,
+ 0x001E1E,
+ 0x001E20,
+ 0x001E22,
+ 0x001E24,
+ 0x001E26,
+ 0x001E28,
+ 0x001E2A,
+ 0x001E2C,
+ 0x001E2E,
+ 0x001E30,
+ 0x001E32,
+ 0x001E34,
+ 0x001E36,
+ 0x001E38,
+ 0x001E3A,
+ 0x001E3C,
+ 0x001E3E,
+ 0x001E40,
+ 0x001E42,
+ 0x001E44,
+ 0x001E46,
+ 0x001E48,
+ 0x001E4A,
+ 0x001E4C,
+ 0x001E4E,
+ 0x001E50,
+ 0x001E52,
+ 0x001E54,
+ 0x001E56,
+ 0x001E58,
+ 0x001E5A,
+ 0x001E5C,
+ 0x001E5E,
+ 0x001E60,
+ 0x001E62,
+ 0x001E64,
+ 0x001E66,
+ 0x001E68,
+ 0x001E6A,
+ 0x001E6C,
+ 0x001E6E,
+ 0x001E70,
+ 0x001E72,
+ 0x001E74,
+ 0x001E76,
+ 0x001E78,
+ 0x001E7A,
+ 0x001E7C,
+ 0x001E7E,
+ 0x001E80,
+ 0x001E82,
+ 0x001E84,
+ 0x001E86,
+ 0x001E88,
+ 0x001E8A,
+ 0x001E8C,
+ 0x001E8E,
+ 0x001E90,
+ 0x001E92,
+ 0x001E94,
+ 0x001EA2,
+ 0x001EA4,
+ 0x001EA6,
+ 0x001EA8,
+ 0x001EAA,
+ 0x001EAC,
+ 0x001EAE,
+ 0x001EB0,
+ 0x001EB2,
+ 0x001EB4,
+ 0x001EB6,
+ 0x001EB8,
+ 0x001EBA,
+ 0x001EBC,
+ 0x001EBE,
+ 0x001EC0,
+ 0x001EC2,
+ 0x001EC4,
+ 0x001EC6,
+ 0x001EC8,
+ 0x001ECA,
+ 0x001ECC,
+ 0x001ECE,
+ 0x001ED0,
+ 0x001ED2,
+ 0x001ED4,
+ 0x001ED6,
+ 0x001ED8,
+ 0x001EDA,
+ 0x001EDC,
+ 0x001EDE,
+ 0x001EE0,
+ 0x001EE2,
+ 0x001EE4,
+ 0x001EE6,
+ 0x001EE8,
+ 0x001EEA,
+ 0x001EEC,
+ 0x001EEE,
+ 0x001EF0,
+ 0x001EF2,
+ 0x001EF4,
+ 0x001EF6,
+ 0x001EF8,
+ 0x001EFA,
+ 0x001EFC,
+ 0x001EFE,
+ 0x001FB5,
+ 0x001FC5,
+ 0x001FF5,
+ 0x002C60,
+ 0x002C67,
+ 0x002C69,
+ 0x002C6B,
+ 0x002C82,
+ 0x002C84,
+ 0x002C86,
+ 0x002C88,
+ 0x002C8A,
+ 0x002C8C,
+ 0x002C8E,
+ 0x002C90,
+ 0x002C92,
+ 0x002C94,
+ 0x002C96,
+ 0x002C98,
+ 0x002C9A,
+ 0x002C9C,
+ 0x002C9E,
+ 0x002CA0,
+ 0x002CA2,
+ 0x002CA4,
+ 0x002CA6,
+ 0x002CA8,
+ 0x002CAA,
+ 0x002CAC,
+ 0x002CAE,
+ 0x002CB0,
+ 0x002CB2,
+ 0x002CB4,
+ 0x002CB6,
+ 0x002CB8,
+ 0x002CBA,
+ 0x002CBC,
+ 0x002CBE,
+ 0x002CC0,
+ 0x002CC2,
+ 0x002CC4,
+ 0x002CC6,
+ 0x002CC8,
+ 0x002CCA,
+ 0x002CCC,
+ 0x002CCE,
+ 0x002CD0,
+ 0x002CD2,
+ 0x002CD4,
+ 0x002CD6,
+ 0x002CD8,
+ 0x002CDA,
+ 0x002CDC,
+ 0x002CDE,
+ 0x002CE0,
+ 0x002CE2,
+ 0x002CED,
+ 0x002D26,
+ 0x00A642,
+ 0x00A644,
+ 0x00A646,
+ 0x00A648,
+ 0x00A64A,
+ 0x00A64C,
+ 0x00A64E,
+ 0x00A650,
+ 0x00A652,
+ 0x00A654,
+ 0x00A656,
+ 0x00A658,
+ 0x00A65A,
+ 0x00A65C,
+ 0x00A65E,
+ 0x00A660,
+ 0x00A662,
+ 0x00A664,
+ 0x00A666,
+ 0x00A668,
+ 0x00A66A,
+ 0x00A66C,
+ 0x00A682,
+ 0x00A684,
+ 0x00A686,
+ 0x00A688,
+ 0x00A68A,
+ 0x00A68C,
+ 0x00A68E,
+ 0x00A690,
+ 0x00A692,
+ 0x00A694,
+ 0x00A696,
+ 0x00A698,
+ 0x00A69A,
+ 0x00A724,
+ 0x00A726,
+ 0x00A728,
+ 0x00A72A,
+ 0x00A72C,
+ 0x00A72E,
+ 0x00A734,
+ 0x00A736,
+ 0x00A738,
+ 0x00A73A,
+ 0x00A73C,
+ 0x00A73E,
+ 0x00A740,
+ 0x00A742,
+ 0x00A744,
+ 0x00A746,
+ 0x00A748,
+ 0x00A74A,
+ 0x00A74C,
+ 0x00A74E,
+ 0x00A750,
+ 0x00A752,
+ 0x00A754,
+ 0x00A756,
+ 0x00A758,
+ 0x00A75A,
+ 0x00A75C,
+ 0x00A75E,
+ 0x00A760,
+ 0x00A762,
+ 0x00A764,
+ 0x00A766,
+ 0x00A768,
+ 0x00A76A,
+ 0x00A76C,
+ 0x00A76E,
+ 0x00A77B,
+ 0x00A780,
+ 0x00A782,
+ 0x00A784,
+ 0x00A786,
+ 0x00A792,
+ 0x00A798,
+ 0x00A79A,
+ 0x00A79C,
+ 0x00A79E,
+ 0x00A7A0,
+ 0x00A7A2,
+ 0x00A7A4,
+ 0x00A7A6,
+ 0x00A7A8,
+ 0x00A7B6,
+ 0x00A7B8,
+ 0x00A7BA,
+ 0x00A7BC,
+ 0x00A7BE,
+ 0x00A7C0,
+ 0x00A7C2,
+ 0x00A7C9,
+ 0x00A7D8,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000060],
+ [0x00007B, 0x0000B4],
+ [0x0000B6, 0x0000DE],
+ [0x000138, 0x000139],
+ [0x000178, 0x000179],
+ [0x000181, 0x000182],
+ [0x000186, 0x000187],
+ [0x000189, 0x00018B],
+ [0x00018D, 0x000191],
+ [0x000193, 0x000194],
+ [0x000196, 0x000198],
+ [0x00019B, 0x00019D],
+ [0x00019F, 0x0001A0],
+ [0x0001A6, 0x0001A7],
+ [0x0001A9, 0x0001AC],
+ [0x0001AE, 0x0001AF],
+ [0x0001B1, 0x0001B3],
+ [0x0001B7, 0x0001B8],
+ [0x0001BA, 0x0001BC],
+ [0x0001C0, 0x0001C3],
+ [0x0001F6, 0x0001F8],
+ [0x000220, 0x000222],
+ [0x000234, 0x00023B],
+ [0x00023D, 0x00023E],
+ [0x000243, 0x000246],
+ [0x00025D, 0x00025F],
+ [0x00026D, 0x00026E],
+ [0x000273, 0x000274],
+ [0x000276, 0x00027C],
+ [0x00027E, 0x00027F],
+ [0x000284, 0x000286],
+ [0x00028D, 0x000291],
+ [0x000293, 0x00029C],
+ [0x00029F, 0x000344],
+ [0x000346, 0x000370],
+ [0x000374, 0x000376],
+ [0x000378, 0x00037A],
+ [0x00037E, 0x00038F],
+ [0x000391, 0x0003AB],
+ [0x0003D2, 0x0003D4],
+ [0x0003F6, 0x0003F7],
+ [0x0003F9, 0x0003FA],
+ [0x0003FC, 0x00042F],
+ [0x000482, 0x00048A],
+ [0x0004C0, 0x0004C1],
+ [0x000530, 0x000560],
+ [0x000588, 0x0013F7],
+ [0x0013FE, 0x001C7F],
+ [0x001C89, 0x001D78],
+ [0x001D7A, 0x001D7C],
+ [0x001D7E, 0x001D8D],
+ [0x001D8F, 0x001E00],
+ [0x001E9C, 0x001EA0],
+ [0x001F08, 0x001F0F],
+ [0x001F16, 0x001F1F],
+ [0x001F28, 0x001F2F],
+ [0x001F38, 0x001F3F],
+ [0x001F46, 0x001F4F],
+ [0x001F58, 0x001F5F],
+ [0x001F68, 0x001F6F],
+ [0x001F7E, 0x001F7F],
+ [0x001F88, 0x001F8F],
+ [0x001F98, 0x001F9F],
+ [0x001FA8, 0x001FAF],
+ [0x001FB8, 0x001FBD],
+ [0x001FBF, 0x001FC1],
+ [0x001FC8, 0x001FCF],
+ [0x001FD4, 0x001FD5],
+ [0x001FD8, 0x001FDF],
+ [0x001FE8, 0x001FF1],
+ [0x001FF8, 0x00214D],
+ [0x00214F, 0x00216F],
+ [0x002180, 0x002183],
+ [0x002185, 0x0024CF],
+ [0x0024EA, 0x002C2F],
+ [0x002C62, 0x002C64],
+ [0x002C6D, 0x002C72],
+ [0x002C74, 0x002C75],
+ [0x002C77, 0x002C80],
+ [0x002CE4, 0x002CEB],
+ [0x002CEF, 0x002CF2],
+ [0x002CF4, 0x002CFF],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x00A640],
+ [0x00A66E, 0x00A680],
+ [0x00A69C, 0x00A722],
+ [0x00A730, 0x00A732],
+ [0x00A770, 0x00A779],
+ [0x00A77D, 0x00A77E],
+ [0x00A788, 0x00A78B],
+ [0x00A78D, 0x00A790],
+ [0x00A795, 0x00A796],
+ [0x00A7AA, 0x00A7B4],
+ [0x00A7C4, 0x00A7C7],
+ [0x00A7CB, 0x00A7D0],
+ [0x00A7D2, 0x00A7D6],
+ [0x00A7DA, 0x00A7F5],
+ [0x00A7F7, 0x00AB52],
+ [0x00AB54, 0x00AB6F],
+ [0x00ABC0, 0x00DBFF],
+ [0x00E000, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FF40],
+ [0x00FF5B, 0x010427],
+ [0x010450, 0x0104D7],
+ [0x0104FC, 0x010596],
+ [0x0105BD, 0x010CBF],
+ [0x010CF3, 0x0118BF],
+ [0x0118E0, 0x016E5F],
+ [0x016E80, 0x01E921],
+ [0x01E944, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Changes_When_Titlecased}+$/u,
+ nonMatchSymbols,
+ "\\P{Changes_When_Titlecased}"
+);
+testPropertyEscapes(
+ /^\P{CWT}+$/u,
+ nonMatchSymbols,
+ "\\P{CWT}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Uppercased.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Uppercased.js
new file mode 100644
index 0000000000..08adc3bbee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Changes_When_Uppercased.js
@@ -0,0 +1,1307 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Changes_When_Uppercased`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000B5,
+ 0x000101,
+ 0x000103,
+ 0x000105,
+ 0x000107,
+ 0x000109,
+ 0x00010B,
+ 0x00010D,
+ 0x00010F,
+ 0x000111,
+ 0x000113,
+ 0x000115,
+ 0x000117,
+ 0x000119,
+ 0x00011B,
+ 0x00011D,
+ 0x00011F,
+ 0x000121,
+ 0x000123,
+ 0x000125,
+ 0x000127,
+ 0x000129,
+ 0x00012B,
+ 0x00012D,
+ 0x00012F,
+ 0x000131,
+ 0x000133,
+ 0x000135,
+ 0x000137,
+ 0x00013A,
+ 0x00013C,
+ 0x00013E,
+ 0x000140,
+ 0x000142,
+ 0x000144,
+ 0x000146,
+ 0x00014B,
+ 0x00014D,
+ 0x00014F,
+ 0x000151,
+ 0x000153,
+ 0x000155,
+ 0x000157,
+ 0x000159,
+ 0x00015B,
+ 0x00015D,
+ 0x00015F,
+ 0x000161,
+ 0x000163,
+ 0x000165,
+ 0x000167,
+ 0x000169,
+ 0x00016B,
+ 0x00016D,
+ 0x00016F,
+ 0x000171,
+ 0x000173,
+ 0x000175,
+ 0x000177,
+ 0x00017A,
+ 0x00017C,
+ 0x000183,
+ 0x000185,
+ 0x000188,
+ 0x00018C,
+ 0x000192,
+ 0x000195,
+ 0x00019E,
+ 0x0001A1,
+ 0x0001A3,
+ 0x0001A5,
+ 0x0001A8,
+ 0x0001AD,
+ 0x0001B0,
+ 0x0001B4,
+ 0x0001B6,
+ 0x0001B9,
+ 0x0001BD,
+ 0x0001BF,
+ 0x0001CE,
+ 0x0001D0,
+ 0x0001D2,
+ 0x0001D4,
+ 0x0001D6,
+ 0x0001D8,
+ 0x0001DA,
+ 0x0001DF,
+ 0x0001E1,
+ 0x0001E3,
+ 0x0001E5,
+ 0x0001E7,
+ 0x0001E9,
+ 0x0001EB,
+ 0x0001ED,
+ 0x0001F5,
+ 0x0001F9,
+ 0x0001FB,
+ 0x0001FD,
+ 0x0001FF,
+ 0x000201,
+ 0x000203,
+ 0x000205,
+ 0x000207,
+ 0x000209,
+ 0x00020B,
+ 0x00020D,
+ 0x00020F,
+ 0x000211,
+ 0x000213,
+ 0x000215,
+ 0x000217,
+ 0x000219,
+ 0x00021B,
+ 0x00021D,
+ 0x00021F,
+ 0x000223,
+ 0x000225,
+ 0x000227,
+ 0x000229,
+ 0x00022B,
+ 0x00022D,
+ 0x00022F,
+ 0x000231,
+ 0x000233,
+ 0x00023C,
+ 0x000242,
+ 0x000247,
+ 0x000249,
+ 0x00024B,
+ 0x00024D,
+ 0x000259,
+ 0x000263,
+ 0x00026F,
+ 0x000275,
+ 0x00027D,
+ 0x000280,
+ 0x000292,
+ 0x000345,
+ 0x000371,
+ 0x000373,
+ 0x000377,
+ 0x000390,
+ 0x0003D9,
+ 0x0003DB,
+ 0x0003DD,
+ 0x0003DF,
+ 0x0003E1,
+ 0x0003E3,
+ 0x0003E5,
+ 0x0003E7,
+ 0x0003E9,
+ 0x0003EB,
+ 0x0003ED,
+ 0x0003F5,
+ 0x0003F8,
+ 0x0003FB,
+ 0x000461,
+ 0x000463,
+ 0x000465,
+ 0x000467,
+ 0x000469,
+ 0x00046B,
+ 0x00046D,
+ 0x00046F,
+ 0x000471,
+ 0x000473,
+ 0x000475,
+ 0x000477,
+ 0x000479,
+ 0x00047B,
+ 0x00047D,
+ 0x00047F,
+ 0x000481,
+ 0x00048B,
+ 0x00048D,
+ 0x00048F,
+ 0x000491,
+ 0x000493,
+ 0x000495,
+ 0x000497,
+ 0x000499,
+ 0x00049B,
+ 0x00049D,
+ 0x00049F,
+ 0x0004A1,
+ 0x0004A3,
+ 0x0004A5,
+ 0x0004A7,
+ 0x0004A9,
+ 0x0004AB,
+ 0x0004AD,
+ 0x0004AF,
+ 0x0004B1,
+ 0x0004B3,
+ 0x0004B5,
+ 0x0004B7,
+ 0x0004B9,
+ 0x0004BB,
+ 0x0004BD,
+ 0x0004BF,
+ 0x0004C2,
+ 0x0004C4,
+ 0x0004C6,
+ 0x0004C8,
+ 0x0004CA,
+ 0x0004CC,
+ 0x0004D1,
+ 0x0004D3,
+ 0x0004D5,
+ 0x0004D7,
+ 0x0004D9,
+ 0x0004DB,
+ 0x0004DD,
+ 0x0004DF,
+ 0x0004E1,
+ 0x0004E3,
+ 0x0004E5,
+ 0x0004E7,
+ 0x0004E9,
+ 0x0004EB,
+ 0x0004ED,
+ 0x0004EF,
+ 0x0004F1,
+ 0x0004F3,
+ 0x0004F5,
+ 0x0004F7,
+ 0x0004F9,
+ 0x0004FB,
+ 0x0004FD,
+ 0x0004FF,
+ 0x000501,
+ 0x000503,
+ 0x000505,
+ 0x000507,
+ 0x000509,
+ 0x00050B,
+ 0x00050D,
+ 0x00050F,
+ 0x000511,
+ 0x000513,
+ 0x000515,
+ 0x000517,
+ 0x000519,
+ 0x00051B,
+ 0x00051D,
+ 0x00051F,
+ 0x000521,
+ 0x000523,
+ 0x000525,
+ 0x000527,
+ 0x000529,
+ 0x00052B,
+ 0x00052D,
+ 0x00052F,
+ 0x001D79,
+ 0x001D7D,
+ 0x001D8E,
+ 0x001E01,
+ 0x001E03,
+ 0x001E05,
+ 0x001E07,
+ 0x001E09,
+ 0x001E0B,
+ 0x001E0D,
+ 0x001E0F,
+ 0x001E11,
+ 0x001E13,
+ 0x001E15,
+ 0x001E17,
+ 0x001E19,
+ 0x001E1B,
+ 0x001E1D,
+ 0x001E1F,
+ 0x001E21,
+ 0x001E23,
+ 0x001E25,
+ 0x001E27,
+ 0x001E29,
+ 0x001E2B,
+ 0x001E2D,
+ 0x001E2F,
+ 0x001E31,
+ 0x001E33,
+ 0x001E35,
+ 0x001E37,
+ 0x001E39,
+ 0x001E3B,
+ 0x001E3D,
+ 0x001E3F,
+ 0x001E41,
+ 0x001E43,
+ 0x001E45,
+ 0x001E47,
+ 0x001E49,
+ 0x001E4B,
+ 0x001E4D,
+ 0x001E4F,
+ 0x001E51,
+ 0x001E53,
+ 0x001E55,
+ 0x001E57,
+ 0x001E59,
+ 0x001E5B,
+ 0x001E5D,
+ 0x001E5F,
+ 0x001E61,
+ 0x001E63,
+ 0x001E65,
+ 0x001E67,
+ 0x001E69,
+ 0x001E6B,
+ 0x001E6D,
+ 0x001E6F,
+ 0x001E71,
+ 0x001E73,
+ 0x001E75,
+ 0x001E77,
+ 0x001E79,
+ 0x001E7B,
+ 0x001E7D,
+ 0x001E7F,
+ 0x001E81,
+ 0x001E83,
+ 0x001E85,
+ 0x001E87,
+ 0x001E89,
+ 0x001E8B,
+ 0x001E8D,
+ 0x001E8F,
+ 0x001E91,
+ 0x001E93,
+ 0x001EA1,
+ 0x001EA3,
+ 0x001EA5,
+ 0x001EA7,
+ 0x001EA9,
+ 0x001EAB,
+ 0x001EAD,
+ 0x001EAF,
+ 0x001EB1,
+ 0x001EB3,
+ 0x001EB5,
+ 0x001EB7,
+ 0x001EB9,
+ 0x001EBB,
+ 0x001EBD,
+ 0x001EBF,
+ 0x001EC1,
+ 0x001EC3,
+ 0x001EC5,
+ 0x001EC7,
+ 0x001EC9,
+ 0x001ECB,
+ 0x001ECD,
+ 0x001ECF,
+ 0x001ED1,
+ 0x001ED3,
+ 0x001ED5,
+ 0x001ED7,
+ 0x001ED9,
+ 0x001EDB,
+ 0x001EDD,
+ 0x001EDF,
+ 0x001EE1,
+ 0x001EE3,
+ 0x001EE5,
+ 0x001EE7,
+ 0x001EE9,
+ 0x001EEB,
+ 0x001EED,
+ 0x001EEF,
+ 0x001EF1,
+ 0x001EF3,
+ 0x001EF5,
+ 0x001EF7,
+ 0x001EF9,
+ 0x001EFB,
+ 0x001EFD,
+ 0x001FBC,
+ 0x001FBE,
+ 0x001FCC,
+ 0x001FFC,
+ 0x00214E,
+ 0x002184,
+ 0x002C61,
+ 0x002C68,
+ 0x002C6A,
+ 0x002C6C,
+ 0x002C73,
+ 0x002C76,
+ 0x002C81,
+ 0x002C83,
+ 0x002C85,
+ 0x002C87,
+ 0x002C89,
+ 0x002C8B,
+ 0x002C8D,
+ 0x002C8F,
+ 0x002C91,
+ 0x002C93,
+ 0x002C95,
+ 0x002C97,
+ 0x002C99,
+ 0x002C9B,
+ 0x002C9D,
+ 0x002C9F,
+ 0x002CA1,
+ 0x002CA3,
+ 0x002CA5,
+ 0x002CA7,
+ 0x002CA9,
+ 0x002CAB,
+ 0x002CAD,
+ 0x002CAF,
+ 0x002CB1,
+ 0x002CB3,
+ 0x002CB5,
+ 0x002CB7,
+ 0x002CB9,
+ 0x002CBB,
+ 0x002CBD,
+ 0x002CBF,
+ 0x002CC1,
+ 0x002CC3,
+ 0x002CC5,
+ 0x002CC7,
+ 0x002CC9,
+ 0x002CCB,
+ 0x002CCD,
+ 0x002CCF,
+ 0x002CD1,
+ 0x002CD3,
+ 0x002CD5,
+ 0x002CD7,
+ 0x002CD9,
+ 0x002CDB,
+ 0x002CDD,
+ 0x002CDF,
+ 0x002CE1,
+ 0x002CE3,
+ 0x002CEC,
+ 0x002CEE,
+ 0x002CF3,
+ 0x002D27,
+ 0x002D2D,
+ 0x00A641,
+ 0x00A643,
+ 0x00A645,
+ 0x00A647,
+ 0x00A649,
+ 0x00A64B,
+ 0x00A64D,
+ 0x00A64F,
+ 0x00A651,
+ 0x00A653,
+ 0x00A655,
+ 0x00A657,
+ 0x00A659,
+ 0x00A65B,
+ 0x00A65D,
+ 0x00A65F,
+ 0x00A661,
+ 0x00A663,
+ 0x00A665,
+ 0x00A667,
+ 0x00A669,
+ 0x00A66B,
+ 0x00A66D,
+ 0x00A681,
+ 0x00A683,
+ 0x00A685,
+ 0x00A687,
+ 0x00A689,
+ 0x00A68B,
+ 0x00A68D,
+ 0x00A68F,
+ 0x00A691,
+ 0x00A693,
+ 0x00A695,
+ 0x00A697,
+ 0x00A699,
+ 0x00A69B,
+ 0x00A723,
+ 0x00A725,
+ 0x00A727,
+ 0x00A729,
+ 0x00A72B,
+ 0x00A72D,
+ 0x00A72F,
+ 0x00A733,
+ 0x00A735,
+ 0x00A737,
+ 0x00A739,
+ 0x00A73B,
+ 0x00A73D,
+ 0x00A73F,
+ 0x00A741,
+ 0x00A743,
+ 0x00A745,
+ 0x00A747,
+ 0x00A749,
+ 0x00A74B,
+ 0x00A74D,
+ 0x00A74F,
+ 0x00A751,
+ 0x00A753,
+ 0x00A755,
+ 0x00A757,
+ 0x00A759,
+ 0x00A75B,
+ 0x00A75D,
+ 0x00A75F,
+ 0x00A761,
+ 0x00A763,
+ 0x00A765,
+ 0x00A767,
+ 0x00A769,
+ 0x00A76B,
+ 0x00A76D,
+ 0x00A76F,
+ 0x00A77A,
+ 0x00A77C,
+ 0x00A77F,
+ 0x00A781,
+ 0x00A783,
+ 0x00A785,
+ 0x00A787,
+ 0x00A78C,
+ 0x00A791,
+ 0x00A797,
+ 0x00A799,
+ 0x00A79B,
+ 0x00A79D,
+ 0x00A79F,
+ 0x00A7A1,
+ 0x00A7A3,
+ 0x00A7A5,
+ 0x00A7A7,
+ 0x00A7A9,
+ 0x00A7B5,
+ 0x00A7B7,
+ 0x00A7B9,
+ 0x00A7BB,
+ 0x00A7BD,
+ 0x00A7BF,
+ 0x00A7C1,
+ 0x00A7C3,
+ 0x00A7C8,
+ 0x00A7CA,
+ 0x00A7D1,
+ 0x00A7D7,
+ 0x00A7D9,
+ 0x00A7F6,
+ 0x00AB53
+ ],
+ ranges: [
+ [0x000061, 0x00007A],
+ [0x0000DF, 0x0000F6],
+ [0x0000F8, 0x0000FF],
+ [0x000148, 0x000149],
+ [0x00017E, 0x000180],
+ [0x000199, 0x00019A],
+ [0x0001C5, 0x0001C6],
+ [0x0001C8, 0x0001C9],
+ [0x0001CB, 0x0001CC],
+ [0x0001DC, 0x0001DD],
+ [0x0001EF, 0x0001F0],
+ [0x0001F2, 0x0001F3],
+ [0x00023F, 0x000240],
+ [0x00024F, 0x000254],
+ [0x000256, 0x000257],
+ [0x00025B, 0x00025C],
+ [0x000260, 0x000261],
+ [0x000265, 0x000266],
+ [0x000268, 0x00026C],
+ [0x000271, 0x000272],
+ [0x000282, 0x000283],
+ [0x000287, 0x00028C],
+ [0x00029D, 0x00029E],
+ [0x00037B, 0x00037D],
+ [0x0003AC, 0x0003CE],
+ [0x0003D0, 0x0003D1],
+ [0x0003D5, 0x0003D7],
+ [0x0003EF, 0x0003F3],
+ [0x000430, 0x00045F],
+ [0x0004CE, 0x0004CF],
+ [0x000561, 0x000587],
+ [0x0010D0, 0x0010FA],
+ [0x0010FD, 0x0010FF],
+ [0x0013F8, 0x0013FD],
+ [0x001C80, 0x001C88],
+ [0x001E95, 0x001E9B],
+ [0x001EFF, 0x001F07],
+ [0x001F10, 0x001F15],
+ [0x001F20, 0x001F27],
+ [0x001F30, 0x001F37],
+ [0x001F40, 0x001F45],
+ [0x001F50, 0x001F57],
+ [0x001F60, 0x001F67],
+ [0x001F70, 0x001F7D],
+ [0x001F80, 0x001FB4],
+ [0x001FB6, 0x001FB7],
+ [0x001FC2, 0x001FC4],
+ [0x001FC6, 0x001FC7],
+ [0x001FD0, 0x001FD3],
+ [0x001FD6, 0x001FD7],
+ [0x001FE0, 0x001FE7],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FF7],
+ [0x002170, 0x00217F],
+ [0x0024D0, 0x0024E9],
+ [0x002C30, 0x002C5F],
+ [0x002C65, 0x002C66],
+ [0x002D00, 0x002D25],
+ [0x00A793, 0x00A794],
+ [0x00AB70, 0x00ABBF],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FF41, 0x00FF5A],
+ [0x010428, 0x01044F],
+ [0x0104D8, 0x0104FB],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC],
+ [0x010CC0, 0x010CF2],
+ [0x0118C0, 0x0118DF],
+ [0x016E60, 0x016E7F],
+ [0x01E922, 0x01E943]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Changes_When_Uppercased}+$/u,
+ matchSymbols,
+ "\\p{Changes_When_Uppercased}"
+);
+testPropertyEscapes(
+ /^\p{CWU}+$/u,
+ matchSymbols,
+ "\\p{CWU}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000F7,
+ 0x000100,
+ 0x000102,
+ 0x000104,
+ 0x000106,
+ 0x000108,
+ 0x00010A,
+ 0x00010C,
+ 0x00010E,
+ 0x000110,
+ 0x000112,
+ 0x000114,
+ 0x000116,
+ 0x000118,
+ 0x00011A,
+ 0x00011C,
+ 0x00011E,
+ 0x000120,
+ 0x000122,
+ 0x000124,
+ 0x000126,
+ 0x000128,
+ 0x00012A,
+ 0x00012C,
+ 0x00012E,
+ 0x000130,
+ 0x000132,
+ 0x000134,
+ 0x000136,
+ 0x00013B,
+ 0x00013D,
+ 0x00013F,
+ 0x000141,
+ 0x000143,
+ 0x000145,
+ 0x000147,
+ 0x00014A,
+ 0x00014C,
+ 0x00014E,
+ 0x000150,
+ 0x000152,
+ 0x000154,
+ 0x000156,
+ 0x000158,
+ 0x00015A,
+ 0x00015C,
+ 0x00015E,
+ 0x000160,
+ 0x000162,
+ 0x000164,
+ 0x000166,
+ 0x000168,
+ 0x00016A,
+ 0x00016C,
+ 0x00016E,
+ 0x000170,
+ 0x000172,
+ 0x000174,
+ 0x000176,
+ 0x00017B,
+ 0x00017D,
+ 0x000184,
+ 0x0001A2,
+ 0x0001A4,
+ 0x0001B5,
+ 0x0001BE,
+ 0x0001C7,
+ 0x0001CA,
+ 0x0001CD,
+ 0x0001CF,
+ 0x0001D1,
+ 0x0001D3,
+ 0x0001D5,
+ 0x0001D7,
+ 0x0001D9,
+ 0x0001DB,
+ 0x0001DE,
+ 0x0001E0,
+ 0x0001E2,
+ 0x0001E4,
+ 0x0001E6,
+ 0x0001E8,
+ 0x0001EA,
+ 0x0001EC,
+ 0x0001EE,
+ 0x0001F1,
+ 0x0001F4,
+ 0x0001FA,
+ 0x0001FC,
+ 0x0001FE,
+ 0x000200,
+ 0x000202,
+ 0x000204,
+ 0x000206,
+ 0x000208,
+ 0x00020A,
+ 0x00020C,
+ 0x00020E,
+ 0x000210,
+ 0x000212,
+ 0x000214,
+ 0x000216,
+ 0x000218,
+ 0x00021A,
+ 0x00021C,
+ 0x00021E,
+ 0x000224,
+ 0x000226,
+ 0x000228,
+ 0x00022A,
+ 0x00022C,
+ 0x00022E,
+ 0x000230,
+ 0x000232,
+ 0x000241,
+ 0x000248,
+ 0x00024A,
+ 0x00024C,
+ 0x00024E,
+ 0x000255,
+ 0x000258,
+ 0x00025A,
+ 0x000262,
+ 0x000264,
+ 0x000267,
+ 0x000270,
+ 0x000281,
+ 0x000372,
+ 0x0003CF,
+ 0x0003D8,
+ 0x0003DA,
+ 0x0003DC,
+ 0x0003DE,
+ 0x0003E0,
+ 0x0003E2,
+ 0x0003E4,
+ 0x0003E6,
+ 0x0003E8,
+ 0x0003EA,
+ 0x0003EC,
+ 0x0003EE,
+ 0x0003F4,
+ 0x000460,
+ 0x000462,
+ 0x000464,
+ 0x000466,
+ 0x000468,
+ 0x00046A,
+ 0x00046C,
+ 0x00046E,
+ 0x000470,
+ 0x000472,
+ 0x000474,
+ 0x000476,
+ 0x000478,
+ 0x00047A,
+ 0x00047C,
+ 0x00047E,
+ 0x000480,
+ 0x00048C,
+ 0x00048E,
+ 0x000490,
+ 0x000492,
+ 0x000494,
+ 0x000496,
+ 0x000498,
+ 0x00049A,
+ 0x00049C,
+ 0x00049E,
+ 0x0004A0,
+ 0x0004A2,
+ 0x0004A4,
+ 0x0004A6,
+ 0x0004A8,
+ 0x0004AA,
+ 0x0004AC,
+ 0x0004AE,
+ 0x0004B0,
+ 0x0004B2,
+ 0x0004B4,
+ 0x0004B6,
+ 0x0004B8,
+ 0x0004BA,
+ 0x0004BC,
+ 0x0004BE,
+ 0x0004C3,
+ 0x0004C5,
+ 0x0004C7,
+ 0x0004C9,
+ 0x0004CB,
+ 0x0004CD,
+ 0x0004D0,
+ 0x0004D2,
+ 0x0004D4,
+ 0x0004D6,
+ 0x0004D8,
+ 0x0004DA,
+ 0x0004DC,
+ 0x0004DE,
+ 0x0004E0,
+ 0x0004E2,
+ 0x0004E4,
+ 0x0004E6,
+ 0x0004E8,
+ 0x0004EA,
+ 0x0004EC,
+ 0x0004EE,
+ 0x0004F0,
+ 0x0004F2,
+ 0x0004F4,
+ 0x0004F6,
+ 0x0004F8,
+ 0x0004FA,
+ 0x0004FC,
+ 0x0004FE,
+ 0x000500,
+ 0x000502,
+ 0x000504,
+ 0x000506,
+ 0x000508,
+ 0x00050A,
+ 0x00050C,
+ 0x00050E,
+ 0x000510,
+ 0x000512,
+ 0x000514,
+ 0x000516,
+ 0x000518,
+ 0x00051A,
+ 0x00051C,
+ 0x00051E,
+ 0x000520,
+ 0x000522,
+ 0x000524,
+ 0x000526,
+ 0x000528,
+ 0x00052A,
+ 0x00052C,
+ 0x00052E,
+ 0x001E02,
+ 0x001E04,
+ 0x001E06,
+ 0x001E08,
+ 0x001E0A,
+ 0x001E0C,
+ 0x001E0E,
+ 0x001E10,
+ 0x001E12,
+ 0x001E14,
+ 0x001E16,
+ 0x001E18,
+ 0x001E1A,
+ 0x001E1C,
+ 0x001E1E,
+ 0x001E20,
+ 0x001E22,
+ 0x001E24,
+ 0x001E26,
+ 0x001E28,
+ 0x001E2A,
+ 0x001E2C,
+ 0x001E2E,
+ 0x001E30,
+ 0x001E32,
+ 0x001E34,
+ 0x001E36,
+ 0x001E38,
+ 0x001E3A,
+ 0x001E3C,
+ 0x001E3E,
+ 0x001E40,
+ 0x001E42,
+ 0x001E44,
+ 0x001E46,
+ 0x001E48,
+ 0x001E4A,
+ 0x001E4C,
+ 0x001E4E,
+ 0x001E50,
+ 0x001E52,
+ 0x001E54,
+ 0x001E56,
+ 0x001E58,
+ 0x001E5A,
+ 0x001E5C,
+ 0x001E5E,
+ 0x001E60,
+ 0x001E62,
+ 0x001E64,
+ 0x001E66,
+ 0x001E68,
+ 0x001E6A,
+ 0x001E6C,
+ 0x001E6E,
+ 0x001E70,
+ 0x001E72,
+ 0x001E74,
+ 0x001E76,
+ 0x001E78,
+ 0x001E7A,
+ 0x001E7C,
+ 0x001E7E,
+ 0x001E80,
+ 0x001E82,
+ 0x001E84,
+ 0x001E86,
+ 0x001E88,
+ 0x001E8A,
+ 0x001E8C,
+ 0x001E8E,
+ 0x001E90,
+ 0x001E92,
+ 0x001E94,
+ 0x001EA2,
+ 0x001EA4,
+ 0x001EA6,
+ 0x001EA8,
+ 0x001EAA,
+ 0x001EAC,
+ 0x001EAE,
+ 0x001EB0,
+ 0x001EB2,
+ 0x001EB4,
+ 0x001EB6,
+ 0x001EB8,
+ 0x001EBA,
+ 0x001EBC,
+ 0x001EBE,
+ 0x001EC0,
+ 0x001EC2,
+ 0x001EC4,
+ 0x001EC6,
+ 0x001EC8,
+ 0x001ECA,
+ 0x001ECC,
+ 0x001ECE,
+ 0x001ED0,
+ 0x001ED2,
+ 0x001ED4,
+ 0x001ED6,
+ 0x001ED8,
+ 0x001EDA,
+ 0x001EDC,
+ 0x001EDE,
+ 0x001EE0,
+ 0x001EE2,
+ 0x001EE4,
+ 0x001EE6,
+ 0x001EE8,
+ 0x001EEA,
+ 0x001EEC,
+ 0x001EEE,
+ 0x001EF0,
+ 0x001EF2,
+ 0x001EF4,
+ 0x001EF6,
+ 0x001EF8,
+ 0x001EFA,
+ 0x001EFC,
+ 0x001EFE,
+ 0x001FB5,
+ 0x001FBD,
+ 0x001FC5,
+ 0x001FF5,
+ 0x002C60,
+ 0x002C67,
+ 0x002C69,
+ 0x002C6B,
+ 0x002C82,
+ 0x002C84,
+ 0x002C86,
+ 0x002C88,
+ 0x002C8A,
+ 0x002C8C,
+ 0x002C8E,
+ 0x002C90,
+ 0x002C92,
+ 0x002C94,
+ 0x002C96,
+ 0x002C98,
+ 0x002C9A,
+ 0x002C9C,
+ 0x002C9E,
+ 0x002CA0,
+ 0x002CA2,
+ 0x002CA4,
+ 0x002CA6,
+ 0x002CA8,
+ 0x002CAA,
+ 0x002CAC,
+ 0x002CAE,
+ 0x002CB0,
+ 0x002CB2,
+ 0x002CB4,
+ 0x002CB6,
+ 0x002CB8,
+ 0x002CBA,
+ 0x002CBC,
+ 0x002CBE,
+ 0x002CC0,
+ 0x002CC2,
+ 0x002CC4,
+ 0x002CC6,
+ 0x002CC8,
+ 0x002CCA,
+ 0x002CCC,
+ 0x002CCE,
+ 0x002CD0,
+ 0x002CD2,
+ 0x002CD4,
+ 0x002CD6,
+ 0x002CD8,
+ 0x002CDA,
+ 0x002CDC,
+ 0x002CDE,
+ 0x002CE0,
+ 0x002CE2,
+ 0x002CED,
+ 0x002D26,
+ 0x00A642,
+ 0x00A644,
+ 0x00A646,
+ 0x00A648,
+ 0x00A64A,
+ 0x00A64C,
+ 0x00A64E,
+ 0x00A650,
+ 0x00A652,
+ 0x00A654,
+ 0x00A656,
+ 0x00A658,
+ 0x00A65A,
+ 0x00A65C,
+ 0x00A65E,
+ 0x00A660,
+ 0x00A662,
+ 0x00A664,
+ 0x00A666,
+ 0x00A668,
+ 0x00A66A,
+ 0x00A66C,
+ 0x00A682,
+ 0x00A684,
+ 0x00A686,
+ 0x00A688,
+ 0x00A68A,
+ 0x00A68C,
+ 0x00A68E,
+ 0x00A690,
+ 0x00A692,
+ 0x00A694,
+ 0x00A696,
+ 0x00A698,
+ 0x00A69A,
+ 0x00A724,
+ 0x00A726,
+ 0x00A728,
+ 0x00A72A,
+ 0x00A72C,
+ 0x00A72E,
+ 0x00A734,
+ 0x00A736,
+ 0x00A738,
+ 0x00A73A,
+ 0x00A73C,
+ 0x00A73E,
+ 0x00A740,
+ 0x00A742,
+ 0x00A744,
+ 0x00A746,
+ 0x00A748,
+ 0x00A74A,
+ 0x00A74C,
+ 0x00A74E,
+ 0x00A750,
+ 0x00A752,
+ 0x00A754,
+ 0x00A756,
+ 0x00A758,
+ 0x00A75A,
+ 0x00A75C,
+ 0x00A75E,
+ 0x00A760,
+ 0x00A762,
+ 0x00A764,
+ 0x00A766,
+ 0x00A768,
+ 0x00A76A,
+ 0x00A76C,
+ 0x00A76E,
+ 0x00A77B,
+ 0x00A780,
+ 0x00A782,
+ 0x00A784,
+ 0x00A786,
+ 0x00A792,
+ 0x00A798,
+ 0x00A79A,
+ 0x00A79C,
+ 0x00A79E,
+ 0x00A7A0,
+ 0x00A7A2,
+ 0x00A7A4,
+ 0x00A7A6,
+ 0x00A7A8,
+ 0x00A7B6,
+ 0x00A7B8,
+ 0x00A7BA,
+ 0x00A7BC,
+ 0x00A7BE,
+ 0x00A7C0,
+ 0x00A7C2,
+ 0x00A7C9,
+ 0x00A7D8,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000060],
+ [0x00007B, 0x0000B4],
+ [0x0000B6, 0x0000DE],
+ [0x000138, 0x000139],
+ [0x000178, 0x000179],
+ [0x000181, 0x000182],
+ [0x000186, 0x000187],
+ [0x000189, 0x00018B],
+ [0x00018D, 0x000191],
+ [0x000193, 0x000194],
+ [0x000196, 0x000198],
+ [0x00019B, 0x00019D],
+ [0x00019F, 0x0001A0],
+ [0x0001A6, 0x0001A7],
+ [0x0001A9, 0x0001AC],
+ [0x0001AE, 0x0001AF],
+ [0x0001B1, 0x0001B3],
+ [0x0001B7, 0x0001B8],
+ [0x0001BA, 0x0001BC],
+ [0x0001C0, 0x0001C4],
+ [0x0001F6, 0x0001F8],
+ [0x000220, 0x000222],
+ [0x000234, 0x00023B],
+ [0x00023D, 0x00023E],
+ [0x000243, 0x000246],
+ [0x00025D, 0x00025F],
+ [0x00026D, 0x00026E],
+ [0x000273, 0x000274],
+ [0x000276, 0x00027C],
+ [0x00027E, 0x00027F],
+ [0x000284, 0x000286],
+ [0x00028D, 0x000291],
+ [0x000293, 0x00029C],
+ [0x00029F, 0x000344],
+ [0x000346, 0x000370],
+ [0x000374, 0x000376],
+ [0x000378, 0x00037A],
+ [0x00037E, 0x00038F],
+ [0x000391, 0x0003AB],
+ [0x0003D2, 0x0003D4],
+ [0x0003F6, 0x0003F7],
+ [0x0003F9, 0x0003FA],
+ [0x0003FC, 0x00042F],
+ [0x000482, 0x00048A],
+ [0x0004C0, 0x0004C1],
+ [0x000530, 0x000560],
+ [0x000588, 0x0010CF],
+ [0x0010FB, 0x0010FC],
+ [0x001100, 0x0013F7],
+ [0x0013FE, 0x001C7F],
+ [0x001C89, 0x001D78],
+ [0x001D7A, 0x001D7C],
+ [0x001D7E, 0x001D8D],
+ [0x001D8F, 0x001E00],
+ [0x001E9C, 0x001EA0],
+ [0x001F08, 0x001F0F],
+ [0x001F16, 0x001F1F],
+ [0x001F28, 0x001F2F],
+ [0x001F38, 0x001F3F],
+ [0x001F46, 0x001F4F],
+ [0x001F58, 0x001F5F],
+ [0x001F68, 0x001F6F],
+ [0x001F7E, 0x001F7F],
+ [0x001FB8, 0x001FBB],
+ [0x001FBF, 0x001FC1],
+ [0x001FC8, 0x001FCB],
+ [0x001FCD, 0x001FCF],
+ [0x001FD4, 0x001FD5],
+ [0x001FD8, 0x001FDF],
+ [0x001FE8, 0x001FF1],
+ [0x001FF8, 0x001FFB],
+ [0x001FFD, 0x00214D],
+ [0x00214F, 0x00216F],
+ [0x002180, 0x002183],
+ [0x002185, 0x0024CF],
+ [0x0024EA, 0x002C2F],
+ [0x002C62, 0x002C64],
+ [0x002C6D, 0x002C72],
+ [0x002C74, 0x002C75],
+ [0x002C77, 0x002C80],
+ [0x002CE4, 0x002CEB],
+ [0x002CEF, 0x002CF2],
+ [0x002CF4, 0x002CFF],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x00A640],
+ [0x00A66E, 0x00A680],
+ [0x00A69C, 0x00A722],
+ [0x00A730, 0x00A732],
+ [0x00A770, 0x00A779],
+ [0x00A77D, 0x00A77E],
+ [0x00A788, 0x00A78B],
+ [0x00A78D, 0x00A790],
+ [0x00A795, 0x00A796],
+ [0x00A7AA, 0x00A7B4],
+ [0x00A7C4, 0x00A7C7],
+ [0x00A7CB, 0x00A7D0],
+ [0x00A7D2, 0x00A7D6],
+ [0x00A7DA, 0x00A7F5],
+ [0x00A7F7, 0x00AB52],
+ [0x00AB54, 0x00AB6F],
+ [0x00ABC0, 0x00DBFF],
+ [0x00E000, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FF40],
+ [0x00FF5B, 0x010427],
+ [0x010450, 0x0104D7],
+ [0x0104FC, 0x010596],
+ [0x0105BD, 0x010CBF],
+ [0x010CF3, 0x0118BF],
+ [0x0118E0, 0x016E5F],
+ [0x016E80, 0x01E921],
+ [0x01E944, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Changes_When_Uppercased}+$/u,
+ nonMatchSymbols,
+ "\\P{Changes_When_Uppercased}"
+);
+testPropertyEscapes(
+ /^\P{CWU}+$/u,
+ nonMatchSymbols,
+ "\\P{CWU}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Dash.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Dash.js
new file mode 100644
index 0000000000..7747cb5086
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Dash.js
@@ -0,0 +1,88 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Dash`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00002D,
+ 0x00058A,
+ 0x0005BE,
+ 0x001400,
+ 0x001806,
+ 0x002053,
+ 0x00207B,
+ 0x00208B,
+ 0x002212,
+ 0x002E17,
+ 0x002E1A,
+ 0x002E40,
+ 0x002E5D,
+ 0x00301C,
+ 0x003030,
+ 0x0030A0,
+ 0x00FE58,
+ 0x00FE63,
+ 0x00FF0D,
+ 0x010EAD
+ ],
+ ranges: [
+ [0x002010, 0x002015],
+ [0x002E3A, 0x002E3B],
+ [0x00FE31, 0x00FE32]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Dash}+$/u,
+ matchSymbols,
+ "\\p{Dash}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00002C],
+ [0x00002E, 0x000589],
+ [0x00058B, 0x0005BD],
+ [0x0005BF, 0x0013FF],
+ [0x001401, 0x001805],
+ [0x001807, 0x00200F],
+ [0x002016, 0x002052],
+ [0x002054, 0x00207A],
+ [0x00207C, 0x00208A],
+ [0x00208C, 0x002211],
+ [0x002213, 0x002E16],
+ [0x002E18, 0x002E19],
+ [0x002E1B, 0x002E39],
+ [0x002E3C, 0x002E3F],
+ [0x002E41, 0x002E5C],
+ [0x002E5E, 0x00301B],
+ [0x00301D, 0x00302F],
+ [0x003031, 0x00309F],
+ [0x0030A1, 0x00DBFF],
+ [0x00E000, 0x00FE30],
+ [0x00FE33, 0x00FE57],
+ [0x00FE59, 0x00FE62],
+ [0x00FE64, 0x00FF0C],
+ [0x00FF0E, 0x010EAC],
+ [0x010EAE, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Dash}+$/u,
+ nonMatchSymbols,
+ "\\P{Dash}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Default_Ignorable_Code_Point.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Default_Ignorable_Code_Point.js
new file mode 100644
index 0000000000..f628ba7c98
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Default_Ignorable_Code_Point.js
@@ -0,0 +1,86 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Default_Ignorable_Code_Point`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000AD,
+ 0x00034F,
+ 0x00061C,
+ 0x003164,
+ 0x00FEFF,
+ 0x00FFA0
+ ],
+ ranges: [
+ [0x00115F, 0x001160],
+ [0x0017B4, 0x0017B5],
+ [0x00180B, 0x00180F],
+ [0x00200B, 0x00200F],
+ [0x00202A, 0x00202E],
+ [0x002060, 0x00206F],
+ [0x00FE00, 0x00FE0F],
+ [0x00FFF0, 0x00FFF8],
+ [0x01BCA0, 0x01BCA3],
+ [0x01D173, 0x01D17A],
+ [0x0E0000, 0x0E0FFF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Default_Ignorable_Code_Point}+$/u,
+ matchSymbols,
+ "\\p{Default_Ignorable_Code_Point}"
+);
+testPropertyEscapes(
+ /^\p{DI}+$/u,
+ matchSymbols,
+ "\\p{DI}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0000AC],
+ [0x0000AE, 0x00034E],
+ [0x000350, 0x00061B],
+ [0x00061D, 0x00115E],
+ [0x001161, 0x0017B3],
+ [0x0017B6, 0x00180A],
+ [0x001810, 0x00200A],
+ [0x002010, 0x002029],
+ [0x00202F, 0x00205F],
+ [0x002070, 0x003163],
+ [0x003165, 0x00DBFF],
+ [0x00E000, 0x00FDFF],
+ [0x00FE10, 0x00FEFE],
+ [0x00FF00, 0x00FF9F],
+ [0x00FFA1, 0x00FFEF],
+ [0x00FFF9, 0x01BC9F],
+ [0x01BCA4, 0x01D172],
+ [0x01D17B, 0x0DFFFF],
+ [0x0E1000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Default_Ignorable_Code_Point}+$/u,
+ nonMatchSymbols,
+ "\\P{Default_Ignorable_Code_Point}"
+);
+testPropertyEscapes(
+ /^\P{DI}+$/u,
+ nonMatchSymbols,
+ "\\P{DI}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Deprecated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Deprecated.js
new file mode 100644
index 0000000000..01b38e3650
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Deprecated.js
@@ -0,0 +1,69 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Deprecated`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000149,
+ 0x000673,
+ 0x000F77,
+ 0x000F79,
+ 0x0E0001
+ ],
+ ranges: [
+ [0x0017A3, 0x0017A4],
+ [0x00206A, 0x00206F],
+ [0x002329, 0x00232A]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Deprecated}+$/u,
+ matchSymbols,
+ "\\p{Deprecated}"
+);
+testPropertyEscapes(
+ /^\p{Dep}+$/u,
+ matchSymbols,
+ "\\p{Dep}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000F78
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000148],
+ [0x00014A, 0x000672],
+ [0x000674, 0x000F76],
+ [0x000F7A, 0x0017A2],
+ [0x0017A5, 0x002069],
+ [0x002070, 0x002328],
+ [0x00232B, 0x00DBFF],
+ [0x00E000, 0x0E0000],
+ [0x0E0002, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Deprecated}+$/u,
+ nonMatchSymbols,
+ "\\P{Deprecated}"
+);
+testPropertyEscapes(
+ /^\P{Dep}+$/u,
+ nonMatchSymbols,
+ "\\P{Dep}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Diacritic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Diacritic.js
new file mode 100644
index 0000000000..b6a1797444
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Diacritic.js
@@ -0,0 +1,443 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Diacritic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00005E,
+ 0x000060,
+ 0x0000A8,
+ 0x0000AF,
+ 0x0000B4,
+ 0x00037A,
+ 0x000559,
+ 0x0005BF,
+ 0x0005C4,
+ 0x00093C,
+ 0x00094D,
+ 0x000971,
+ 0x0009BC,
+ 0x0009CD,
+ 0x000A3C,
+ 0x000A4D,
+ 0x000ABC,
+ 0x000ACD,
+ 0x000B3C,
+ 0x000B4D,
+ 0x000B55,
+ 0x000BCD,
+ 0x000C3C,
+ 0x000C4D,
+ 0x000CBC,
+ 0x000CCD,
+ 0x000D4D,
+ 0x000DCA,
+ 0x000E4E,
+ 0x000EBA,
+ 0x000F35,
+ 0x000F37,
+ 0x000F39,
+ 0x000FC6,
+ 0x001037,
+ 0x00108F,
+ 0x0017DD,
+ 0x001A7F,
+ 0x001B34,
+ 0x001B44,
+ 0x001CED,
+ 0x001CF4,
+ 0x001FBD,
+ 0x002E2F,
+ 0x0030FC,
+ 0x00A66F,
+ 0x00A67F,
+ 0x00A8C4,
+ 0x00A953,
+ 0x00A9B3,
+ 0x00A9C0,
+ 0x00A9E5,
+ 0x00AAF6,
+ 0x00FB1E,
+ 0x00FF3E,
+ 0x00FF40,
+ 0x00FF70,
+ 0x00FFE3,
+ 0x0102E0,
+ 0x011046,
+ 0x011070,
+ 0x011173,
+ 0x0111C0,
+ 0x01133C,
+ 0x01134D,
+ 0x011442,
+ 0x011446,
+ 0x01163F,
+ 0x01172B,
+ 0x011943,
+ 0x0119E0,
+ 0x011A34,
+ 0x011A47,
+ 0x011A99,
+ 0x011C3F,
+ 0x011D42,
+ 0x011D97,
+ 0x01E2AE
+ ],
+ ranges: [
+ [0x0000B7, 0x0000B8],
+ [0x0002B0, 0x00034E],
+ [0x000350, 0x000357],
+ [0x00035D, 0x000362],
+ [0x000374, 0x000375],
+ [0x000384, 0x000385],
+ [0x000483, 0x000487],
+ [0x000591, 0x0005A1],
+ [0x0005A3, 0x0005BD],
+ [0x0005C1, 0x0005C2],
+ [0x00064B, 0x000652],
+ [0x000657, 0x000658],
+ [0x0006DF, 0x0006E0],
+ [0x0006E5, 0x0006E6],
+ [0x0006EA, 0x0006EC],
+ [0x000730, 0x00074A],
+ [0x0007A6, 0x0007B0],
+ [0x0007EB, 0x0007F5],
+ [0x000818, 0x000819],
+ [0x000898, 0x00089F],
+ [0x0008C9, 0x0008D2],
+ [0x0008E3, 0x0008FE],
+ [0x000951, 0x000954],
+ [0x000AFD, 0x000AFF],
+ [0x000D3B, 0x000D3C],
+ [0x000E47, 0x000E4C],
+ [0x000EC8, 0x000ECC],
+ [0x000F18, 0x000F19],
+ [0x000F3E, 0x000F3F],
+ [0x000F82, 0x000F84],
+ [0x000F86, 0x000F87],
+ [0x001039, 0x00103A],
+ [0x001063, 0x001064],
+ [0x001069, 0x00106D],
+ [0x001087, 0x00108D],
+ [0x00109A, 0x00109B],
+ [0x00135D, 0x00135F],
+ [0x001714, 0x001715],
+ [0x0017C9, 0x0017D3],
+ [0x001939, 0x00193B],
+ [0x001A75, 0x001A7C],
+ [0x001AB0, 0x001ABE],
+ [0x001AC1, 0x001ACB],
+ [0x001B6B, 0x001B73],
+ [0x001BAA, 0x001BAB],
+ [0x001C36, 0x001C37],
+ [0x001C78, 0x001C7D],
+ [0x001CD0, 0x001CE8],
+ [0x001CF7, 0x001CF9],
+ [0x001D2C, 0x001D6A],
+ [0x001DC4, 0x001DCF],
+ [0x001DF5, 0x001DFF],
+ [0x001FBF, 0x001FC1],
+ [0x001FCD, 0x001FCF],
+ [0x001FDD, 0x001FDF],
+ [0x001FED, 0x001FEF],
+ [0x001FFD, 0x001FFE],
+ [0x002CEF, 0x002CF1],
+ [0x00302A, 0x00302F],
+ [0x003099, 0x00309C],
+ [0x00A67C, 0x00A67D],
+ [0x00A69C, 0x00A69D],
+ [0x00A6F0, 0x00A6F1],
+ [0x00A700, 0x00A721],
+ [0x00A788, 0x00A78A],
+ [0x00A7F8, 0x00A7F9],
+ [0x00A8E0, 0x00A8F1],
+ [0x00A92B, 0x00A92E],
+ [0x00AA7B, 0x00AA7D],
+ [0x00AABF, 0x00AAC2],
+ [0x00AB5B, 0x00AB5F],
+ [0x00AB69, 0x00AB6B],
+ [0x00ABEC, 0x00ABED],
+ [0x00FE20, 0x00FE2F],
+ [0x00FF9E, 0x00FF9F],
+ [0x010780, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x010AE5, 0x010AE6],
+ [0x010D22, 0x010D27],
+ [0x010EFD, 0x010EFF],
+ [0x010F46, 0x010F50],
+ [0x010F82, 0x010F85],
+ [0x0110B9, 0x0110BA],
+ [0x011133, 0x011134],
+ [0x0111CA, 0x0111CC],
+ [0x011235, 0x011236],
+ [0x0112E9, 0x0112EA],
+ [0x011366, 0x01136C],
+ [0x011370, 0x011374],
+ [0x0114C2, 0x0114C3],
+ [0x0115BF, 0x0115C0],
+ [0x0116B6, 0x0116B7],
+ [0x011839, 0x01183A],
+ [0x01193D, 0x01193E],
+ [0x011D44, 0x011D45],
+ [0x013447, 0x013455],
+ [0x016AF0, 0x016AF4],
+ [0x016B30, 0x016B36],
+ [0x016F8F, 0x016F9F],
+ [0x016FF0, 0x016FF1],
+ [0x01AFF0, 0x01AFF3],
+ [0x01AFF5, 0x01AFFB],
+ [0x01AFFD, 0x01AFFE],
+ [0x01CF00, 0x01CF2D],
+ [0x01CF30, 0x01CF46],
+ [0x01D167, 0x01D169],
+ [0x01D16D, 0x01D172],
+ [0x01D17B, 0x01D182],
+ [0x01D185, 0x01D18B],
+ [0x01D1AA, 0x01D1AD],
+ [0x01E030, 0x01E06D],
+ [0x01E130, 0x01E136],
+ [0x01E2EC, 0x01E2EF],
+ [0x01E8D0, 0x01E8D6],
+ [0x01E944, 0x01E946],
+ [0x01E948, 0x01E94A]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Diacritic}+$/u,
+ matchSymbols,
+ "\\p{Diacritic}"
+);
+testPropertyEscapes(
+ /^\p{Dia}+$/u,
+ matchSymbols,
+ "\\p{Dia}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00005F,
+ 0x00034F,
+ 0x0005A2,
+ 0x0005BE,
+ 0x0005C0,
+ 0x0005C3,
+ 0x000E4D,
+ 0x000F36,
+ 0x000F38,
+ 0x000F85,
+ 0x001038,
+ 0x00108E,
+ 0x001FBE,
+ 0x00A67E,
+ 0x00FF3F,
+ 0x010786,
+ 0x0107B1,
+ 0x011D43,
+ 0x01AFF4,
+ 0x01AFFC,
+ 0x01E947
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00005D],
+ [0x000061, 0x0000A7],
+ [0x0000A9, 0x0000AE],
+ [0x0000B0, 0x0000B3],
+ [0x0000B5, 0x0000B6],
+ [0x0000B9, 0x0002AF],
+ [0x000358, 0x00035C],
+ [0x000363, 0x000373],
+ [0x000376, 0x000379],
+ [0x00037B, 0x000383],
+ [0x000386, 0x000482],
+ [0x000488, 0x000558],
+ [0x00055A, 0x000590],
+ [0x0005C5, 0x00064A],
+ [0x000653, 0x000656],
+ [0x000659, 0x0006DE],
+ [0x0006E1, 0x0006E4],
+ [0x0006E7, 0x0006E9],
+ [0x0006ED, 0x00072F],
+ [0x00074B, 0x0007A5],
+ [0x0007B1, 0x0007EA],
+ [0x0007F6, 0x000817],
+ [0x00081A, 0x000897],
+ [0x0008A0, 0x0008C8],
+ [0x0008D3, 0x0008E2],
+ [0x0008FF, 0x00093B],
+ [0x00093D, 0x00094C],
+ [0x00094E, 0x000950],
+ [0x000955, 0x000970],
+ [0x000972, 0x0009BB],
+ [0x0009BD, 0x0009CC],
+ [0x0009CE, 0x000A3B],
+ [0x000A3D, 0x000A4C],
+ [0x000A4E, 0x000ABB],
+ [0x000ABD, 0x000ACC],
+ [0x000ACE, 0x000AFC],
+ [0x000B00, 0x000B3B],
+ [0x000B3D, 0x000B4C],
+ [0x000B4E, 0x000B54],
+ [0x000B56, 0x000BCC],
+ [0x000BCE, 0x000C3B],
+ [0x000C3D, 0x000C4C],
+ [0x000C4E, 0x000CBB],
+ [0x000CBD, 0x000CCC],
+ [0x000CCE, 0x000D3A],
+ [0x000D3D, 0x000D4C],
+ [0x000D4E, 0x000DC9],
+ [0x000DCB, 0x000E46],
+ [0x000E4F, 0x000EB9],
+ [0x000EBB, 0x000EC7],
+ [0x000ECD, 0x000F17],
+ [0x000F1A, 0x000F34],
+ [0x000F3A, 0x000F3D],
+ [0x000F40, 0x000F81],
+ [0x000F88, 0x000FC5],
+ [0x000FC7, 0x001036],
+ [0x00103B, 0x001062],
+ [0x001065, 0x001068],
+ [0x00106E, 0x001086],
+ [0x001090, 0x001099],
+ [0x00109C, 0x00135C],
+ [0x001360, 0x001713],
+ [0x001716, 0x0017C8],
+ [0x0017D4, 0x0017DC],
+ [0x0017DE, 0x001938],
+ [0x00193C, 0x001A74],
+ [0x001A7D, 0x001A7E],
+ [0x001A80, 0x001AAF],
+ [0x001ABF, 0x001AC0],
+ [0x001ACC, 0x001B33],
+ [0x001B35, 0x001B43],
+ [0x001B45, 0x001B6A],
+ [0x001B74, 0x001BA9],
+ [0x001BAC, 0x001C35],
+ [0x001C38, 0x001C77],
+ [0x001C7E, 0x001CCF],
+ [0x001CE9, 0x001CEC],
+ [0x001CEE, 0x001CF3],
+ [0x001CF5, 0x001CF6],
+ [0x001CFA, 0x001D2B],
+ [0x001D6B, 0x001DC3],
+ [0x001DD0, 0x001DF4],
+ [0x001E00, 0x001FBC],
+ [0x001FC2, 0x001FCC],
+ [0x001FD0, 0x001FDC],
+ [0x001FE0, 0x001FEC],
+ [0x001FF0, 0x001FFC],
+ [0x001FFF, 0x002CEE],
+ [0x002CF2, 0x002E2E],
+ [0x002E30, 0x003029],
+ [0x003030, 0x003098],
+ [0x00309D, 0x0030FB],
+ [0x0030FD, 0x00A66E],
+ [0x00A670, 0x00A67B],
+ [0x00A680, 0x00A69B],
+ [0x00A69E, 0x00A6EF],
+ [0x00A6F2, 0x00A6FF],
+ [0x00A722, 0x00A787],
+ [0x00A78B, 0x00A7F7],
+ [0x00A7FA, 0x00A8C3],
+ [0x00A8C5, 0x00A8DF],
+ [0x00A8F2, 0x00A92A],
+ [0x00A92F, 0x00A952],
+ [0x00A954, 0x00A9B2],
+ [0x00A9B4, 0x00A9BF],
+ [0x00A9C1, 0x00A9E4],
+ [0x00A9E6, 0x00AA7A],
+ [0x00AA7E, 0x00AABE],
+ [0x00AAC3, 0x00AAF5],
+ [0x00AAF7, 0x00AB5A],
+ [0x00AB60, 0x00AB68],
+ [0x00AB6C, 0x00ABEB],
+ [0x00ABEE, 0x00DBFF],
+ [0x00E000, 0x00FB1D],
+ [0x00FB1F, 0x00FE1F],
+ [0x00FE30, 0x00FF3D],
+ [0x00FF41, 0x00FF6F],
+ [0x00FF71, 0x00FF9D],
+ [0x00FFA0, 0x00FFE2],
+ [0x00FFE4, 0x0102DF],
+ [0x0102E1, 0x01077F],
+ [0x0107BB, 0x010AE4],
+ [0x010AE7, 0x010D21],
+ [0x010D28, 0x010EFC],
+ [0x010F00, 0x010F45],
+ [0x010F51, 0x010F81],
+ [0x010F86, 0x011045],
+ [0x011047, 0x01106F],
+ [0x011071, 0x0110B8],
+ [0x0110BB, 0x011132],
+ [0x011135, 0x011172],
+ [0x011174, 0x0111BF],
+ [0x0111C1, 0x0111C9],
+ [0x0111CD, 0x011234],
+ [0x011237, 0x0112E8],
+ [0x0112EB, 0x01133B],
+ [0x01133D, 0x01134C],
+ [0x01134E, 0x011365],
+ [0x01136D, 0x01136F],
+ [0x011375, 0x011441],
+ [0x011443, 0x011445],
+ [0x011447, 0x0114C1],
+ [0x0114C4, 0x0115BE],
+ [0x0115C1, 0x01163E],
+ [0x011640, 0x0116B5],
+ [0x0116B8, 0x01172A],
+ [0x01172C, 0x011838],
+ [0x01183B, 0x01193C],
+ [0x01193F, 0x011942],
+ [0x011944, 0x0119DF],
+ [0x0119E1, 0x011A33],
+ [0x011A35, 0x011A46],
+ [0x011A48, 0x011A98],
+ [0x011A9A, 0x011C3E],
+ [0x011C40, 0x011D41],
+ [0x011D46, 0x011D96],
+ [0x011D98, 0x013446],
+ [0x013456, 0x016AEF],
+ [0x016AF5, 0x016B2F],
+ [0x016B37, 0x016F8E],
+ [0x016FA0, 0x016FEF],
+ [0x016FF2, 0x01AFEF],
+ [0x01AFFF, 0x01CEFF],
+ [0x01CF2E, 0x01CF2F],
+ [0x01CF47, 0x01D166],
+ [0x01D16A, 0x01D16C],
+ [0x01D173, 0x01D17A],
+ [0x01D183, 0x01D184],
+ [0x01D18C, 0x01D1A9],
+ [0x01D1AE, 0x01E02F],
+ [0x01E06E, 0x01E12F],
+ [0x01E137, 0x01E2AD],
+ [0x01E2AF, 0x01E2EB],
+ [0x01E2F0, 0x01E8CF],
+ [0x01E8D7, 0x01E943],
+ [0x01E94B, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Diacritic}+$/u,
+ nonMatchSymbols,
+ "\\P{Diacritic}"
+);
+testPropertyEscapes(
+ /^\P{Dia}+$/u,
+ nonMatchSymbols,
+ "\\P{Dia}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji.js
new file mode 100644
index 0000000000..18d81894c6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji.js
@@ -0,0 +1,345 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Emoji`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000023,
+ 0x00002A,
+ 0x0000A9,
+ 0x0000AE,
+ 0x00203C,
+ 0x002049,
+ 0x002122,
+ 0x002139,
+ 0x002328,
+ 0x0023CF,
+ 0x0024C2,
+ 0x0025B6,
+ 0x0025C0,
+ 0x00260E,
+ 0x002611,
+ 0x002618,
+ 0x00261D,
+ 0x002620,
+ 0x002626,
+ 0x00262A,
+ 0x002640,
+ 0x002642,
+ 0x002663,
+ 0x002668,
+ 0x00267B,
+ 0x002699,
+ 0x0026A7,
+ 0x0026C8,
+ 0x0026D1,
+ 0x0026FD,
+ 0x002702,
+ 0x002705,
+ 0x00270F,
+ 0x002712,
+ 0x002714,
+ 0x002716,
+ 0x00271D,
+ 0x002721,
+ 0x002728,
+ 0x002744,
+ 0x002747,
+ 0x00274C,
+ 0x00274E,
+ 0x002757,
+ 0x0027A1,
+ 0x0027B0,
+ 0x0027BF,
+ 0x002B50,
+ 0x002B55,
+ 0x003030,
+ 0x00303D,
+ 0x003297,
+ 0x003299,
+ 0x01F004,
+ 0x01F0CF,
+ 0x01F18E,
+ 0x01F21A,
+ 0x01F22F,
+ 0x01F587,
+ 0x01F590,
+ 0x01F5A8,
+ 0x01F5BC,
+ 0x01F5E1,
+ 0x01F5E3,
+ 0x01F5E8,
+ 0x01F5EF,
+ 0x01F5F3,
+ 0x01F6E9,
+ 0x01F6F0,
+ 0x01F7F0
+ ],
+ ranges: [
+ [0x000030, 0x000039],
+ [0x002194, 0x002199],
+ [0x0021A9, 0x0021AA],
+ [0x00231A, 0x00231B],
+ [0x0023E9, 0x0023F3],
+ [0x0023F8, 0x0023FA],
+ [0x0025AA, 0x0025AB],
+ [0x0025FB, 0x0025FE],
+ [0x002600, 0x002604],
+ [0x002614, 0x002615],
+ [0x002622, 0x002623],
+ [0x00262E, 0x00262F],
+ [0x002638, 0x00263A],
+ [0x002648, 0x002653],
+ [0x00265F, 0x002660],
+ [0x002665, 0x002666],
+ [0x00267E, 0x00267F],
+ [0x002692, 0x002697],
+ [0x00269B, 0x00269C],
+ [0x0026A0, 0x0026A1],
+ [0x0026AA, 0x0026AB],
+ [0x0026B0, 0x0026B1],
+ [0x0026BD, 0x0026BE],
+ [0x0026C4, 0x0026C5],
+ [0x0026CE, 0x0026CF],
+ [0x0026D3, 0x0026D4],
+ [0x0026E9, 0x0026EA],
+ [0x0026F0, 0x0026F5],
+ [0x0026F7, 0x0026FA],
+ [0x002708, 0x00270D],
+ [0x002733, 0x002734],
+ [0x002753, 0x002755],
+ [0x002763, 0x002764],
+ [0x002795, 0x002797],
+ [0x002934, 0x002935],
+ [0x002B05, 0x002B07],
+ [0x002B1B, 0x002B1C],
+ [0x01F170, 0x01F171],
+ [0x01F17E, 0x01F17F],
+ [0x01F191, 0x01F19A],
+ [0x01F1E6, 0x01F1FF],
+ [0x01F201, 0x01F202],
+ [0x01F232, 0x01F23A],
+ [0x01F250, 0x01F251],
+ [0x01F300, 0x01F321],
+ [0x01F324, 0x01F393],
+ [0x01F396, 0x01F397],
+ [0x01F399, 0x01F39B],
+ [0x01F39E, 0x01F3F0],
+ [0x01F3F3, 0x01F3F5],
+ [0x01F3F7, 0x01F4FD],
+ [0x01F4FF, 0x01F53D],
+ [0x01F549, 0x01F54E],
+ [0x01F550, 0x01F567],
+ [0x01F56F, 0x01F570],
+ [0x01F573, 0x01F57A],
+ [0x01F58A, 0x01F58D],
+ [0x01F595, 0x01F596],
+ [0x01F5A4, 0x01F5A5],
+ [0x01F5B1, 0x01F5B2],
+ [0x01F5C2, 0x01F5C4],
+ [0x01F5D1, 0x01F5D3],
+ [0x01F5DC, 0x01F5DE],
+ [0x01F5FA, 0x01F64F],
+ [0x01F680, 0x01F6C5],
+ [0x01F6CB, 0x01F6D2],
+ [0x01F6D5, 0x01F6D7],
+ [0x01F6DC, 0x01F6E5],
+ [0x01F6EB, 0x01F6EC],
+ [0x01F6F3, 0x01F6FC],
+ [0x01F7E0, 0x01F7EB],
+ [0x01F90C, 0x01F93A],
+ [0x01F93C, 0x01F945],
+ [0x01F947, 0x01F9FF],
+ [0x01FA70, 0x01FA7C],
+ [0x01FA80, 0x01FA88],
+ [0x01FA90, 0x01FABD],
+ [0x01FABF, 0x01FAC5],
+ [0x01FACE, 0x01FADB],
+ [0x01FAE0, 0x01FAE8],
+ [0x01FAF0, 0x01FAF8]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Emoji}+$/u,
+ matchSymbols,
+ "\\p{Emoji}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0025FF,
+ 0x002621,
+ 0x002641,
+ 0x002664,
+ 0x002667,
+ 0x002698,
+ 0x00269A,
+ 0x0026D0,
+ 0x0026D2,
+ 0x0026F6,
+ 0x00270E,
+ 0x002713,
+ 0x002715,
+ 0x00274D,
+ 0x002756,
+ 0x003298,
+ 0x01F200,
+ 0x01F398,
+ 0x01F3F6,
+ 0x01F4FE,
+ 0x01F54F,
+ 0x01F5E2,
+ 0x01F6EA,
+ 0x01F93B,
+ 0x01F946,
+ 0x01FABE
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000022],
+ [0x000024, 0x000029],
+ [0x00002B, 0x00002F],
+ [0x00003A, 0x0000A8],
+ [0x0000AA, 0x0000AD],
+ [0x0000AF, 0x00203B],
+ [0x00203D, 0x002048],
+ [0x00204A, 0x002121],
+ [0x002123, 0x002138],
+ [0x00213A, 0x002193],
+ [0x00219A, 0x0021A8],
+ [0x0021AB, 0x002319],
+ [0x00231C, 0x002327],
+ [0x002329, 0x0023CE],
+ [0x0023D0, 0x0023E8],
+ [0x0023F4, 0x0023F7],
+ [0x0023FB, 0x0024C1],
+ [0x0024C3, 0x0025A9],
+ [0x0025AC, 0x0025B5],
+ [0x0025B7, 0x0025BF],
+ [0x0025C1, 0x0025FA],
+ [0x002605, 0x00260D],
+ [0x00260F, 0x002610],
+ [0x002612, 0x002613],
+ [0x002616, 0x002617],
+ [0x002619, 0x00261C],
+ [0x00261E, 0x00261F],
+ [0x002624, 0x002625],
+ [0x002627, 0x002629],
+ [0x00262B, 0x00262D],
+ [0x002630, 0x002637],
+ [0x00263B, 0x00263F],
+ [0x002643, 0x002647],
+ [0x002654, 0x00265E],
+ [0x002661, 0x002662],
+ [0x002669, 0x00267A],
+ [0x00267C, 0x00267D],
+ [0x002680, 0x002691],
+ [0x00269D, 0x00269F],
+ [0x0026A2, 0x0026A6],
+ [0x0026A8, 0x0026A9],
+ [0x0026AC, 0x0026AF],
+ [0x0026B2, 0x0026BC],
+ [0x0026BF, 0x0026C3],
+ [0x0026C6, 0x0026C7],
+ [0x0026C9, 0x0026CD],
+ [0x0026D5, 0x0026E8],
+ [0x0026EB, 0x0026EF],
+ [0x0026FB, 0x0026FC],
+ [0x0026FE, 0x002701],
+ [0x002703, 0x002704],
+ [0x002706, 0x002707],
+ [0x002710, 0x002711],
+ [0x002717, 0x00271C],
+ [0x00271E, 0x002720],
+ [0x002722, 0x002727],
+ [0x002729, 0x002732],
+ [0x002735, 0x002743],
+ [0x002745, 0x002746],
+ [0x002748, 0x00274B],
+ [0x00274F, 0x002752],
+ [0x002758, 0x002762],
+ [0x002765, 0x002794],
+ [0x002798, 0x0027A0],
+ [0x0027A2, 0x0027AF],
+ [0x0027B1, 0x0027BE],
+ [0x0027C0, 0x002933],
+ [0x002936, 0x002B04],
+ [0x002B08, 0x002B1A],
+ [0x002B1D, 0x002B4F],
+ [0x002B51, 0x002B54],
+ [0x002B56, 0x00302F],
+ [0x003031, 0x00303C],
+ [0x00303E, 0x003296],
+ [0x00329A, 0x00DBFF],
+ [0x00E000, 0x01F003],
+ [0x01F005, 0x01F0CE],
+ [0x01F0D0, 0x01F16F],
+ [0x01F172, 0x01F17D],
+ [0x01F180, 0x01F18D],
+ [0x01F18F, 0x01F190],
+ [0x01F19B, 0x01F1E5],
+ [0x01F203, 0x01F219],
+ [0x01F21B, 0x01F22E],
+ [0x01F230, 0x01F231],
+ [0x01F23B, 0x01F24F],
+ [0x01F252, 0x01F2FF],
+ [0x01F322, 0x01F323],
+ [0x01F394, 0x01F395],
+ [0x01F39C, 0x01F39D],
+ [0x01F3F1, 0x01F3F2],
+ [0x01F53E, 0x01F548],
+ [0x01F568, 0x01F56E],
+ [0x01F571, 0x01F572],
+ [0x01F57B, 0x01F586],
+ [0x01F588, 0x01F589],
+ [0x01F58E, 0x01F58F],
+ [0x01F591, 0x01F594],
+ [0x01F597, 0x01F5A3],
+ [0x01F5A6, 0x01F5A7],
+ [0x01F5A9, 0x01F5B0],
+ [0x01F5B3, 0x01F5BB],
+ [0x01F5BD, 0x01F5C1],
+ [0x01F5C5, 0x01F5D0],
+ [0x01F5D4, 0x01F5DB],
+ [0x01F5DF, 0x01F5E0],
+ [0x01F5E4, 0x01F5E7],
+ [0x01F5E9, 0x01F5EE],
+ [0x01F5F0, 0x01F5F2],
+ [0x01F5F4, 0x01F5F9],
+ [0x01F650, 0x01F67F],
+ [0x01F6C6, 0x01F6CA],
+ [0x01F6D3, 0x01F6D4],
+ [0x01F6D8, 0x01F6DB],
+ [0x01F6E6, 0x01F6E8],
+ [0x01F6ED, 0x01F6EF],
+ [0x01F6F1, 0x01F6F2],
+ [0x01F6FD, 0x01F7DF],
+ [0x01F7EC, 0x01F7EF],
+ [0x01F7F1, 0x01F90B],
+ [0x01FA00, 0x01FA6F],
+ [0x01FA7D, 0x01FA7F],
+ [0x01FA89, 0x01FA8F],
+ [0x01FAC6, 0x01FACD],
+ [0x01FADC, 0x01FADF],
+ [0x01FAE9, 0x01FAEF],
+ [0x01FAF9, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Emoji}+$/u,
+ nonMatchSymbols,
+ "\\P{Emoji}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji_Component.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji_Component.js
new file mode 100644
index 0000000000..a5b4e5f070
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji_Component.js
@@ -0,0 +1,72 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Emoji_Component`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000023,
+ 0x00002A,
+ 0x00200D,
+ 0x0020E3,
+ 0x00FE0F
+ ],
+ ranges: [
+ [0x000030, 0x000039],
+ [0x01F1E6, 0x01F1FF],
+ [0x01F3FB, 0x01F3FF],
+ [0x01F9B0, 0x01F9B3],
+ [0x0E0020, 0x0E007F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Emoji_Component}+$/u,
+ matchSymbols,
+ "\\p{Emoji_Component}"
+);
+testPropertyEscapes(
+ /^\p{EComp}+$/u,
+ matchSymbols,
+ "\\p{EComp}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000022],
+ [0x000024, 0x000029],
+ [0x00002B, 0x00002F],
+ [0x00003A, 0x00200C],
+ [0x00200E, 0x0020E2],
+ [0x0020E4, 0x00DBFF],
+ [0x00E000, 0x00FE0E],
+ [0x00FE10, 0x01F1E5],
+ [0x01F200, 0x01F3FA],
+ [0x01F400, 0x01F9AF],
+ [0x01F9B4, 0x0E001F],
+ [0x0E0080, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Emoji_Component}+$/u,
+ nonMatchSymbols,
+ "\\P{Emoji_Component}"
+);
+testPropertyEscapes(
+ /^\P{EComp}+$/u,
+ nonMatchSymbols,
+ "\\P{EComp}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji_Modifier.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji_Modifier.js
new file mode 100644
index 0000000000..f1d711ca54
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji_Modifier.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Emoji_Modifier`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x01F3FB, 0x01F3FF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Emoji_Modifier}+$/u,
+ matchSymbols,
+ "\\p{Emoji_Modifier}"
+);
+testPropertyEscapes(
+ /^\p{EMod}+$/u,
+ matchSymbols,
+ "\\p{EMod}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01F3FA],
+ [0x01F400, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Emoji_Modifier}+$/u,
+ nonMatchSymbols,
+ "\\P{Emoji_Modifier}"
+);
+testPropertyEscapes(
+ /^\P{EMod}+$/u,
+ nonMatchSymbols,
+ "\\P{EMod}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji_Modifier_Base.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji_Modifier_Base.js
new file mode 100644
index 0000000000..ae31eb20f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji_Modifier_Base.js
@@ -0,0 +1,133 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Emoji_Modifier_Base`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00261D,
+ 0x0026F9,
+ 0x01F385,
+ 0x01F3C7,
+ 0x01F47C,
+ 0x01F48F,
+ 0x01F491,
+ 0x01F4AA,
+ 0x01F57A,
+ 0x01F590,
+ 0x01F6A3,
+ 0x01F6C0,
+ 0x01F6CC,
+ 0x01F90C,
+ 0x01F90F,
+ 0x01F926,
+ 0x01F977,
+ 0x01F9BB
+ ],
+ ranges: [
+ [0x00270A, 0x00270D],
+ [0x01F3C2, 0x01F3C4],
+ [0x01F3CA, 0x01F3CC],
+ [0x01F442, 0x01F443],
+ [0x01F446, 0x01F450],
+ [0x01F466, 0x01F478],
+ [0x01F481, 0x01F483],
+ [0x01F485, 0x01F487],
+ [0x01F574, 0x01F575],
+ [0x01F595, 0x01F596],
+ [0x01F645, 0x01F647],
+ [0x01F64B, 0x01F64F],
+ [0x01F6B4, 0x01F6B6],
+ [0x01F918, 0x01F91F],
+ [0x01F930, 0x01F939],
+ [0x01F93C, 0x01F93E],
+ [0x01F9B5, 0x01F9B6],
+ [0x01F9B8, 0x01F9B9],
+ [0x01F9CD, 0x01F9CF],
+ [0x01F9D1, 0x01F9DD],
+ [0x01FAC3, 0x01FAC5],
+ [0x01FAF0, 0x01FAF8]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Emoji_Modifier_Base}+$/u,
+ matchSymbols,
+ "\\p{Emoji_Modifier_Base}"
+);
+testPropertyEscapes(
+ /^\p{EBase}+$/u,
+ matchSymbols,
+ "\\p{EBase}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x01F484,
+ 0x01F490,
+ 0x01F9B7,
+ 0x01F9BA,
+ 0x01F9D0
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00261C],
+ [0x00261E, 0x0026F8],
+ [0x0026FA, 0x002709],
+ [0x00270E, 0x00DBFF],
+ [0x00E000, 0x01F384],
+ [0x01F386, 0x01F3C1],
+ [0x01F3C5, 0x01F3C6],
+ [0x01F3C8, 0x01F3C9],
+ [0x01F3CD, 0x01F441],
+ [0x01F444, 0x01F445],
+ [0x01F451, 0x01F465],
+ [0x01F479, 0x01F47B],
+ [0x01F47D, 0x01F480],
+ [0x01F488, 0x01F48E],
+ [0x01F492, 0x01F4A9],
+ [0x01F4AB, 0x01F573],
+ [0x01F576, 0x01F579],
+ [0x01F57B, 0x01F58F],
+ [0x01F591, 0x01F594],
+ [0x01F597, 0x01F644],
+ [0x01F648, 0x01F64A],
+ [0x01F650, 0x01F6A2],
+ [0x01F6A4, 0x01F6B3],
+ [0x01F6B7, 0x01F6BF],
+ [0x01F6C1, 0x01F6CB],
+ [0x01F6CD, 0x01F90B],
+ [0x01F90D, 0x01F90E],
+ [0x01F910, 0x01F917],
+ [0x01F920, 0x01F925],
+ [0x01F927, 0x01F92F],
+ [0x01F93A, 0x01F93B],
+ [0x01F93F, 0x01F976],
+ [0x01F978, 0x01F9B4],
+ [0x01F9BC, 0x01F9CC],
+ [0x01F9DE, 0x01FAC2],
+ [0x01FAC6, 0x01FAEF],
+ [0x01FAF9, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Emoji_Modifier_Base}+$/u,
+ nonMatchSymbols,
+ "\\P{Emoji_Modifier_Base}"
+);
+testPropertyEscapes(
+ /^\P{EBase}+$/u,
+ nonMatchSymbols,
+ "\\P{EBase}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji_Presentation.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji_Presentation.js
new file mode 100644
index 0000000000..41d2652685
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Emoji_Presentation.js
@@ -0,0 +1,215 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Emoji_Presentation`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0023F0,
+ 0x0023F3,
+ 0x00267F,
+ 0x002693,
+ 0x0026A1,
+ 0x0026CE,
+ 0x0026D4,
+ 0x0026EA,
+ 0x0026F5,
+ 0x0026FA,
+ 0x0026FD,
+ 0x002705,
+ 0x002728,
+ 0x00274C,
+ 0x00274E,
+ 0x002757,
+ 0x0027B0,
+ 0x0027BF,
+ 0x002B50,
+ 0x002B55,
+ 0x01F004,
+ 0x01F0CF,
+ 0x01F18E,
+ 0x01F201,
+ 0x01F21A,
+ 0x01F22F,
+ 0x01F3F4,
+ 0x01F440,
+ 0x01F57A,
+ 0x01F5A4,
+ 0x01F6CC,
+ 0x01F7F0
+ ],
+ ranges: [
+ [0x00231A, 0x00231B],
+ [0x0023E9, 0x0023EC],
+ [0x0025FD, 0x0025FE],
+ [0x002614, 0x002615],
+ [0x002648, 0x002653],
+ [0x0026AA, 0x0026AB],
+ [0x0026BD, 0x0026BE],
+ [0x0026C4, 0x0026C5],
+ [0x0026F2, 0x0026F3],
+ [0x00270A, 0x00270B],
+ [0x002753, 0x002755],
+ [0x002795, 0x002797],
+ [0x002B1B, 0x002B1C],
+ [0x01F191, 0x01F19A],
+ [0x01F1E6, 0x01F1FF],
+ [0x01F232, 0x01F236],
+ [0x01F238, 0x01F23A],
+ [0x01F250, 0x01F251],
+ [0x01F300, 0x01F320],
+ [0x01F32D, 0x01F335],
+ [0x01F337, 0x01F37C],
+ [0x01F37E, 0x01F393],
+ [0x01F3A0, 0x01F3CA],
+ [0x01F3CF, 0x01F3D3],
+ [0x01F3E0, 0x01F3F0],
+ [0x01F3F8, 0x01F43E],
+ [0x01F442, 0x01F4FC],
+ [0x01F4FF, 0x01F53D],
+ [0x01F54B, 0x01F54E],
+ [0x01F550, 0x01F567],
+ [0x01F595, 0x01F596],
+ [0x01F5FB, 0x01F64F],
+ [0x01F680, 0x01F6C5],
+ [0x01F6D0, 0x01F6D2],
+ [0x01F6D5, 0x01F6D7],
+ [0x01F6DC, 0x01F6DF],
+ [0x01F6EB, 0x01F6EC],
+ [0x01F6F4, 0x01F6FC],
+ [0x01F7E0, 0x01F7EB],
+ [0x01F90C, 0x01F93A],
+ [0x01F93C, 0x01F945],
+ [0x01F947, 0x01F9FF],
+ [0x01FA70, 0x01FA7C],
+ [0x01FA80, 0x01FA88],
+ [0x01FA90, 0x01FABD],
+ [0x01FABF, 0x01FAC5],
+ [0x01FACE, 0x01FADB],
+ [0x01FAE0, 0x01FAE8],
+ [0x01FAF0, 0x01FAF8]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Emoji_Presentation}+$/u,
+ matchSymbols,
+ "\\p{Emoji_Presentation}"
+);
+testPropertyEscapes(
+ /^\p{EPres}+$/u,
+ matchSymbols,
+ "\\p{EPres}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0026F4,
+ 0x00274D,
+ 0x002756,
+ 0x01F200,
+ 0x01F237,
+ 0x01F336,
+ 0x01F37D,
+ 0x01F43F,
+ 0x01F441,
+ 0x01F54F,
+ 0x01F93B,
+ 0x01F946,
+ 0x01FABE
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x002319],
+ [0x00231C, 0x0023E8],
+ [0x0023ED, 0x0023EF],
+ [0x0023F1, 0x0023F2],
+ [0x0023F4, 0x0025FC],
+ [0x0025FF, 0x002613],
+ [0x002616, 0x002647],
+ [0x002654, 0x00267E],
+ [0x002680, 0x002692],
+ [0x002694, 0x0026A0],
+ [0x0026A2, 0x0026A9],
+ [0x0026AC, 0x0026BC],
+ [0x0026BF, 0x0026C3],
+ [0x0026C6, 0x0026CD],
+ [0x0026CF, 0x0026D3],
+ [0x0026D5, 0x0026E9],
+ [0x0026EB, 0x0026F1],
+ [0x0026F6, 0x0026F9],
+ [0x0026FB, 0x0026FC],
+ [0x0026FE, 0x002704],
+ [0x002706, 0x002709],
+ [0x00270C, 0x002727],
+ [0x002729, 0x00274B],
+ [0x00274F, 0x002752],
+ [0x002758, 0x002794],
+ [0x002798, 0x0027AF],
+ [0x0027B1, 0x0027BE],
+ [0x0027C0, 0x002B1A],
+ [0x002B1D, 0x002B4F],
+ [0x002B51, 0x002B54],
+ [0x002B56, 0x00DBFF],
+ [0x00E000, 0x01F003],
+ [0x01F005, 0x01F0CE],
+ [0x01F0D0, 0x01F18D],
+ [0x01F18F, 0x01F190],
+ [0x01F19B, 0x01F1E5],
+ [0x01F202, 0x01F219],
+ [0x01F21B, 0x01F22E],
+ [0x01F230, 0x01F231],
+ [0x01F23B, 0x01F24F],
+ [0x01F252, 0x01F2FF],
+ [0x01F321, 0x01F32C],
+ [0x01F394, 0x01F39F],
+ [0x01F3CB, 0x01F3CE],
+ [0x01F3D4, 0x01F3DF],
+ [0x01F3F1, 0x01F3F3],
+ [0x01F3F5, 0x01F3F7],
+ [0x01F4FD, 0x01F4FE],
+ [0x01F53E, 0x01F54A],
+ [0x01F568, 0x01F579],
+ [0x01F57B, 0x01F594],
+ [0x01F597, 0x01F5A3],
+ [0x01F5A5, 0x01F5FA],
+ [0x01F650, 0x01F67F],
+ [0x01F6C6, 0x01F6CB],
+ [0x01F6CD, 0x01F6CF],
+ [0x01F6D3, 0x01F6D4],
+ [0x01F6D8, 0x01F6DB],
+ [0x01F6E0, 0x01F6EA],
+ [0x01F6ED, 0x01F6F3],
+ [0x01F6FD, 0x01F7DF],
+ [0x01F7EC, 0x01F7EF],
+ [0x01F7F1, 0x01F90B],
+ [0x01FA00, 0x01FA6F],
+ [0x01FA7D, 0x01FA7F],
+ [0x01FA89, 0x01FA8F],
+ [0x01FAC6, 0x01FACD],
+ [0x01FADC, 0x01FADF],
+ [0x01FAE9, 0x01FAEF],
+ [0x01FAF9, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Emoji_Presentation}+$/u,
+ nonMatchSymbols,
+ "\\P{Emoji_Presentation}"
+);
+testPropertyEscapes(
+ /^\P{EPres}+$/u,
+ nonMatchSymbols,
+ "\\P{EPres}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Extended_Pictographic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Extended_Pictographic.js
new file mode 100644
index 0000000000..0ed7805aa5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Extended_Pictographic.js
@@ -0,0 +1,209 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Extended_Pictographic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000A9,
+ 0x0000AE,
+ 0x00203C,
+ 0x002049,
+ 0x002122,
+ 0x002139,
+ 0x002328,
+ 0x002388,
+ 0x0023CF,
+ 0x0024C2,
+ 0x0025B6,
+ 0x0025C0,
+ 0x002714,
+ 0x002716,
+ 0x00271D,
+ 0x002721,
+ 0x002728,
+ 0x002744,
+ 0x002747,
+ 0x00274C,
+ 0x00274E,
+ 0x002757,
+ 0x0027A1,
+ 0x0027B0,
+ 0x0027BF,
+ 0x002B50,
+ 0x002B55,
+ 0x003030,
+ 0x00303D,
+ 0x003297,
+ 0x003299,
+ 0x01F12F,
+ 0x01F18E,
+ 0x01F21A,
+ 0x01F22F
+ ],
+ ranges: [
+ [0x002194, 0x002199],
+ [0x0021A9, 0x0021AA],
+ [0x00231A, 0x00231B],
+ [0x0023E9, 0x0023F3],
+ [0x0023F8, 0x0023FA],
+ [0x0025AA, 0x0025AB],
+ [0x0025FB, 0x0025FE],
+ [0x002600, 0x002605],
+ [0x002607, 0x002612],
+ [0x002614, 0x002685],
+ [0x002690, 0x002705],
+ [0x002708, 0x002712],
+ [0x002733, 0x002734],
+ [0x002753, 0x002755],
+ [0x002763, 0x002767],
+ [0x002795, 0x002797],
+ [0x002934, 0x002935],
+ [0x002B05, 0x002B07],
+ [0x002B1B, 0x002B1C],
+ [0x01F000, 0x01F0FF],
+ [0x01F10D, 0x01F10F],
+ [0x01F16C, 0x01F171],
+ [0x01F17E, 0x01F17F],
+ [0x01F191, 0x01F19A],
+ [0x01F1AD, 0x01F1E5],
+ [0x01F201, 0x01F20F],
+ [0x01F232, 0x01F23A],
+ [0x01F23C, 0x01F23F],
+ [0x01F249, 0x01F3FA],
+ [0x01F400, 0x01F53D],
+ [0x01F546, 0x01F64F],
+ [0x01F680, 0x01F6FF],
+ [0x01F774, 0x01F77F],
+ [0x01F7D5, 0x01F7FF],
+ [0x01F80C, 0x01F80F],
+ [0x01F848, 0x01F84F],
+ [0x01F85A, 0x01F85F],
+ [0x01F888, 0x01F88F],
+ [0x01F8AE, 0x01F8FF],
+ [0x01F90C, 0x01F93A],
+ [0x01F93C, 0x01F945],
+ [0x01F947, 0x01FAFF],
+ [0x01FC00, 0x01FFFD]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Extended_Pictographic}+$/u,
+ matchSymbols,
+ "\\p{Extended_Pictographic}"
+);
+testPropertyEscapes(
+ /^\p{ExtPict}+$/u,
+ matchSymbols,
+ "\\p{ExtPict}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0025FF,
+ 0x002606,
+ 0x002613,
+ 0x002713,
+ 0x002715,
+ 0x00274D,
+ 0x002756,
+ 0x003298,
+ 0x01F23B,
+ 0x01F93B,
+ 0x01F946
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0000A8],
+ [0x0000AA, 0x0000AD],
+ [0x0000AF, 0x00203B],
+ [0x00203D, 0x002048],
+ [0x00204A, 0x002121],
+ [0x002123, 0x002138],
+ [0x00213A, 0x002193],
+ [0x00219A, 0x0021A8],
+ [0x0021AB, 0x002319],
+ [0x00231C, 0x002327],
+ [0x002329, 0x002387],
+ [0x002389, 0x0023CE],
+ [0x0023D0, 0x0023E8],
+ [0x0023F4, 0x0023F7],
+ [0x0023FB, 0x0024C1],
+ [0x0024C3, 0x0025A9],
+ [0x0025AC, 0x0025B5],
+ [0x0025B7, 0x0025BF],
+ [0x0025C1, 0x0025FA],
+ [0x002686, 0x00268F],
+ [0x002706, 0x002707],
+ [0x002717, 0x00271C],
+ [0x00271E, 0x002720],
+ [0x002722, 0x002727],
+ [0x002729, 0x002732],
+ [0x002735, 0x002743],
+ [0x002745, 0x002746],
+ [0x002748, 0x00274B],
+ [0x00274F, 0x002752],
+ [0x002758, 0x002762],
+ [0x002768, 0x002794],
+ [0x002798, 0x0027A0],
+ [0x0027A2, 0x0027AF],
+ [0x0027B1, 0x0027BE],
+ [0x0027C0, 0x002933],
+ [0x002936, 0x002B04],
+ [0x002B08, 0x002B1A],
+ [0x002B1D, 0x002B4F],
+ [0x002B51, 0x002B54],
+ [0x002B56, 0x00302F],
+ [0x003031, 0x00303C],
+ [0x00303E, 0x003296],
+ [0x00329A, 0x00DBFF],
+ [0x00E000, 0x01EFFF],
+ [0x01F100, 0x01F10C],
+ [0x01F110, 0x01F12E],
+ [0x01F130, 0x01F16B],
+ [0x01F172, 0x01F17D],
+ [0x01F180, 0x01F18D],
+ [0x01F18F, 0x01F190],
+ [0x01F19B, 0x01F1AC],
+ [0x01F1E6, 0x01F200],
+ [0x01F210, 0x01F219],
+ [0x01F21B, 0x01F22E],
+ [0x01F230, 0x01F231],
+ [0x01F240, 0x01F248],
+ [0x01F3FB, 0x01F3FF],
+ [0x01F53E, 0x01F545],
+ [0x01F650, 0x01F67F],
+ [0x01F700, 0x01F773],
+ [0x01F780, 0x01F7D4],
+ [0x01F800, 0x01F80B],
+ [0x01F810, 0x01F847],
+ [0x01F850, 0x01F859],
+ [0x01F860, 0x01F887],
+ [0x01F890, 0x01F8AD],
+ [0x01F900, 0x01F90B],
+ [0x01FB00, 0x01FBFF],
+ [0x01FFFE, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Extended_Pictographic}+$/u,
+ nonMatchSymbols,
+ "\\P{Extended_Pictographic}"
+);
+testPropertyEscapes(
+ /^\P{ExtPict}+$/u,
+ nonMatchSymbols,
+ "\\P{ExtPict}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Extender.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Extender.js
new file mode 100644
index 0000000000..92f9fb26d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Extender.js
@@ -0,0 +1,119 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Extender`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000B7,
+ 0x000640,
+ 0x0007FA,
+ 0x000B55,
+ 0x000E46,
+ 0x000EC6,
+ 0x00180A,
+ 0x001843,
+ 0x001AA7,
+ 0x001C36,
+ 0x001C7B,
+ 0x003005,
+ 0x00A015,
+ 0x00A60C,
+ 0x00A9CF,
+ 0x00A9E6,
+ 0x00AA70,
+ 0x00AADD,
+ 0x00FF70,
+ 0x01135D,
+ 0x011A98,
+ 0x016FE3
+ ],
+ ranges: [
+ [0x0002D0, 0x0002D1],
+ [0x003031, 0x003035],
+ [0x00309D, 0x00309E],
+ [0x0030FC, 0x0030FE],
+ [0x00AAF3, 0x00AAF4],
+ [0x010781, 0x010782],
+ [0x0115C6, 0x0115C8],
+ [0x016B42, 0x016B43],
+ [0x016FE0, 0x016FE1],
+ [0x01E13C, 0x01E13D],
+ [0x01E944, 0x01E946]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Extender}+$/u,
+ matchSymbols,
+ "\\p{Extender}"
+);
+testPropertyEscapes(
+ /^\p{Ext}+$/u,
+ matchSymbols,
+ "\\p{Ext}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x016FE2
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0000B6],
+ [0x0000B8, 0x0002CF],
+ [0x0002D2, 0x00063F],
+ [0x000641, 0x0007F9],
+ [0x0007FB, 0x000B54],
+ [0x000B56, 0x000E45],
+ [0x000E47, 0x000EC5],
+ [0x000EC7, 0x001809],
+ [0x00180B, 0x001842],
+ [0x001844, 0x001AA6],
+ [0x001AA8, 0x001C35],
+ [0x001C37, 0x001C7A],
+ [0x001C7C, 0x003004],
+ [0x003006, 0x003030],
+ [0x003036, 0x00309C],
+ [0x00309F, 0x0030FB],
+ [0x0030FF, 0x00A014],
+ [0x00A016, 0x00A60B],
+ [0x00A60D, 0x00A9CE],
+ [0x00A9D0, 0x00A9E5],
+ [0x00A9E7, 0x00AA6F],
+ [0x00AA71, 0x00AADC],
+ [0x00AADE, 0x00AAF2],
+ [0x00AAF5, 0x00DBFF],
+ [0x00E000, 0x00FF6F],
+ [0x00FF71, 0x010780],
+ [0x010783, 0x01135C],
+ [0x01135E, 0x0115C5],
+ [0x0115C9, 0x011A97],
+ [0x011A99, 0x016B41],
+ [0x016B44, 0x016FDF],
+ [0x016FE4, 0x01E13B],
+ [0x01E13E, 0x01E943],
+ [0x01E947, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Extender}+$/u,
+ nonMatchSymbols,
+ "\\P{Extender}"
+);
+testPropertyEscapes(
+ /^\P{Ext}+$/u,
+ nonMatchSymbols,
+ "\\P{Ext}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Cased_Letter.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Cased_Letter.js
new file mode 100644
index 0000000000..bd8f68fd18
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Cased_Letter.js
@@ -0,0 +1,379 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Cased_Letter`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000B5,
+ 0x00037F,
+ 0x000386,
+ 0x00038C,
+ 0x0010C7,
+ 0x0010CD,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x001FBE,
+ 0x002102,
+ 0x002107,
+ 0x002115,
+ 0x002124,
+ 0x002126,
+ 0x002128,
+ 0x002139,
+ 0x00214E,
+ 0x002D27,
+ 0x002D2D,
+ 0x00A7D3,
+ 0x00A7FA,
+ 0x01D4A2,
+ 0x01D4BB,
+ 0x01D546
+ ],
+ ranges: [
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000F6],
+ [0x0000F8, 0x0001BA],
+ [0x0001BC, 0x0001BF],
+ [0x0001C4, 0x000293],
+ [0x000295, 0x0002AF],
+ [0x000370, 0x000373],
+ [0x000376, 0x000377],
+ [0x00037B, 0x00037D],
+ [0x000388, 0x00038A],
+ [0x00038E, 0x0003A1],
+ [0x0003A3, 0x0003F5],
+ [0x0003F7, 0x000481],
+ [0x00048A, 0x00052F],
+ [0x000531, 0x000556],
+ [0x000560, 0x000588],
+ [0x0010A0, 0x0010C5],
+ [0x0010D0, 0x0010FA],
+ [0x0010FD, 0x0010FF],
+ [0x0013A0, 0x0013F5],
+ [0x0013F8, 0x0013FD],
+ [0x001C80, 0x001C88],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CBF],
+ [0x001D00, 0x001D2B],
+ [0x001D6B, 0x001D77],
+ [0x001D79, 0x001D9A],
+ [0x001E00, 0x001F15],
+ [0x001F18, 0x001F1D],
+ [0x001F20, 0x001F45],
+ [0x001F48, 0x001F4D],
+ [0x001F50, 0x001F57],
+ [0x001F5F, 0x001F7D],
+ [0x001F80, 0x001FB4],
+ [0x001FB6, 0x001FBC],
+ [0x001FC2, 0x001FC4],
+ [0x001FC6, 0x001FCC],
+ [0x001FD0, 0x001FD3],
+ [0x001FD6, 0x001FDB],
+ [0x001FE0, 0x001FEC],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FFC],
+ [0x00210A, 0x002113],
+ [0x002119, 0x00211D],
+ [0x00212A, 0x00212D],
+ [0x00212F, 0x002134],
+ [0x00213C, 0x00213F],
+ [0x002145, 0x002149],
+ [0x002183, 0x002184],
+ [0x002C00, 0x002C7B],
+ [0x002C7E, 0x002CE4],
+ [0x002CEB, 0x002CEE],
+ [0x002CF2, 0x002CF3],
+ [0x002D00, 0x002D25],
+ [0x00A640, 0x00A66D],
+ [0x00A680, 0x00A69B],
+ [0x00A722, 0x00A76F],
+ [0x00A771, 0x00A787],
+ [0x00A78B, 0x00A78E],
+ [0x00A790, 0x00A7CA],
+ [0x00A7D0, 0x00A7D1],
+ [0x00A7D5, 0x00A7D9],
+ [0x00A7F5, 0x00A7F6],
+ [0x00AB30, 0x00AB5A],
+ [0x00AB60, 0x00AB68],
+ [0x00AB70, 0x00ABBF],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FF21, 0x00FF3A],
+ [0x00FF41, 0x00FF5A],
+ [0x010400, 0x01044F],
+ [0x0104B0, 0x0104D3],
+ [0x0104D8, 0x0104FB],
+ [0x010570, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC],
+ [0x010C80, 0x010CB2],
+ [0x010CC0, 0x010CF2],
+ [0x0118A0, 0x0118DF],
+ [0x016E40, 0x016E7F],
+ [0x01D400, 0x01D454],
+ [0x01D456, 0x01D49C],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D51E, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D552, 0x01D6A5],
+ [0x01D6A8, 0x01D6C0],
+ [0x01D6C2, 0x01D6DA],
+ [0x01D6DC, 0x01D6FA],
+ [0x01D6FC, 0x01D714],
+ [0x01D716, 0x01D734],
+ [0x01D736, 0x01D74E],
+ [0x01D750, 0x01D76E],
+ [0x01D770, 0x01D788],
+ [0x01D78A, 0x01D7A8],
+ [0x01D7AA, 0x01D7C2],
+ [0x01D7C4, 0x01D7CB],
+ [0x01DF00, 0x01DF09],
+ [0x01DF0B, 0x01DF1E],
+ [0x01DF25, 0x01DF2A],
+ [0x01E900, 0x01E943]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Cased_Letter}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Cased_Letter}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=LC}+$/u,
+ matchSymbols,
+ "\\p{General_Category=LC}"
+);
+testPropertyEscapes(
+ /^\p{gc=Cased_Letter}+$/u,
+ matchSymbols,
+ "\\p{gc=Cased_Letter}"
+);
+testPropertyEscapes(
+ /^\p{gc=LC}+$/u,
+ matchSymbols,
+ "\\p{gc=LC}"
+);
+testPropertyEscapes(
+ /^\p{Cased_Letter}+$/u,
+ matchSymbols,
+ "\\p{Cased_Letter}"
+);
+testPropertyEscapes(
+ /^\p{LC}+$/u,
+ matchSymbols,
+ "\\p{LC}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000D7,
+ 0x0000F7,
+ 0x0001BB,
+ 0x000294,
+ 0x00037E,
+ 0x000387,
+ 0x00038B,
+ 0x00038D,
+ 0x0003A2,
+ 0x0003F6,
+ 0x000530,
+ 0x0010C6,
+ 0x001D78,
+ 0x001F58,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x001FB5,
+ 0x001FBD,
+ 0x001FC5,
+ 0x001FF5,
+ 0x002114,
+ 0x002125,
+ 0x002127,
+ 0x002129,
+ 0x00212E,
+ 0x002D26,
+ 0x00A770,
+ 0x00A78F,
+ 0x00A7D2,
+ 0x00A7D4,
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x010596,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA,
+ 0x01D455,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D506,
+ 0x01D515,
+ 0x01D51D,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545,
+ 0x01D551,
+ 0x01D6C1,
+ 0x01D6DB,
+ 0x01D6FB,
+ 0x01D715,
+ 0x01D735,
+ 0x01D74F,
+ 0x01D76F,
+ 0x01D789,
+ 0x01D7A9,
+ 0x01D7C3,
+ 0x01DF0A
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000040],
+ [0x00005B, 0x000060],
+ [0x00007B, 0x0000B4],
+ [0x0000B6, 0x0000BF],
+ [0x0001C0, 0x0001C3],
+ [0x0002B0, 0x00036F],
+ [0x000374, 0x000375],
+ [0x000378, 0x00037A],
+ [0x000380, 0x000385],
+ [0x000482, 0x000489],
+ [0x000557, 0x00055F],
+ [0x000589, 0x00109F],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x0010CF],
+ [0x0010FB, 0x0010FC],
+ [0x001100, 0x00139F],
+ [0x0013F6, 0x0013F7],
+ [0x0013FE, 0x001C7F],
+ [0x001C89, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC0, 0x001CFF],
+ [0x001D2C, 0x001D6A],
+ [0x001D9B, 0x001DFF],
+ [0x001F16, 0x001F17],
+ [0x001F1E, 0x001F1F],
+ [0x001F46, 0x001F47],
+ [0x001F4E, 0x001F4F],
+ [0x001F7E, 0x001F7F],
+ [0x001FBF, 0x001FC1],
+ [0x001FCD, 0x001FCF],
+ [0x001FD4, 0x001FD5],
+ [0x001FDC, 0x001FDF],
+ [0x001FED, 0x001FF1],
+ [0x001FFD, 0x002101],
+ [0x002103, 0x002106],
+ [0x002108, 0x002109],
+ [0x002116, 0x002118],
+ [0x00211E, 0x002123],
+ [0x002135, 0x002138],
+ [0x00213A, 0x00213B],
+ [0x002140, 0x002144],
+ [0x00214A, 0x00214D],
+ [0x00214F, 0x002182],
+ [0x002185, 0x002BFF],
+ [0x002C7C, 0x002C7D],
+ [0x002CE5, 0x002CEA],
+ [0x002CEF, 0x002CF1],
+ [0x002CF4, 0x002CFF],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x00A63F],
+ [0x00A66E, 0x00A67F],
+ [0x00A69C, 0x00A721],
+ [0x00A788, 0x00A78A],
+ [0x00A7CB, 0x00A7CF],
+ [0x00A7DA, 0x00A7F4],
+ [0x00A7F7, 0x00A7F9],
+ [0x00A7FB, 0x00AB2F],
+ [0x00AB5B, 0x00AB5F],
+ [0x00AB69, 0x00AB6F],
+ [0x00ABC0, 0x00DBFF],
+ [0x00E000, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FF20],
+ [0x00FF3B, 0x00FF40],
+ [0x00FF5B, 0x0103FF],
+ [0x010450, 0x0104AF],
+ [0x0104D4, 0x0104D7],
+ [0x0104FC, 0x01056F],
+ [0x0105BD, 0x010C7F],
+ [0x010CB3, 0x010CBF],
+ [0x010CF3, 0x01189F],
+ [0x0118E0, 0x016E3F],
+ [0x016E80, 0x01D3FF],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D50B, 0x01D50C],
+ [0x01D547, 0x01D549],
+ [0x01D6A6, 0x01D6A7],
+ [0x01D7CC, 0x01DEFF],
+ [0x01DF1F, 0x01DF24],
+ [0x01DF2B, 0x01E8FF],
+ [0x01E944, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Cased_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Cased_Letter}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=LC}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=LC}"
+);
+testPropertyEscapes(
+ /^\P{gc=Cased_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Cased_Letter}"
+);
+testPropertyEscapes(
+ /^\P{gc=LC}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=LC}"
+);
+testPropertyEscapes(
+ /^\P{Cased_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{Cased_Letter}"
+);
+testPropertyEscapes(
+ /^\P{LC}+$/u,
+ nonMatchSymbols,
+ "\\P{LC}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Close_Punctuation.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Close_Punctuation.js
new file mode 100644
index 0000000000..cc6c4ac2bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Close_Punctuation.js
@@ -0,0 +1,245 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Close_Punctuation`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000029,
+ 0x00005D,
+ 0x00007D,
+ 0x000F3B,
+ 0x000F3D,
+ 0x00169C,
+ 0x002046,
+ 0x00207E,
+ 0x00208E,
+ 0x002309,
+ 0x00230B,
+ 0x00232A,
+ 0x002769,
+ 0x00276B,
+ 0x00276D,
+ 0x00276F,
+ 0x002771,
+ 0x002773,
+ 0x002775,
+ 0x0027C6,
+ 0x0027E7,
+ 0x0027E9,
+ 0x0027EB,
+ 0x0027ED,
+ 0x0027EF,
+ 0x002984,
+ 0x002986,
+ 0x002988,
+ 0x00298A,
+ 0x00298C,
+ 0x00298E,
+ 0x002990,
+ 0x002992,
+ 0x002994,
+ 0x002996,
+ 0x002998,
+ 0x0029D9,
+ 0x0029DB,
+ 0x0029FD,
+ 0x002E23,
+ 0x002E25,
+ 0x002E27,
+ 0x002E29,
+ 0x002E56,
+ 0x002E58,
+ 0x002E5A,
+ 0x002E5C,
+ 0x003009,
+ 0x00300B,
+ 0x00300D,
+ 0x00300F,
+ 0x003011,
+ 0x003015,
+ 0x003017,
+ 0x003019,
+ 0x00301B,
+ 0x00FD3E,
+ 0x00FE18,
+ 0x00FE36,
+ 0x00FE38,
+ 0x00FE3A,
+ 0x00FE3C,
+ 0x00FE3E,
+ 0x00FE40,
+ 0x00FE42,
+ 0x00FE44,
+ 0x00FE48,
+ 0x00FE5A,
+ 0x00FE5C,
+ 0x00FE5E,
+ 0x00FF09,
+ 0x00FF3D,
+ 0x00FF5D,
+ 0x00FF60,
+ 0x00FF63
+ ],
+ ranges: [
+ [0x00301E, 0x00301F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Close_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Close_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Pe}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Pe}"
+);
+testPropertyEscapes(
+ /^\p{gc=Close_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{gc=Close_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{gc=Pe}+$/u,
+ matchSymbols,
+ "\\p{gc=Pe}"
+);
+testPropertyEscapes(
+ /^\p{Close_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{Close_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{Pe}+$/u,
+ matchSymbols,
+ "\\p{Pe}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000F3C,
+ 0x00230A,
+ 0x00276A,
+ 0x00276C,
+ 0x00276E,
+ 0x002770,
+ 0x002772,
+ 0x002774,
+ 0x0027E8,
+ 0x0027EA,
+ 0x0027EC,
+ 0x0027EE,
+ 0x002985,
+ 0x002987,
+ 0x002989,
+ 0x00298B,
+ 0x00298D,
+ 0x00298F,
+ 0x002991,
+ 0x002993,
+ 0x002995,
+ 0x002997,
+ 0x0029DA,
+ 0x002E24,
+ 0x002E26,
+ 0x002E28,
+ 0x002E57,
+ 0x002E59,
+ 0x002E5B,
+ 0x00300A,
+ 0x00300C,
+ 0x00300E,
+ 0x003010,
+ 0x003016,
+ 0x003018,
+ 0x00301A,
+ 0x00FE37,
+ 0x00FE39,
+ 0x00FE3B,
+ 0x00FE3D,
+ 0x00FE3F,
+ 0x00FE41,
+ 0x00FE43,
+ 0x00FE5B,
+ 0x00FE5D
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000028],
+ [0x00002A, 0x00005C],
+ [0x00005E, 0x00007C],
+ [0x00007E, 0x000F3A],
+ [0x000F3E, 0x00169B],
+ [0x00169D, 0x002045],
+ [0x002047, 0x00207D],
+ [0x00207F, 0x00208D],
+ [0x00208F, 0x002308],
+ [0x00230C, 0x002329],
+ [0x00232B, 0x002768],
+ [0x002776, 0x0027C5],
+ [0x0027C7, 0x0027E6],
+ [0x0027F0, 0x002983],
+ [0x002999, 0x0029D8],
+ [0x0029DC, 0x0029FC],
+ [0x0029FE, 0x002E22],
+ [0x002E2A, 0x002E55],
+ [0x002E5D, 0x003008],
+ [0x003012, 0x003014],
+ [0x00301C, 0x00301D],
+ [0x003020, 0x00DBFF],
+ [0x00E000, 0x00FD3D],
+ [0x00FD3F, 0x00FE17],
+ [0x00FE19, 0x00FE35],
+ [0x00FE45, 0x00FE47],
+ [0x00FE49, 0x00FE59],
+ [0x00FE5F, 0x00FF08],
+ [0x00FF0A, 0x00FF3C],
+ [0x00FF3E, 0x00FF5C],
+ [0x00FF5E, 0x00FF5F],
+ [0x00FF61, 0x00FF62],
+ [0x00FF64, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Close_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Close_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Pe}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Pe}"
+);
+testPropertyEscapes(
+ /^\P{gc=Close_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Close_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{gc=Pe}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Pe}"
+);
+testPropertyEscapes(
+ /^\P{Close_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{Close_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{Pe}+$/u,
+ nonMatchSymbols,
+ "\\P{Pe}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Connector_Punctuation.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Connector_Punctuation.js
new file mode 100644
index 0000000000..09d9f63e6b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Connector_Punctuation.js
@@ -0,0 +1,104 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Connector_Punctuation`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00005F,
+ 0x002054,
+ 0x00FF3F
+ ],
+ ranges: [
+ [0x00203F, 0x002040],
+ [0x00FE33, 0x00FE34],
+ [0x00FE4D, 0x00FE4F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Connector_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Connector_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Pc}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Pc}"
+);
+testPropertyEscapes(
+ /^\p{gc=Connector_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{gc=Connector_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{gc=Pc}+$/u,
+ matchSymbols,
+ "\\p{gc=Pc}"
+);
+testPropertyEscapes(
+ /^\p{Connector_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{Connector_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{Pc}+$/u,
+ matchSymbols,
+ "\\p{Pc}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00005E],
+ [0x000060, 0x00203E],
+ [0x002041, 0x002053],
+ [0x002055, 0x00DBFF],
+ [0x00E000, 0x00FE32],
+ [0x00FE35, 0x00FE4C],
+ [0x00FE50, 0x00FF3E],
+ [0x00FF40, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Connector_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Connector_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Pc}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Pc}"
+);
+testPropertyEscapes(
+ /^\P{gc=Connector_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Connector_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{gc=Pc}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Pc}"
+);
+testPropertyEscapes(
+ /^\P{Connector_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{Connector_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{Pc}+$/u,
+ nonMatchSymbols,
+ "\\P{Pc}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Control.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Control.js
new file mode 100644
index 0000000000..830e4e3e01
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Control.js
@@ -0,0 +1,124 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Control`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000000, 0x00001F],
+ [0x00007F, 0x00009F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Control}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Control}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Cc}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Cc}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=cntrl}+$/u,
+ matchSymbols,
+ "\\p{General_Category=cntrl}"
+);
+testPropertyEscapes(
+ /^\p{gc=Control}+$/u,
+ matchSymbols,
+ "\\p{gc=Control}"
+);
+testPropertyEscapes(
+ /^\p{gc=Cc}+$/u,
+ matchSymbols,
+ "\\p{gc=Cc}"
+);
+testPropertyEscapes(
+ /^\p{gc=cntrl}+$/u,
+ matchSymbols,
+ "\\p{gc=cntrl}"
+);
+testPropertyEscapes(
+ /^\p{Control}+$/u,
+ matchSymbols,
+ "\\p{Control}"
+);
+testPropertyEscapes(
+ /^\p{Cc}+$/u,
+ matchSymbols,
+ "\\p{Cc}"
+);
+testPropertyEscapes(
+ /^\p{cntrl}+$/u,
+ matchSymbols,
+ "\\p{cntrl}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000020, 0x00007E],
+ [0x0000A0, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Control}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Control}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Cc}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Cc}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=cntrl}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=cntrl}"
+);
+testPropertyEscapes(
+ /^\P{gc=Control}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Control}"
+);
+testPropertyEscapes(
+ /^\P{gc=Cc}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Cc}"
+);
+testPropertyEscapes(
+ /^\P{gc=cntrl}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=cntrl}"
+);
+testPropertyEscapes(
+ /^\P{Control}+$/u,
+ nonMatchSymbols,
+ "\\P{Control}"
+);
+testPropertyEscapes(
+ /^\P{Cc}+$/u,
+ nonMatchSymbols,
+ "\\P{Cc}"
+);
+testPropertyEscapes(
+ /^\P{cntrl}+$/u,
+ nonMatchSymbols,
+ "\\P{cntrl}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Currency_Symbol.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Currency_Symbol.js
new file mode 100644
index 0000000000..692b589fa8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Currency_Symbol.js
@@ -0,0 +1,134 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Currency_Symbol`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000024,
+ 0x00058F,
+ 0x00060B,
+ 0x0009FB,
+ 0x000AF1,
+ 0x000BF9,
+ 0x000E3F,
+ 0x0017DB,
+ 0x00A838,
+ 0x00FDFC,
+ 0x00FE69,
+ 0x00FF04,
+ 0x01E2FF,
+ 0x01ECB0
+ ],
+ ranges: [
+ [0x0000A2, 0x0000A5],
+ [0x0007FE, 0x0007FF],
+ [0x0009F2, 0x0009F3],
+ [0x0020A0, 0x0020C0],
+ [0x00FFE0, 0x00FFE1],
+ [0x00FFE5, 0x00FFE6],
+ [0x011FDD, 0x011FE0]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Currency_Symbol}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Currency_Symbol}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Sc}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Sc}"
+);
+testPropertyEscapes(
+ /^\p{gc=Currency_Symbol}+$/u,
+ matchSymbols,
+ "\\p{gc=Currency_Symbol}"
+);
+testPropertyEscapes(
+ /^\p{gc=Sc}+$/u,
+ matchSymbols,
+ "\\p{gc=Sc}"
+);
+testPropertyEscapes(
+ /^\p{Currency_Symbol}+$/u,
+ matchSymbols,
+ "\\p{Currency_Symbol}"
+);
+testPropertyEscapes(
+ /^\p{Sc}+$/u,
+ matchSymbols,
+ "\\p{Sc}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000023],
+ [0x000025, 0x0000A1],
+ [0x0000A6, 0x00058E],
+ [0x000590, 0x00060A],
+ [0x00060C, 0x0007FD],
+ [0x000800, 0x0009F1],
+ [0x0009F4, 0x0009FA],
+ [0x0009FC, 0x000AF0],
+ [0x000AF2, 0x000BF8],
+ [0x000BFA, 0x000E3E],
+ [0x000E40, 0x0017DA],
+ [0x0017DC, 0x00209F],
+ [0x0020C1, 0x00A837],
+ [0x00A839, 0x00DBFF],
+ [0x00E000, 0x00FDFB],
+ [0x00FDFD, 0x00FE68],
+ [0x00FE6A, 0x00FF03],
+ [0x00FF05, 0x00FFDF],
+ [0x00FFE2, 0x00FFE4],
+ [0x00FFE7, 0x011FDC],
+ [0x011FE1, 0x01E2FE],
+ [0x01E300, 0x01ECAF],
+ [0x01ECB1, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Currency_Symbol}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Currency_Symbol}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Sc}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Sc}"
+);
+testPropertyEscapes(
+ /^\P{gc=Currency_Symbol}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Currency_Symbol}"
+);
+testPropertyEscapes(
+ /^\P{gc=Sc}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Sc}"
+);
+testPropertyEscapes(
+ /^\P{Currency_Symbol}+$/u,
+ nonMatchSymbols,
+ "\\P{Currency_Symbol}"
+);
+testPropertyEscapes(
+ /^\P{Sc}+$/u,
+ nonMatchSymbols,
+ "\\P{Sc}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Dash_Punctuation.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Dash_Punctuation.js
new file mode 100644
index 0000000000..7ea1218edb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Dash_Punctuation.js
@@ -0,0 +1,130 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Dash_Punctuation`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00002D,
+ 0x00058A,
+ 0x0005BE,
+ 0x001400,
+ 0x001806,
+ 0x002E17,
+ 0x002E1A,
+ 0x002E40,
+ 0x002E5D,
+ 0x00301C,
+ 0x003030,
+ 0x0030A0,
+ 0x00FE58,
+ 0x00FE63,
+ 0x00FF0D,
+ 0x010EAD
+ ],
+ ranges: [
+ [0x002010, 0x002015],
+ [0x002E3A, 0x002E3B],
+ [0x00FE31, 0x00FE32]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Dash_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Dash_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Pd}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Pd}"
+);
+testPropertyEscapes(
+ /^\p{gc=Dash_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{gc=Dash_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{gc=Pd}+$/u,
+ matchSymbols,
+ "\\p{gc=Pd}"
+);
+testPropertyEscapes(
+ /^\p{Dash_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{Dash_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{Pd}+$/u,
+ matchSymbols,
+ "\\p{Pd}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00002C],
+ [0x00002E, 0x000589],
+ [0x00058B, 0x0005BD],
+ [0x0005BF, 0x0013FF],
+ [0x001401, 0x001805],
+ [0x001807, 0x00200F],
+ [0x002016, 0x002E16],
+ [0x002E18, 0x002E19],
+ [0x002E1B, 0x002E39],
+ [0x002E3C, 0x002E3F],
+ [0x002E41, 0x002E5C],
+ [0x002E5E, 0x00301B],
+ [0x00301D, 0x00302F],
+ [0x003031, 0x00309F],
+ [0x0030A1, 0x00DBFF],
+ [0x00E000, 0x00FE30],
+ [0x00FE33, 0x00FE57],
+ [0x00FE59, 0x00FE62],
+ [0x00FE64, 0x00FF0C],
+ [0x00FF0E, 0x010EAC],
+ [0x010EAE, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Dash_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Dash_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Pd}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Pd}"
+);
+testPropertyEscapes(
+ /^\P{gc=Dash_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Dash_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{gc=Pd}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Pd}"
+);
+testPropertyEscapes(
+ /^\P{Dash_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{Dash_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{Pd}+$/u,
+ nonMatchSymbols,
+ "\\P{Pd}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Decimal_Number.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Decimal_Number.js
new file mode 100644
index 0000000000..4f7829fc14
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Decimal_Number.js
@@ -0,0 +1,249 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Decimal_Number`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000030, 0x000039],
+ [0x000660, 0x000669],
+ [0x0006F0, 0x0006F9],
+ [0x0007C0, 0x0007C9],
+ [0x000966, 0x00096F],
+ [0x0009E6, 0x0009EF],
+ [0x000A66, 0x000A6F],
+ [0x000AE6, 0x000AEF],
+ [0x000B66, 0x000B6F],
+ [0x000BE6, 0x000BEF],
+ [0x000C66, 0x000C6F],
+ [0x000CE6, 0x000CEF],
+ [0x000D66, 0x000D6F],
+ [0x000DE6, 0x000DEF],
+ [0x000E50, 0x000E59],
+ [0x000ED0, 0x000ED9],
+ [0x000F20, 0x000F29],
+ [0x001040, 0x001049],
+ [0x001090, 0x001099],
+ [0x0017E0, 0x0017E9],
+ [0x001810, 0x001819],
+ [0x001946, 0x00194F],
+ [0x0019D0, 0x0019D9],
+ [0x001A80, 0x001A89],
+ [0x001A90, 0x001A99],
+ [0x001B50, 0x001B59],
+ [0x001BB0, 0x001BB9],
+ [0x001C40, 0x001C49],
+ [0x001C50, 0x001C59],
+ [0x00A620, 0x00A629],
+ [0x00A8D0, 0x00A8D9],
+ [0x00A900, 0x00A909],
+ [0x00A9D0, 0x00A9D9],
+ [0x00A9F0, 0x00A9F9],
+ [0x00AA50, 0x00AA59],
+ [0x00ABF0, 0x00ABF9],
+ [0x00FF10, 0x00FF19],
+ [0x0104A0, 0x0104A9],
+ [0x010D30, 0x010D39],
+ [0x011066, 0x01106F],
+ [0x0110F0, 0x0110F9],
+ [0x011136, 0x01113F],
+ [0x0111D0, 0x0111D9],
+ [0x0112F0, 0x0112F9],
+ [0x011450, 0x011459],
+ [0x0114D0, 0x0114D9],
+ [0x011650, 0x011659],
+ [0x0116C0, 0x0116C9],
+ [0x011730, 0x011739],
+ [0x0118E0, 0x0118E9],
+ [0x011950, 0x011959],
+ [0x011C50, 0x011C59],
+ [0x011D50, 0x011D59],
+ [0x011DA0, 0x011DA9],
+ [0x011F50, 0x011F59],
+ [0x016A60, 0x016A69],
+ [0x016AC0, 0x016AC9],
+ [0x016B50, 0x016B59],
+ [0x01D7CE, 0x01D7FF],
+ [0x01E140, 0x01E149],
+ [0x01E2F0, 0x01E2F9],
+ [0x01E4F0, 0x01E4F9],
+ [0x01E950, 0x01E959],
+ [0x01FBF0, 0x01FBF9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Decimal_Number}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Decimal_Number}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Nd}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Nd}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=digit}+$/u,
+ matchSymbols,
+ "\\p{General_Category=digit}"
+);
+testPropertyEscapes(
+ /^\p{gc=Decimal_Number}+$/u,
+ matchSymbols,
+ "\\p{gc=Decimal_Number}"
+);
+testPropertyEscapes(
+ /^\p{gc=Nd}+$/u,
+ matchSymbols,
+ "\\p{gc=Nd}"
+);
+testPropertyEscapes(
+ /^\p{gc=digit}+$/u,
+ matchSymbols,
+ "\\p{gc=digit}"
+);
+testPropertyEscapes(
+ /^\p{Decimal_Number}+$/u,
+ matchSymbols,
+ "\\p{Decimal_Number}"
+);
+testPropertyEscapes(
+ /^\p{Nd}+$/u,
+ matchSymbols,
+ "\\p{Nd}"
+);
+testPropertyEscapes(
+ /^\p{digit}+$/u,
+ matchSymbols,
+ "\\p{digit}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00002F],
+ [0x00003A, 0x00065F],
+ [0x00066A, 0x0006EF],
+ [0x0006FA, 0x0007BF],
+ [0x0007CA, 0x000965],
+ [0x000970, 0x0009E5],
+ [0x0009F0, 0x000A65],
+ [0x000A70, 0x000AE5],
+ [0x000AF0, 0x000B65],
+ [0x000B70, 0x000BE5],
+ [0x000BF0, 0x000C65],
+ [0x000C70, 0x000CE5],
+ [0x000CF0, 0x000D65],
+ [0x000D70, 0x000DE5],
+ [0x000DF0, 0x000E4F],
+ [0x000E5A, 0x000ECF],
+ [0x000EDA, 0x000F1F],
+ [0x000F2A, 0x00103F],
+ [0x00104A, 0x00108F],
+ [0x00109A, 0x0017DF],
+ [0x0017EA, 0x00180F],
+ [0x00181A, 0x001945],
+ [0x001950, 0x0019CF],
+ [0x0019DA, 0x001A7F],
+ [0x001A8A, 0x001A8F],
+ [0x001A9A, 0x001B4F],
+ [0x001B5A, 0x001BAF],
+ [0x001BBA, 0x001C3F],
+ [0x001C4A, 0x001C4F],
+ [0x001C5A, 0x00A61F],
+ [0x00A62A, 0x00A8CF],
+ [0x00A8DA, 0x00A8FF],
+ [0x00A90A, 0x00A9CF],
+ [0x00A9DA, 0x00A9EF],
+ [0x00A9FA, 0x00AA4F],
+ [0x00AA5A, 0x00ABEF],
+ [0x00ABFA, 0x00DBFF],
+ [0x00E000, 0x00FF0F],
+ [0x00FF1A, 0x01049F],
+ [0x0104AA, 0x010D2F],
+ [0x010D3A, 0x011065],
+ [0x011070, 0x0110EF],
+ [0x0110FA, 0x011135],
+ [0x011140, 0x0111CF],
+ [0x0111DA, 0x0112EF],
+ [0x0112FA, 0x01144F],
+ [0x01145A, 0x0114CF],
+ [0x0114DA, 0x01164F],
+ [0x01165A, 0x0116BF],
+ [0x0116CA, 0x01172F],
+ [0x01173A, 0x0118DF],
+ [0x0118EA, 0x01194F],
+ [0x01195A, 0x011C4F],
+ [0x011C5A, 0x011D4F],
+ [0x011D5A, 0x011D9F],
+ [0x011DAA, 0x011F4F],
+ [0x011F5A, 0x016A5F],
+ [0x016A6A, 0x016ABF],
+ [0x016ACA, 0x016B4F],
+ [0x016B5A, 0x01D7CD],
+ [0x01D800, 0x01E13F],
+ [0x01E14A, 0x01E2EF],
+ [0x01E2FA, 0x01E4EF],
+ [0x01E4FA, 0x01E94F],
+ [0x01E95A, 0x01FBEF],
+ [0x01FBFA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Decimal_Number}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Decimal_Number}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Nd}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Nd}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=digit}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=digit}"
+);
+testPropertyEscapes(
+ /^\P{gc=Decimal_Number}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Decimal_Number}"
+);
+testPropertyEscapes(
+ /^\P{gc=Nd}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Nd}"
+);
+testPropertyEscapes(
+ /^\P{gc=digit}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=digit}"
+);
+testPropertyEscapes(
+ /^\P{Decimal_Number}+$/u,
+ nonMatchSymbols,
+ "\\P{Decimal_Number}"
+);
+testPropertyEscapes(
+ /^\P{Nd}+$/u,
+ nonMatchSymbols,
+ "\\P{Nd}"
+);
+testPropertyEscapes(
+ /^\P{digit}+$/u,
+ nonMatchSymbols,
+ "\\P{digit}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Enclosing_Mark.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Enclosing_Mark.js
new file mode 100644
index 0000000000..eed7b242d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Enclosing_Mark.js
@@ -0,0 +1,103 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Enclosing_Mark`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x001ABE
+ ],
+ ranges: [
+ [0x000488, 0x000489],
+ [0x0020DD, 0x0020E0],
+ [0x0020E2, 0x0020E4],
+ [0x00A670, 0x00A672]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Enclosing_Mark}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Enclosing_Mark}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Me}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Me}"
+);
+testPropertyEscapes(
+ /^\p{gc=Enclosing_Mark}+$/u,
+ matchSymbols,
+ "\\p{gc=Enclosing_Mark}"
+);
+testPropertyEscapes(
+ /^\p{gc=Me}+$/u,
+ matchSymbols,
+ "\\p{gc=Me}"
+);
+testPropertyEscapes(
+ /^\p{Enclosing_Mark}+$/u,
+ matchSymbols,
+ "\\p{Enclosing_Mark}"
+);
+testPropertyEscapes(
+ /^\p{Me}+$/u,
+ matchSymbols,
+ "\\p{Me}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0020E1
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000487],
+ [0x00048A, 0x001ABD],
+ [0x001ABF, 0x0020DC],
+ [0x0020E5, 0x00A66F],
+ [0x00A673, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Enclosing_Mark}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Enclosing_Mark}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Me}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Me}"
+);
+testPropertyEscapes(
+ /^\P{gc=Enclosing_Mark}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Enclosing_Mark}"
+);
+testPropertyEscapes(
+ /^\P{gc=Me}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Me}"
+);
+testPropertyEscapes(
+ /^\P{Enclosing_Mark}+$/u,
+ nonMatchSymbols,
+ "\\P{Enclosing_Mark}"
+);
+testPropertyEscapes(
+ /^\P{Me}+$/u,
+ nonMatchSymbols,
+ "\\P{Me}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Final_Punctuation.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Final_Punctuation.js
new file mode 100644
index 0000000000..6df4891851
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Final_Punctuation.js
@@ -0,0 +1,112 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Final_Punctuation`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000BB,
+ 0x002019,
+ 0x00201D,
+ 0x00203A,
+ 0x002E03,
+ 0x002E05,
+ 0x002E0A,
+ 0x002E0D,
+ 0x002E1D,
+ 0x002E21
+ ],
+ ranges: []
+});
+testPropertyEscapes(
+ /^\p{General_Category=Final_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Final_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Pf}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Pf}"
+);
+testPropertyEscapes(
+ /^\p{gc=Final_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{gc=Final_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{gc=Pf}+$/u,
+ matchSymbols,
+ "\\p{gc=Pf}"
+);
+testPropertyEscapes(
+ /^\p{Final_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{Final_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{Pf}+$/u,
+ matchSymbols,
+ "\\p{Pf}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x002E04
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0000BA],
+ [0x0000BC, 0x002018],
+ [0x00201A, 0x00201C],
+ [0x00201E, 0x002039],
+ [0x00203B, 0x002E02],
+ [0x002E06, 0x002E09],
+ [0x002E0B, 0x002E0C],
+ [0x002E0E, 0x002E1C],
+ [0x002E1E, 0x002E20],
+ [0x002E22, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Final_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Final_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Pf}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Pf}"
+);
+testPropertyEscapes(
+ /^\P{gc=Final_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Final_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{gc=Pf}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Pf}"
+);
+testPropertyEscapes(
+ /^\P{Final_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{Final_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{Pf}+$/u,
+ nonMatchSymbols,
+ "\\P{Pf}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Format.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Format.js
new file mode 100644
index 0000000000..918a6bc99c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Format.js
@@ -0,0 +1,135 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Format`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000AD,
+ 0x00061C,
+ 0x0006DD,
+ 0x00070F,
+ 0x0008E2,
+ 0x00180E,
+ 0x00FEFF,
+ 0x0110BD,
+ 0x0110CD,
+ 0x0E0001
+ ],
+ ranges: [
+ [0x000600, 0x000605],
+ [0x000890, 0x000891],
+ [0x00200B, 0x00200F],
+ [0x00202A, 0x00202E],
+ [0x002060, 0x002064],
+ [0x002066, 0x00206F],
+ [0x00FFF9, 0x00FFFB],
+ [0x013430, 0x01343F],
+ [0x01BCA0, 0x01BCA3],
+ [0x01D173, 0x01D17A],
+ [0x0E0020, 0x0E007F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Format}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Format}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Cf}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Cf}"
+);
+testPropertyEscapes(
+ /^\p{gc=Format}+$/u,
+ matchSymbols,
+ "\\p{gc=Format}"
+);
+testPropertyEscapes(
+ /^\p{gc=Cf}+$/u,
+ matchSymbols,
+ "\\p{gc=Cf}"
+);
+testPropertyEscapes(
+ /^\p{Format}+$/u,
+ matchSymbols,
+ "\\p{Format}"
+);
+testPropertyEscapes(
+ /^\p{Cf}+$/u,
+ matchSymbols,
+ "\\p{Cf}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x002065
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0000AC],
+ [0x0000AE, 0x0005FF],
+ [0x000606, 0x00061B],
+ [0x00061D, 0x0006DC],
+ [0x0006DE, 0x00070E],
+ [0x000710, 0x00088F],
+ [0x000892, 0x0008E1],
+ [0x0008E3, 0x00180D],
+ [0x00180F, 0x00200A],
+ [0x002010, 0x002029],
+ [0x00202F, 0x00205F],
+ [0x002070, 0x00DBFF],
+ [0x00E000, 0x00FEFE],
+ [0x00FF00, 0x00FFF8],
+ [0x00FFFC, 0x0110BC],
+ [0x0110BE, 0x0110CC],
+ [0x0110CE, 0x01342F],
+ [0x013440, 0x01BC9F],
+ [0x01BCA4, 0x01D172],
+ [0x01D17B, 0x0E0000],
+ [0x0E0002, 0x0E001F],
+ [0x0E0080, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Format}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Format}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Cf}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Cf}"
+);
+testPropertyEscapes(
+ /^\P{gc=Format}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Format}"
+);
+testPropertyEscapes(
+ /^\P{gc=Cf}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Cf}"
+);
+testPropertyEscapes(
+ /^\P{Format}+$/u,
+ nonMatchSymbols,
+ "\\P{Format}"
+);
+testPropertyEscapes(
+ /^\P{Cf}+$/u,
+ nonMatchSymbols,
+ "\\P{Cf}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Initial_Punctuation.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Initial_Punctuation.js
new file mode 100644
index 0000000000..98287d82bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Initial_Punctuation.js
@@ -0,0 +1,115 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Initial_Punctuation`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000AB,
+ 0x002018,
+ 0x00201F,
+ 0x002039,
+ 0x002E02,
+ 0x002E04,
+ 0x002E09,
+ 0x002E0C,
+ 0x002E1C,
+ 0x002E20
+ ],
+ ranges: [
+ [0x00201B, 0x00201C]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Initial_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Initial_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Pi}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Pi}"
+);
+testPropertyEscapes(
+ /^\p{gc=Initial_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{gc=Initial_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{gc=Pi}+$/u,
+ matchSymbols,
+ "\\p{gc=Pi}"
+);
+testPropertyEscapes(
+ /^\p{Initial_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{Initial_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{Pi}+$/u,
+ matchSymbols,
+ "\\p{Pi}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x002E03
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0000AA],
+ [0x0000AC, 0x002017],
+ [0x002019, 0x00201A],
+ [0x00201D, 0x00201E],
+ [0x002020, 0x002038],
+ [0x00203A, 0x002E01],
+ [0x002E05, 0x002E08],
+ [0x002E0A, 0x002E0B],
+ [0x002E0D, 0x002E1B],
+ [0x002E1D, 0x002E1F],
+ [0x002E21, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Initial_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Initial_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Pi}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Pi}"
+);
+testPropertyEscapes(
+ /^\P{gc=Initial_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Initial_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{gc=Pi}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Pi}"
+);
+testPropertyEscapes(
+ /^\P{Initial_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{Initial_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{Pi}+$/u,
+ nonMatchSymbols,
+ "\\P{Pi}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Letter.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Letter.js
new file mode 100644
index 0000000000..02ac0d31f1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Letter.js
@@ -0,0 +1,1411 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Letter`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000AA,
+ 0x0000B5,
+ 0x0000BA,
+ 0x0002EC,
+ 0x0002EE,
+ 0x00037F,
+ 0x000386,
+ 0x00038C,
+ 0x000559,
+ 0x0006D5,
+ 0x0006FF,
+ 0x000710,
+ 0x0007B1,
+ 0x0007FA,
+ 0x00081A,
+ 0x000824,
+ 0x000828,
+ 0x00093D,
+ 0x000950,
+ 0x0009B2,
+ 0x0009BD,
+ 0x0009CE,
+ 0x0009FC,
+ 0x000A5E,
+ 0x000ABD,
+ 0x000AD0,
+ 0x000AF9,
+ 0x000B3D,
+ 0x000B71,
+ 0x000B83,
+ 0x000B9C,
+ 0x000BD0,
+ 0x000C3D,
+ 0x000C5D,
+ 0x000C80,
+ 0x000CBD,
+ 0x000D3D,
+ 0x000D4E,
+ 0x000DBD,
+ 0x000E84,
+ 0x000EA5,
+ 0x000EBD,
+ 0x000EC6,
+ 0x000F00,
+ 0x00103F,
+ 0x001061,
+ 0x00108E,
+ 0x0010C7,
+ 0x0010CD,
+ 0x001258,
+ 0x0012C0,
+ 0x0017D7,
+ 0x0017DC,
+ 0x0018AA,
+ 0x001AA7,
+ 0x001CFA,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x001FBE,
+ 0x002071,
+ 0x00207F,
+ 0x002102,
+ 0x002107,
+ 0x002115,
+ 0x002124,
+ 0x002126,
+ 0x002128,
+ 0x00214E,
+ 0x002D27,
+ 0x002D2D,
+ 0x002D6F,
+ 0x002E2F,
+ 0x00A7D3,
+ 0x00A8FB,
+ 0x00A9CF,
+ 0x00AA7A,
+ 0x00AAB1,
+ 0x00AAC0,
+ 0x00AAC2,
+ 0x00FB1D,
+ 0x00FB3E,
+ 0x010808,
+ 0x01083C,
+ 0x010A00,
+ 0x010F27,
+ 0x011075,
+ 0x011144,
+ 0x011147,
+ 0x011176,
+ 0x0111DA,
+ 0x0111DC,
+ 0x011288,
+ 0x01133D,
+ 0x011350,
+ 0x0114C7,
+ 0x011644,
+ 0x0116B8,
+ 0x011909,
+ 0x01193F,
+ 0x011941,
+ 0x0119E1,
+ 0x0119E3,
+ 0x011A00,
+ 0x011A3A,
+ 0x011A50,
+ 0x011A9D,
+ 0x011C40,
+ 0x011D46,
+ 0x011D98,
+ 0x011F02,
+ 0x011FB0,
+ 0x016F50,
+ 0x016FE3,
+ 0x01B132,
+ 0x01B155,
+ 0x01D4A2,
+ 0x01D4BB,
+ 0x01D546,
+ 0x01E14E,
+ 0x01E94B,
+ 0x01EE24,
+ 0x01EE27,
+ 0x01EE39,
+ 0x01EE3B,
+ 0x01EE42,
+ 0x01EE47,
+ 0x01EE49,
+ 0x01EE4B,
+ 0x01EE54,
+ 0x01EE57,
+ 0x01EE59,
+ 0x01EE5B,
+ 0x01EE5D,
+ 0x01EE5F,
+ 0x01EE64,
+ 0x01EE7E
+ ],
+ ranges: [
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000F6],
+ [0x0000F8, 0x0002C1],
+ [0x0002C6, 0x0002D1],
+ [0x0002E0, 0x0002E4],
+ [0x000370, 0x000374],
+ [0x000376, 0x000377],
+ [0x00037A, 0x00037D],
+ [0x000388, 0x00038A],
+ [0x00038E, 0x0003A1],
+ [0x0003A3, 0x0003F5],
+ [0x0003F7, 0x000481],
+ [0x00048A, 0x00052F],
+ [0x000531, 0x000556],
+ [0x000560, 0x000588],
+ [0x0005D0, 0x0005EA],
+ [0x0005EF, 0x0005F2],
+ [0x000620, 0x00064A],
+ [0x00066E, 0x00066F],
+ [0x000671, 0x0006D3],
+ [0x0006E5, 0x0006E6],
+ [0x0006EE, 0x0006EF],
+ [0x0006FA, 0x0006FC],
+ [0x000712, 0x00072F],
+ [0x00074D, 0x0007A5],
+ [0x0007CA, 0x0007EA],
+ [0x0007F4, 0x0007F5],
+ [0x000800, 0x000815],
+ [0x000840, 0x000858],
+ [0x000860, 0x00086A],
+ [0x000870, 0x000887],
+ [0x000889, 0x00088E],
+ [0x0008A0, 0x0008C9],
+ [0x000904, 0x000939],
+ [0x000958, 0x000961],
+ [0x000971, 0x000980],
+ [0x000985, 0x00098C],
+ [0x00098F, 0x000990],
+ [0x000993, 0x0009A8],
+ [0x0009AA, 0x0009B0],
+ [0x0009B6, 0x0009B9],
+ [0x0009DC, 0x0009DD],
+ [0x0009DF, 0x0009E1],
+ [0x0009F0, 0x0009F1],
+ [0x000A05, 0x000A0A],
+ [0x000A0F, 0x000A10],
+ [0x000A13, 0x000A28],
+ [0x000A2A, 0x000A30],
+ [0x000A32, 0x000A33],
+ [0x000A35, 0x000A36],
+ [0x000A38, 0x000A39],
+ [0x000A59, 0x000A5C],
+ [0x000A72, 0x000A74],
+ [0x000A85, 0x000A8D],
+ [0x000A8F, 0x000A91],
+ [0x000A93, 0x000AA8],
+ [0x000AAA, 0x000AB0],
+ [0x000AB2, 0x000AB3],
+ [0x000AB5, 0x000AB9],
+ [0x000AE0, 0x000AE1],
+ [0x000B05, 0x000B0C],
+ [0x000B0F, 0x000B10],
+ [0x000B13, 0x000B28],
+ [0x000B2A, 0x000B30],
+ [0x000B32, 0x000B33],
+ [0x000B35, 0x000B39],
+ [0x000B5C, 0x000B5D],
+ [0x000B5F, 0x000B61],
+ [0x000B85, 0x000B8A],
+ [0x000B8E, 0x000B90],
+ [0x000B92, 0x000B95],
+ [0x000B99, 0x000B9A],
+ [0x000B9E, 0x000B9F],
+ [0x000BA3, 0x000BA4],
+ [0x000BA8, 0x000BAA],
+ [0x000BAE, 0x000BB9],
+ [0x000C05, 0x000C0C],
+ [0x000C0E, 0x000C10],
+ [0x000C12, 0x000C28],
+ [0x000C2A, 0x000C39],
+ [0x000C58, 0x000C5A],
+ [0x000C60, 0x000C61],
+ [0x000C85, 0x000C8C],
+ [0x000C8E, 0x000C90],
+ [0x000C92, 0x000CA8],
+ [0x000CAA, 0x000CB3],
+ [0x000CB5, 0x000CB9],
+ [0x000CDD, 0x000CDE],
+ [0x000CE0, 0x000CE1],
+ [0x000CF1, 0x000CF2],
+ [0x000D04, 0x000D0C],
+ [0x000D0E, 0x000D10],
+ [0x000D12, 0x000D3A],
+ [0x000D54, 0x000D56],
+ [0x000D5F, 0x000D61],
+ [0x000D7A, 0x000D7F],
+ [0x000D85, 0x000D96],
+ [0x000D9A, 0x000DB1],
+ [0x000DB3, 0x000DBB],
+ [0x000DC0, 0x000DC6],
+ [0x000E01, 0x000E30],
+ [0x000E32, 0x000E33],
+ [0x000E40, 0x000E46],
+ [0x000E81, 0x000E82],
+ [0x000E86, 0x000E8A],
+ [0x000E8C, 0x000EA3],
+ [0x000EA7, 0x000EB0],
+ [0x000EB2, 0x000EB3],
+ [0x000EC0, 0x000EC4],
+ [0x000EDC, 0x000EDF],
+ [0x000F40, 0x000F47],
+ [0x000F49, 0x000F6C],
+ [0x000F88, 0x000F8C],
+ [0x001000, 0x00102A],
+ [0x001050, 0x001055],
+ [0x00105A, 0x00105D],
+ [0x001065, 0x001066],
+ [0x00106E, 0x001070],
+ [0x001075, 0x001081],
+ [0x0010A0, 0x0010C5],
+ [0x0010D0, 0x0010FA],
+ [0x0010FC, 0x001248],
+ [0x00124A, 0x00124D],
+ [0x001250, 0x001256],
+ [0x00125A, 0x00125D],
+ [0x001260, 0x001288],
+ [0x00128A, 0x00128D],
+ [0x001290, 0x0012B0],
+ [0x0012B2, 0x0012B5],
+ [0x0012B8, 0x0012BE],
+ [0x0012C2, 0x0012C5],
+ [0x0012C8, 0x0012D6],
+ [0x0012D8, 0x001310],
+ [0x001312, 0x001315],
+ [0x001318, 0x00135A],
+ [0x001380, 0x00138F],
+ [0x0013A0, 0x0013F5],
+ [0x0013F8, 0x0013FD],
+ [0x001401, 0x00166C],
+ [0x00166F, 0x00167F],
+ [0x001681, 0x00169A],
+ [0x0016A0, 0x0016EA],
+ [0x0016F1, 0x0016F8],
+ [0x001700, 0x001711],
+ [0x00171F, 0x001731],
+ [0x001740, 0x001751],
+ [0x001760, 0x00176C],
+ [0x00176E, 0x001770],
+ [0x001780, 0x0017B3],
+ [0x001820, 0x001878],
+ [0x001880, 0x001884],
+ [0x001887, 0x0018A8],
+ [0x0018B0, 0x0018F5],
+ [0x001900, 0x00191E],
+ [0x001950, 0x00196D],
+ [0x001970, 0x001974],
+ [0x001980, 0x0019AB],
+ [0x0019B0, 0x0019C9],
+ [0x001A00, 0x001A16],
+ [0x001A20, 0x001A54],
+ [0x001B05, 0x001B33],
+ [0x001B45, 0x001B4C],
+ [0x001B83, 0x001BA0],
+ [0x001BAE, 0x001BAF],
+ [0x001BBA, 0x001BE5],
+ [0x001C00, 0x001C23],
+ [0x001C4D, 0x001C4F],
+ [0x001C5A, 0x001C7D],
+ [0x001C80, 0x001C88],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CBF],
+ [0x001CE9, 0x001CEC],
+ [0x001CEE, 0x001CF3],
+ [0x001CF5, 0x001CF6],
+ [0x001D00, 0x001DBF],
+ [0x001E00, 0x001F15],
+ [0x001F18, 0x001F1D],
+ [0x001F20, 0x001F45],
+ [0x001F48, 0x001F4D],
+ [0x001F50, 0x001F57],
+ [0x001F5F, 0x001F7D],
+ [0x001F80, 0x001FB4],
+ [0x001FB6, 0x001FBC],
+ [0x001FC2, 0x001FC4],
+ [0x001FC6, 0x001FCC],
+ [0x001FD0, 0x001FD3],
+ [0x001FD6, 0x001FDB],
+ [0x001FE0, 0x001FEC],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FFC],
+ [0x002090, 0x00209C],
+ [0x00210A, 0x002113],
+ [0x002119, 0x00211D],
+ [0x00212A, 0x00212D],
+ [0x00212F, 0x002139],
+ [0x00213C, 0x00213F],
+ [0x002145, 0x002149],
+ [0x002183, 0x002184],
+ [0x002C00, 0x002CE4],
+ [0x002CEB, 0x002CEE],
+ [0x002CF2, 0x002CF3],
+ [0x002D00, 0x002D25],
+ [0x002D30, 0x002D67],
+ [0x002D80, 0x002D96],
+ [0x002DA0, 0x002DA6],
+ [0x002DA8, 0x002DAE],
+ [0x002DB0, 0x002DB6],
+ [0x002DB8, 0x002DBE],
+ [0x002DC0, 0x002DC6],
+ [0x002DC8, 0x002DCE],
+ [0x002DD0, 0x002DD6],
+ [0x002DD8, 0x002DDE],
+ [0x003005, 0x003006],
+ [0x003031, 0x003035],
+ [0x00303B, 0x00303C],
+ [0x003041, 0x003096],
+ [0x00309D, 0x00309F],
+ [0x0030A1, 0x0030FA],
+ [0x0030FC, 0x0030FF],
+ [0x003105, 0x00312F],
+ [0x003131, 0x00318E],
+ [0x0031A0, 0x0031BF],
+ [0x0031F0, 0x0031FF],
+ [0x003400, 0x004DBF],
+ [0x004E00, 0x00A48C],
+ [0x00A4D0, 0x00A4FD],
+ [0x00A500, 0x00A60C],
+ [0x00A610, 0x00A61F],
+ [0x00A62A, 0x00A62B],
+ [0x00A640, 0x00A66E],
+ [0x00A67F, 0x00A69D],
+ [0x00A6A0, 0x00A6E5],
+ [0x00A717, 0x00A71F],
+ [0x00A722, 0x00A788],
+ [0x00A78B, 0x00A7CA],
+ [0x00A7D0, 0x00A7D1],
+ [0x00A7D5, 0x00A7D9],
+ [0x00A7F2, 0x00A801],
+ [0x00A803, 0x00A805],
+ [0x00A807, 0x00A80A],
+ [0x00A80C, 0x00A822],
+ [0x00A840, 0x00A873],
+ [0x00A882, 0x00A8B3],
+ [0x00A8F2, 0x00A8F7],
+ [0x00A8FD, 0x00A8FE],
+ [0x00A90A, 0x00A925],
+ [0x00A930, 0x00A946],
+ [0x00A960, 0x00A97C],
+ [0x00A984, 0x00A9B2],
+ [0x00A9E0, 0x00A9E4],
+ [0x00A9E6, 0x00A9EF],
+ [0x00A9FA, 0x00A9FE],
+ [0x00AA00, 0x00AA28],
+ [0x00AA40, 0x00AA42],
+ [0x00AA44, 0x00AA4B],
+ [0x00AA60, 0x00AA76],
+ [0x00AA7E, 0x00AAAF],
+ [0x00AAB5, 0x00AAB6],
+ [0x00AAB9, 0x00AABD],
+ [0x00AADB, 0x00AADD],
+ [0x00AAE0, 0x00AAEA],
+ [0x00AAF2, 0x00AAF4],
+ [0x00AB01, 0x00AB06],
+ [0x00AB09, 0x00AB0E],
+ [0x00AB11, 0x00AB16],
+ [0x00AB20, 0x00AB26],
+ [0x00AB28, 0x00AB2E],
+ [0x00AB30, 0x00AB5A],
+ [0x00AB5C, 0x00AB69],
+ [0x00AB70, 0x00ABE2],
+ [0x00AC00, 0x00D7A3],
+ [0x00D7B0, 0x00D7C6],
+ [0x00D7CB, 0x00D7FB],
+ [0x00F900, 0x00FA6D],
+ [0x00FA70, 0x00FAD9],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FB1F, 0x00FB28],
+ [0x00FB2A, 0x00FB36],
+ [0x00FB38, 0x00FB3C],
+ [0x00FB40, 0x00FB41],
+ [0x00FB43, 0x00FB44],
+ [0x00FB46, 0x00FBB1],
+ [0x00FBD3, 0x00FD3D],
+ [0x00FD50, 0x00FD8F],
+ [0x00FD92, 0x00FDC7],
+ [0x00FDF0, 0x00FDFB],
+ [0x00FE70, 0x00FE74],
+ [0x00FE76, 0x00FEFC],
+ [0x00FF21, 0x00FF3A],
+ [0x00FF41, 0x00FF5A],
+ [0x00FF66, 0x00FFBE],
+ [0x00FFC2, 0x00FFC7],
+ [0x00FFCA, 0x00FFCF],
+ [0x00FFD2, 0x00FFD7],
+ [0x00FFDA, 0x00FFDC],
+ [0x010000, 0x01000B],
+ [0x01000D, 0x010026],
+ [0x010028, 0x01003A],
+ [0x01003C, 0x01003D],
+ [0x01003F, 0x01004D],
+ [0x010050, 0x01005D],
+ [0x010080, 0x0100FA],
+ [0x010280, 0x01029C],
+ [0x0102A0, 0x0102D0],
+ [0x010300, 0x01031F],
+ [0x01032D, 0x010340],
+ [0x010342, 0x010349],
+ [0x010350, 0x010375],
+ [0x010380, 0x01039D],
+ [0x0103A0, 0x0103C3],
+ [0x0103C8, 0x0103CF],
+ [0x010400, 0x01049D],
+ [0x0104B0, 0x0104D3],
+ [0x0104D8, 0x0104FB],
+ [0x010500, 0x010527],
+ [0x010530, 0x010563],
+ [0x010570, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC],
+ [0x010600, 0x010736],
+ [0x010740, 0x010755],
+ [0x010760, 0x010767],
+ [0x010780, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x010800, 0x010805],
+ [0x01080A, 0x010835],
+ [0x010837, 0x010838],
+ [0x01083F, 0x010855],
+ [0x010860, 0x010876],
+ [0x010880, 0x01089E],
+ [0x0108E0, 0x0108F2],
+ [0x0108F4, 0x0108F5],
+ [0x010900, 0x010915],
+ [0x010920, 0x010939],
+ [0x010980, 0x0109B7],
+ [0x0109BE, 0x0109BF],
+ [0x010A10, 0x010A13],
+ [0x010A15, 0x010A17],
+ [0x010A19, 0x010A35],
+ [0x010A60, 0x010A7C],
+ [0x010A80, 0x010A9C],
+ [0x010AC0, 0x010AC7],
+ [0x010AC9, 0x010AE4],
+ [0x010B00, 0x010B35],
+ [0x010B40, 0x010B55],
+ [0x010B60, 0x010B72],
+ [0x010B80, 0x010B91],
+ [0x010C00, 0x010C48],
+ [0x010C80, 0x010CB2],
+ [0x010CC0, 0x010CF2],
+ [0x010D00, 0x010D23],
+ [0x010E80, 0x010EA9],
+ [0x010EB0, 0x010EB1],
+ [0x010F00, 0x010F1C],
+ [0x010F30, 0x010F45],
+ [0x010F70, 0x010F81],
+ [0x010FB0, 0x010FC4],
+ [0x010FE0, 0x010FF6],
+ [0x011003, 0x011037],
+ [0x011071, 0x011072],
+ [0x011083, 0x0110AF],
+ [0x0110D0, 0x0110E8],
+ [0x011103, 0x011126],
+ [0x011150, 0x011172],
+ [0x011183, 0x0111B2],
+ [0x0111C1, 0x0111C4],
+ [0x011200, 0x011211],
+ [0x011213, 0x01122B],
+ [0x01123F, 0x011240],
+ [0x011280, 0x011286],
+ [0x01128A, 0x01128D],
+ [0x01128F, 0x01129D],
+ [0x01129F, 0x0112A8],
+ [0x0112B0, 0x0112DE],
+ [0x011305, 0x01130C],
+ [0x01130F, 0x011310],
+ [0x011313, 0x011328],
+ [0x01132A, 0x011330],
+ [0x011332, 0x011333],
+ [0x011335, 0x011339],
+ [0x01135D, 0x011361],
+ [0x011400, 0x011434],
+ [0x011447, 0x01144A],
+ [0x01145F, 0x011461],
+ [0x011480, 0x0114AF],
+ [0x0114C4, 0x0114C5],
+ [0x011580, 0x0115AE],
+ [0x0115D8, 0x0115DB],
+ [0x011600, 0x01162F],
+ [0x011680, 0x0116AA],
+ [0x011700, 0x01171A],
+ [0x011740, 0x011746],
+ [0x011800, 0x01182B],
+ [0x0118A0, 0x0118DF],
+ [0x0118FF, 0x011906],
+ [0x01190C, 0x011913],
+ [0x011915, 0x011916],
+ [0x011918, 0x01192F],
+ [0x0119A0, 0x0119A7],
+ [0x0119AA, 0x0119D0],
+ [0x011A0B, 0x011A32],
+ [0x011A5C, 0x011A89],
+ [0x011AB0, 0x011AF8],
+ [0x011C00, 0x011C08],
+ [0x011C0A, 0x011C2E],
+ [0x011C72, 0x011C8F],
+ [0x011D00, 0x011D06],
+ [0x011D08, 0x011D09],
+ [0x011D0B, 0x011D30],
+ [0x011D60, 0x011D65],
+ [0x011D67, 0x011D68],
+ [0x011D6A, 0x011D89],
+ [0x011EE0, 0x011EF2],
+ [0x011F04, 0x011F10],
+ [0x011F12, 0x011F33],
+ [0x012000, 0x012399],
+ [0x012480, 0x012543],
+ [0x012F90, 0x012FF0],
+ [0x013000, 0x01342F],
+ [0x013441, 0x013446],
+ [0x014400, 0x014646],
+ [0x016800, 0x016A38],
+ [0x016A40, 0x016A5E],
+ [0x016A70, 0x016ABE],
+ [0x016AD0, 0x016AED],
+ [0x016B00, 0x016B2F],
+ [0x016B40, 0x016B43],
+ [0x016B63, 0x016B77],
+ [0x016B7D, 0x016B8F],
+ [0x016E40, 0x016E7F],
+ [0x016F00, 0x016F4A],
+ [0x016F93, 0x016F9F],
+ [0x016FE0, 0x016FE1],
+ [0x017000, 0x0187F7],
+ [0x018800, 0x018CD5],
+ [0x018D00, 0x018D08],
+ [0x01AFF0, 0x01AFF3],
+ [0x01AFF5, 0x01AFFB],
+ [0x01AFFD, 0x01AFFE],
+ [0x01B000, 0x01B122],
+ [0x01B150, 0x01B152],
+ [0x01B164, 0x01B167],
+ [0x01B170, 0x01B2FB],
+ [0x01BC00, 0x01BC6A],
+ [0x01BC70, 0x01BC7C],
+ [0x01BC80, 0x01BC88],
+ [0x01BC90, 0x01BC99],
+ [0x01D400, 0x01D454],
+ [0x01D456, 0x01D49C],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D51E, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D552, 0x01D6A5],
+ [0x01D6A8, 0x01D6C0],
+ [0x01D6C2, 0x01D6DA],
+ [0x01D6DC, 0x01D6FA],
+ [0x01D6FC, 0x01D714],
+ [0x01D716, 0x01D734],
+ [0x01D736, 0x01D74E],
+ [0x01D750, 0x01D76E],
+ [0x01D770, 0x01D788],
+ [0x01D78A, 0x01D7A8],
+ [0x01D7AA, 0x01D7C2],
+ [0x01D7C4, 0x01D7CB],
+ [0x01DF00, 0x01DF1E],
+ [0x01DF25, 0x01DF2A],
+ [0x01E030, 0x01E06D],
+ [0x01E100, 0x01E12C],
+ [0x01E137, 0x01E13D],
+ [0x01E290, 0x01E2AD],
+ [0x01E2C0, 0x01E2EB],
+ [0x01E4D0, 0x01E4EB],
+ [0x01E7E0, 0x01E7E6],
+ [0x01E7E8, 0x01E7EB],
+ [0x01E7ED, 0x01E7EE],
+ [0x01E7F0, 0x01E7FE],
+ [0x01E800, 0x01E8C4],
+ [0x01E900, 0x01E943],
+ [0x01EE00, 0x01EE03],
+ [0x01EE05, 0x01EE1F],
+ [0x01EE21, 0x01EE22],
+ [0x01EE29, 0x01EE32],
+ [0x01EE34, 0x01EE37],
+ [0x01EE4D, 0x01EE4F],
+ [0x01EE51, 0x01EE52],
+ [0x01EE61, 0x01EE62],
+ [0x01EE67, 0x01EE6A],
+ [0x01EE6C, 0x01EE72],
+ [0x01EE74, 0x01EE77],
+ [0x01EE79, 0x01EE7C],
+ [0x01EE80, 0x01EE89],
+ [0x01EE8B, 0x01EE9B],
+ [0x01EEA1, 0x01EEA3],
+ [0x01EEA5, 0x01EEA9],
+ [0x01EEAB, 0x01EEBB],
+ [0x020000, 0x02A6DF],
+ [0x02A700, 0x02B739],
+ [0x02B740, 0x02B81D],
+ [0x02B820, 0x02CEA1],
+ [0x02CEB0, 0x02EBE0],
+ [0x02F800, 0x02FA1D],
+ [0x030000, 0x03134A],
+ [0x031350, 0x0323AF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Letter}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Letter}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=L}+$/u,
+ matchSymbols,
+ "\\p{General_Category=L}"
+);
+testPropertyEscapes(
+ /^\p{gc=Letter}+$/u,
+ matchSymbols,
+ "\\p{gc=Letter}"
+);
+testPropertyEscapes(
+ /^\p{gc=L}+$/u,
+ matchSymbols,
+ "\\p{gc=L}"
+);
+testPropertyEscapes(
+ /^\p{Letter}+$/u,
+ matchSymbols,
+ "\\p{Letter}"
+);
+testPropertyEscapes(
+ /^\p{L}+$/u,
+ matchSymbols,
+ "\\p{L}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000D7,
+ 0x0000F7,
+ 0x0002ED,
+ 0x000375,
+ 0x00037E,
+ 0x000387,
+ 0x00038B,
+ 0x00038D,
+ 0x0003A2,
+ 0x0003F6,
+ 0x000530,
+ 0x000670,
+ 0x0006D4,
+ 0x000711,
+ 0x000888,
+ 0x0009A9,
+ 0x0009B1,
+ 0x0009DE,
+ 0x000A29,
+ 0x000A31,
+ 0x000A34,
+ 0x000A37,
+ 0x000A5D,
+ 0x000A8E,
+ 0x000A92,
+ 0x000AA9,
+ 0x000AB1,
+ 0x000AB4,
+ 0x000B29,
+ 0x000B31,
+ 0x000B34,
+ 0x000B5E,
+ 0x000B84,
+ 0x000B91,
+ 0x000B9B,
+ 0x000B9D,
+ 0x000C0D,
+ 0x000C11,
+ 0x000C29,
+ 0x000C8D,
+ 0x000C91,
+ 0x000CA9,
+ 0x000CB4,
+ 0x000CDF,
+ 0x000D0D,
+ 0x000D11,
+ 0x000DB2,
+ 0x000DBC,
+ 0x000E31,
+ 0x000E83,
+ 0x000E85,
+ 0x000E8B,
+ 0x000EA4,
+ 0x000EA6,
+ 0x000EB1,
+ 0x000EC5,
+ 0x000F48,
+ 0x0010C6,
+ 0x0010FB,
+ 0x001249,
+ 0x001257,
+ 0x001259,
+ 0x001289,
+ 0x0012B1,
+ 0x0012BF,
+ 0x0012C1,
+ 0x0012D7,
+ 0x001311,
+ 0x001680,
+ 0x00176D,
+ 0x0018A9,
+ 0x001CED,
+ 0x001CF4,
+ 0x001F58,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x001FB5,
+ 0x001FBD,
+ 0x001FC5,
+ 0x001FF5,
+ 0x002114,
+ 0x002125,
+ 0x002127,
+ 0x002129,
+ 0x00212E,
+ 0x002D26,
+ 0x002DA7,
+ 0x002DAF,
+ 0x002DB7,
+ 0x002DBF,
+ 0x002DC7,
+ 0x002DCF,
+ 0x002DD7,
+ 0x0030A0,
+ 0x0030FB,
+ 0x003130,
+ 0x00A7D2,
+ 0x00A7D4,
+ 0x00A802,
+ 0x00A806,
+ 0x00A80B,
+ 0x00A8FC,
+ 0x00A9E5,
+ 0x00A9FF,
+ 0x00AA43,
+ 0x00AAB0,
+ 0x00AAC1,
+ 0x00AB27,
+ 0x00AB2F,
+ 0x00AB5B,
+ 0x00FB1E,
+ 0x00FB29,
+ 0x00FB37,
+ 0x00FB3D,
+ 0x00FB3F,
+ 0x00FB42,
+ 0x00FB45,
+ 0x00FE75,
+ 0x01000C,
+ 0x010027,
+ 0x01003B,
+ 0x01003E,
+ 0x010341,
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x010596,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA,
+ 0x010786,
+ 0x0107B1,
+ 0x010809,
+ 0x010836,
+ 0x0108F3,
+ 0x010A14,
+ 0x010A18,
+ 0x010AC8,
+ 0x0111DB,
+ 0x011212,
+ 0x011287,
+ 0x011289,
+ 0x01128E,
+ 0x01129E,
+ 0x011329,
+ 0x011331,
+ 0x011334,
+ 0x0114C6,
+ 0x011914,
+ 0x011917,
+ 0x011940,
+ 0x0119E2,
+ 0x011C09,
+ 0x011D07,
+ 0x011D0A,
+ 0x011D66,
+ 0x011D69,
+ 0x011F03,
+ 0x011F11,
+ 0x016FE2,
+ 0x01AFF4,
+ 0x01AFFC,
+ 0x01AFFF,
+ 0x01D455,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D506,
+ 0x01D515,
+ 0x01D51D,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545,
+ 0x01D551,
+ 0x01D6C1,
+ 0x01D6DB,
+ 0x01D6FB,
+ 0x01D715,
+ 0x01D735,
+ 0x01D74F,
+ 0x01D76F,
+ 0x01D789,
+ 0x01D7A9,
+ 0x01D7C3,
+ 0x01E7E7,
+ 0x01E7EC,
+ 0x01E7EF,
+ 0x01E7FF,
+ 0x01EE04,
+ 0x01EE20,
+ 0x01EE23,
+ 0x01EE28,
+ 0x01EE33,
+ 0x01EE38,
+ 0x01EE3A,
+ 0x01EE48,
+ 0x01EE4A,
+ 0x01EE4C,
+ 0x01EE50,
+ 0x01EE53,
+ 0x01EE58,
+ 0x01EE5A,
+ 0x01EE5C,
+ 0x01EE5E,
+ 0x01EE60,
+ 0x01EE63,
+ 0x01EE6B,
+ 0x01EE73,
+ 0x01EE78,
+ 0x01EE7D,
+ 0x01EE7F,
+ 0x01EE8A,
+ 0x01EEA4,
+ 0x01EEAA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000040],
+ [0x00005B, 0x000060],
+ [0x00007B, 0x0000A9],
+ [0x0000AB, 0x0000B4],
+ [0x0000B6, 0x0000B9],
+ [0x0000BB, 0x0000BF],
+ [0x0002C2, 0x0002C5],
+ [0x0002D2, 0x0002DF],
+ [0x0002E5, 0x0002EB],
+ [0x0002EF, 0x00036F],
+ [0x000378, 0x000379],
+ [0x000380, 0x000385],
+ [0x000482, 0x000489],
+ [0x000557, 0x000558],
+ [0x00055A, 0x00055F],
+ [0x000589, 0x0005CF],
+ [0x0005EB, 0x0005EE],
+ [0x0005F3, 0x00061F],
+ [0x00064B, 0x00066D],
+ [0x0006D6, 0x0006E4],
+ [0x0006E7, 0x0006ED],
+ [0x0006F0, 0x0006F9],
+ [0x0006FD, 0x0006FE],
+ [0x000700, 0x00070F],
+ [0x000730, 0x00074C],
+ [0x0007A6, 0x0007B0],
+ [0x0007B2, 0x0007C9],
+ [0x0007EB, 0x0007F3],
+ [0x0007F6, 0x0007F9],
+ [0x0007FB, 0x0007FF],
+ [0x000816, 0x000819],
+ [0x00081B, 0x000823],
+ [0x000825, 0x000827],
+ [0x000829, 0x00083F],
+ [0x000859, 0x00085F],
+ [0x00086B, 0x00086F],
+ [0x00088F, 0x00089F],
+ [0x0008CA, 0x000903],
+ [0x00093A, 0x00093C],
+ [0x00093E, 0x00094F],
+ [0x000951, 0x000957],
+ [0x000962, 0x000970],
+ [0x000981, 0x000984],
+ [0x00098D, 0x00098E],
+ [0x000991, 0x000992],
+ [0x0009B3, 0x0009B5],
+ [0x0009BA, 0x0009BC],
+ [0x0009BE, 0x0009CD],
+ [0x0009CF, 0x0009DB],
+ [0x0009E2, 0x0009EF],
+ [0x0009F2, 0x0009FB],
+ [0x0009FD, 0x000A04],
+ [0x000A0B, 0x000A0E],
+ [0x000A11, 0x000A12],
+ [0x000A3A, 0x000A58],
+ [0x000A5F, 0x000A71],
+ [0x000A75, 0x000A84],
+ [0x000ABA, 0x000ABC],
+ [0x000ABE, 0x000ACF],
+ [0x000AD1, 0x000ADF],
+ [0x000AE2, 0x000AF8],
+ [0x000AFA, 0x000B04],
+ [0x000B0D, 0x000B0E],
+ [0x000B11, 0x000B12],
+ [0x000B3A, 0x000B3C],
+ [0x000B3E, 0x000B5B],
+ [0x000B62, 0x000B70],
+ [0x000B72, 0x000B82],
+ [0x000B8B, 0x000B8D],
+ [0x000B96, 0x000B98],
+ [0x000BA0, 0x000BA2],
+ [0x000BA5, 0x000BA7],
+ [0x000BAB, 0x000BAD],
+ [0x000BBA, 0x000BCF],
+ [0x000BD1, 0x000C04],
+ [0x000C3A, 0x000C3C],
+ [0x000C3E, 0x000C57],
+ [0x000C5B, 0x000C5C],
+ [0x000C5E, 0x000C5F],
+ [0x000C62, 0x000C7F],
+ [0x000C81, 0x000C84],
+ [0x000CBA, 0x000CBC],
+ [0x000CBE, 0x000CDC],
+ [0x000CE2, 0x000CF0],
+ [0x000CF3, 0x000D03],
+ [0x000D3B, 0x000D3C],
+ [0x000D3E, 0x000D4D],
+ [0x000D4F, 0x000D53],
+ [0x000D57, 0x000D5E],
+ [0x000D62, 0x000D79],
+ [0x000D80, 0x000D84],
+ [0x000D97, 0x000D99],
+ [0x000DBE, 0x000DBF],
+ [0x000DC7, 0x000E00],
+ [0x000E34, 0x000E3F],
+ [0x000E47, 0x000E80],
+ [0x000EB4, 0x000EBC],
+ [0x000EBE, 0x000EBF],
+ [0x000EC7, 0x000EDB],
+ [0x000EE0, 0x000EFF],
+ [0x000F01, 0x000F3F],
+ [0x000F6D, 0x000F87],
+ [0x000F8D, 0x000FFF],
+ [0x00102B, 0x00103E],
+ [0x001040, 0x00104F],
+ [0x001056, 0x001059],
+ [0x00105E, 0x001060],
+ [0x001062, 0x001064],
+ [0x001067, 0x00106D],
+ [0x001071, 0x001074],
+ [0x001082, 0x00108D],
+ [0x00108F, 0x00109F],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x0010CF],
+ [0x00124E, 0x00124F],
+ [0x00125E, 0x00125F],
+ [0x00128E, 0x00128F],
+ [0x0012B6, 0x0012B7],
+ [0x0012C6, 0x0012C7],
+ [0x001316, 0x001317],
+ [0x00135B, 0x00137F],
+ [0x001390, 0x00139F],
+ [0x0013F6, 0x0013F7],
+ [0x0013FE, 0x001400],
+ [0x00166D, 0x00166E],
+ [0x00169B, 0x00169F],
+ [0x0016EB, 0x0016F0],
+ [0x0016F9, 0x0016FF],
+ [0x001712, 0x00171E],
+ [0x001732, 0x00173F],
+ [0x001752, 0x00175F],
+ [0x001771, 0x00177F],
+ [0x0017B4, 0x0017D6],
+ [0x0017D8, 0x0017DB],
+ [0x0017DD, 0x00181F],
+ [0x001879, 0x00187F],
+ [0x001885, 0x001886],
+ [0x0018AB, 0x0018AF],
+ [0x0018F6, 0x0018FF],
+ [0x00191F, 0x00194F],
+ [0x00196E, 0x00196F],
+ [0x001975, 0x00197F],
+ [0x0019AC, 0x0019AF],
+ [0x0019CA, 0x0019FF],
+ [0x001A17, 0x001A1F],
+ [0x001A55, 0x001AA6],
+ [0x001AA8, 0x001B04],
+ [0x001B34, 0x001B44],
+ [0x001B4D, 0x001B82],
+ [0x001BA1, 0x001BAD],
+ [0x001BB0, 0x001BB9],
+ [0x001BE6, 0x001BFF],
+ [0x001C24, 0x001C4C],
+ [0x001C50, 0x001C59],
+ [0x001C7E, 0x001C7F],
+ [0x001C89, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC0, 0x001CE8],
+ [0x001CF7, 0x001CF9],
+ [0x001CFB, 0x001CFF],
+ [0x001DC0, 0x001DFF],
+ [0x001F16, 0x001F17],
+ [0x001F1E, 0x001F1F],
+ [0x001F46, 0x001F47],
+ [0x001F4E, 0x001F4F],
+ [0x001F7E, 0x001F7F],
+ [0x001FBF, 0x001FC1],
+ [0x001FCD, 0x001FCF],
+ [0x001FD4, 0x001FD5],
+ [0x001FDC, 0x001FDF],
+ [0x001FED, 0x001FF1],
+ [0x001FFD, 0x002070],
+ [0x002072, 0x00207E],
+ [0x002080, 0x00208F],
+ [0x00209D, 0x002101],
+ [0x002103, 0x002106],
+ [0x002108, 0x002109],
+ [0x002116, 0x002118],
+ [0x00211E, 0x002123],
+ [0x00213A, 0x00213B],
+ [0x002140, 0x002144],
+ [0x00214A, 0x00214D],
+ [0x00214F, 0x002182],
+ [0x002185, 0x002BFF],
+ [0x002CE5, 0x002CEA],
+ [0x002CEF, 0x002CF1],
+ [0x002CF4, 0x002CFF],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x002D2F],
+ [0x002D68, 0x002D6E],
+ [0x002D70, 0x002D7F],
+ [0x002D97, 0x002D9F],
+ [0x002DDF, 0x002E2E],
+ [0x002E30, 0x003004],
+ [0x003007, 0x003030],
+ [0x003036, 0x00303A],
+ [0x00303D, 0x003040],
+ [0x003097, 0x00309C],
+ [0x003100, 0x003104],
+ [0x00318F, 0x00319F],
+ [0x0031C0, 0x0031EF],
+ [0x003200, 0x0033FF],
+ [0x004DC0, 0x004DFF],
+ [0x00A48D, 0x00A4CF],
+ [0x00A4FE, 0x00A4FF],
+ [0x00A60D, 0x00A60F],
+ [0x00A620, 0x00A629],
+ [0x00A62C, 0x00A63F],
+ [0x00A66F, 0x00A67E],
+ [0x00A69E, 0x00A69F],
+ [0x00A6E6, 0x00A716],
+ [0x00A720, 0x00A721],
+ [0x00A789, 0x00A78A],
+ [0x00A7CB, 0x00A7CF],
+ [0x00A7DA, 0x00A7F1],
+ [0x00A823, 0x00A83F],
+ [0x00A874, 0x00A881],
+ [0x00A8B4, 0x00A8F1],
+ [0x00A8F8, 0x00A8FA],
+ [0x00A8FF, 0x00A909],
+ [0x00A926, 0x00A92F],
+ [0x00A947, 0x00A95F],
+ [0x00A97D, 0x00A983],
+ [0x00A9B3, 0x00A9CE],
+ [0x00A9D0, 0x00A9DF],
+ [0x00A9F0, 0x00A9F9],
+ [0x00AA29, 0x00AA3F],
+ [0x00AA4C, 0x00AA5F],
+ [0x00AA77, 0x00AA79],
+ [0x00AA7B, 0x00AA7D],
+ [0x00AAB2, 0x00AAB4],
+ [0x00AAB7, 0x00AAB8],
+ [0x00AABE, 0x00AABF],
+ [0x00AAC3, 0x00AADA],
+ [0x00AADE, 0x00AADF],
+ [0x00AAEB, 0x00AAF1],
+ [0x00AAF5, 0x00AB00],
+ [0x00AB07, 0x00AB08],
+ [0x00AB0F, 0x00AB10],
+ [0x00AB17, 0x00AB1F],
+ [0x00AB6A, 0x00AB6F],
+ [0x00ABE3, 0x00ABFF],
+ [0x00D7A4, 0x00D7AF],
+ [0x00D7C7, 0x00D7CA],
+ [0x00D7FC, 0x00DBFF],
+ [0x00E000, 0x00F8FF],
+ [0x00FA6E, 0x00FA6F],
+ [0x00FADA, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FB1C],
+ [0x00FBB2, 0x00FBD2],
+ [0x00FD3E, 0x00FD4F],
+ [0x00FD90, 0x00FD91],
+ [0x00FDC8, 0x00FDEF],
+ [0x00FDFC, 0x00FE6F],
+ [0x00FEFD, 0x00FF20],
+ [0x00FF3B, 0x00FF40],
+ [0x00FF5B, 0x00FF65],
+ [0x00FFBF, 0x00FFC1],
+ [0x00FFC8, 0x00FFC9],
+ [0x00FFD0, 0x00FFD1],
+ [0x00FFD8, 0x00FFD9],
+ [0x00FFDD, 0x00FFFF],
+ [0x01004E, 0x01004F],
+ [0x01005E, 0x01007F],
+ [0x0100FB, 0x01027F],
+ [0x01029D, 0x01029F],
+ [0x0102D1, 0x0102FF],
+ [0x010320, 0x01032C],
+ [0x01034A, 0x01034F],
+ [0x010376, 0x01037F],
+ [0x01039E, 0x01039F],
+ [0x0103C4, 0x0103C7],
+ [0x0103D0, 0x0103FF],
+ [0x01049E, 0x0104AF],
+ [0x0104D4, 0x0104D7],
+ [0x0104FC, 0x0104FF],
+ [0x010528, 0x01052F],
+ [0x010564, 0x01056F],
+ [0x0105BD, 0x0105FF],
+ [0x010737, 0x01073F],
+ [0x010756, 0x01075F],
+ [0x010768, 0x01077F],
+ [0x0107BB, 0x0107FF],
+ [0x010806, 0x010807],
+ [0x010839, 0x01083B],
+ [0x01083D, 0x01083E],
+ [0x010856, 0x01085F],
+ [0x010877, 0x01087F],
+ [0x01089F, 0x0108DF],
+ [0x0108F6, 0x0108FF],
+ [0x010916, 0x01091F],
+ [0x01093A, 0x01097F],
+ [0x0109B8, 0x0109BD],
+ [0x0109C0, 0x0109FF],
+ [0x010A01, 0x010A0F],
+ [0x010A36, 0x010A5F],
+ [0x010A7D, 0x010A7F],
+ [0x010A9D, 0x010ABF],
+ [0x010AE5, 0x010AFF],
+ [0x010B36, 0x010B3F],
+ [0x010B56, 0x010B5F],
+ [0x010B73, 0x010B7F],
+ [0x010B92, 0x010BFF],
+ [0x010C49, 0x010C7F],
+ [0x010CB3, 0x010CBF],
+ [0x010CF3, 0x010CFF],
+ [0x010D24, 0x010E7F],
+ [0x010EAA, 0x010EAF],
+ [0x010EB2, 0x010EFF],
+ [0x010F1D, 0x010F26],
+ [0x010F28, 0x010F2F],
+ [0x010F46, 0x010F6F],
+ [0x010F82, 0x010FAF],
+ [0x010FC5, 0x010FDF],
+ [0x010FF7, 0x011002],
+ [0x011038, 0x011070],
+ [0x011073, 0x011074],
+ [0x011076, 0x011082],
+ [0x0110B0, 0x0110CF],
+ [0x0110E9, 0x011102],
+ [0x011127, 0x011143],
+ [0x011145, 0x011146],
+ [0x011148, 0x01114F],
+ [0x011173, 0x011175],
+ [0x011177, 0x011182],
+ [0x0111B3, 0x0111C0],
+ [0x0111C5, 0x0111D9],
+ [0x0111DD, 0x0111FF],
+ [0x01122C, 0x01123E],
+ [0x011241, 0x01127F],
+ [0x0112A9, 0x0112AF],
+ [0x0112DF, 0x011304],
+ [0x01130D, 0x01130E],
+ [0x011311, 0x011312],
+ [0x01133A, 0x01133C],
+ [0x01133E, 0x01134F],
+ [0x011351, 0x01135C],
+ [0x011362, 0x0113FF],
+ [0x011435, 0x011446],
+ [0x01144B, 0x01145E],
+ [0x011462, 0x01147F],
+ [0x0114B0, 0x0114C3],
+ [0x0114C8, 0x01157F],
+ [0x0115AF, 0x0115D7],
+ [0x0115DC, 0x0115FF],
+ [0x011630, 0x011643],
+ [0x011645, 0x01167F],
+ [0x0116AB, 0x0116B7],
+ [0x0116B9, 0x0116FF],
+ [0x01171B, 0x01173F],
+ [0x011747, 0x0117FF],
+ [0x01182C, 0x01189F],
+ [0x0118E0, 0x0118FE],
+ [0x011907, 0x011908],
+ [0x01190A, 0x01190B],
+ [0x011930, 0x01193E],
+ [0x011942, 0x01199F],
+ [0x0119A8, 0x0119A9],
+ [0x0119D1, 0x0119E0],
+ [0x0119E4, 0x0119FF],
+ [0x011A01, 0x011A0A],
+ [0x011A33, 0x011A39],
+ [0x011A3B, 0x011A4F],
+ [0x011A51, 0x011A5B],
+ [0x011A8A, 0x011A9C],
+ [0x011A9E, 0x011AAF],
+ [0x011AF9, 0x011BFF],
+ [0x011C2F, 0x011C3F],
+ [0x011C41, 0x011C71],
+ [0x011C90, 0x011CFF],
+ [0x011D31, 0x011D45],
+ [0x011D47, 0x011D5F],
+ [0x011D8A, 0x011D97],
+ [0x011D99, 0x011EDF],
+ [0x011EF3, 0x011F01],
+ [0x011F34, 0x011FAF],
+ [0x011FB1, 0x011FFF],
+ [0x01239A, 0x01247F],
+ [0x012544, 0x012F8F],
+ [0x012FF1, 0x012FFF],
+ [0x013430, 0x013440],
+ [0x013447, 0x0143FF],
+ [0x014647, 0x0167FF],
+ [0x016A39, 0x016A3F],
+ [0x016A5F, 0x016A6F],
+ [0x016ABF, 0x016ACF],
+ [0x016AEE, 0x016AFF],
+ [0x016B30, 0x016B3F],
+ [0x016B44, 0x016B62],
+ [0x016B78, 0x016B7C],
+ [0x016B90, 0x016E3F],
+ [0x016E80, 0x016EFF],
+ [0x016F4B, 0x016F4F],
+ [0x016F51, 0x016F92],
+ [0x016FA0, 0x016FDF],
+ [0x016FE4, 0x016FFF],
+ [0x0187F8, 0x0187FF],
+ [0x018CD6, 0x018CFF],
+ [0x018D09, 0x01AFEF],
+ [0x01B123, 0x01B131],
+ [0x01B133, 0x01B14F],
+ [0x01B153, 0x01B154],
+ [0x01B156, 0x01B163],
+ [0x01B168, 0x01B16F],
+ [0x01B2FC, 0x01BBFF],
+ [0x01BC6B, 0x01BC6F],
+ [0x01BC7D, 0x01BC7F],
+ [0x01BC89, 0x01BC8F],
+ [0x01BC9A, 0x01D3FF],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D50B, 0x01D50C],
+ [0x01D547, 0x01D549],
+ [0x01D6A6, 0x01D6A7],
+ [0x01D7CC, 0x01DEFF],
+ [0x01DF1F, 0x01DF24],
+ [0x01DF2B, 0x01E02F],
+ [0x01E06E, 0x01E0FF],
+ [0x01E12D, 0x01E136],
+ [0x01E13E, 0x01E14D],
+ [0x01E14F, 0x01E28F],
+ [0x01E2AE, 0x01E2BF],
+ [0x01E2EC, 0x01E4CF],
+ [0x01E4EC, 0x01E7DF],
+ [0x01E8C5, 0x01E8FF],
+ [0x01E944, 0x01E94A],
+ [0x01E94C, 0x01EDFF],
+ [0x01EE25, 0x01EE26],
+ [0x01EE3C, 0x01EE41],
+ [0x01EE43, 0x01EE46],
+ [0x01EE55, 0x01EE56],
+ [0x01EE65, 0x01EE66],
+ [0x01EE9C, 0x01EEA0],
+ [0x01EEBC, 0x01FFFF],
+ [0x02A6E0, 0x02A6FF],
+ [0x02B73A, 0x02B73F],
+ [0x02B81E, 0x02B81F],
+ [0x02CEA2, 0x02CEAF],
+ [0x02EBE1, 0x02F7FF],
+ [0x02FA1E, 0x02FFFF],
+ [0x03134B, 0x03134F],
+ [0x0323B0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Letter}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=L}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=L}"
+);
+testPropertyEscapes(
+ /^\P{gc=Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Letter}"
+);
+testPropertyEscapes(
+ /^\P{gc=L}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=L}"
+);
+testPropertyEscapes(
+ /^\P{Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{Letter}"
+);
+testPropertyEscapes(
+ /^\P{L}+$/u,
+ nonMatchSymbols,
+ "\\P{L}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Letter_Number.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Letter_Number.js
new file mode 100644
index 0000000000..e61c58afa6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Letter_Number.js
@@ -0,0 +1,116 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Letter_Number`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x003007,
+ 0x010341,
+ 0x01034A
+ ],
+ ranges: [
+ [0x0016EE, 0x0016F0],
+ [0x002160, 0x002182],
+ [0x002185, 0x002188],
+ [0x003021, 0x003029],
+ [0x003038, 0x00303A],
+ [0x00A6E6, 0x00A6EF],
+ [0x010140, 0x010174],
+ [0x0103D1, 0x0103D5],
+ [0x012400, 0x01246E]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Letter_Number}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Letter_Number}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Nl}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Nl}"
+);
+testPropertyEscapes(
+ /^\p{gc=Letter_Number}+$/u,
+ matchSymbols,
+ "\\p{gc=Letter_Number}"
+);
+testPropertyEscapes(
+ /^\p{gc=Nl}+$/u,
+ matchSymbols,
+ "\\p{gc=Nl}"
+);
+testPropertyEscapes(
+ /^\p{Letter_Number}+$/u,
+ matchSymbols,
+ "\\p{Letter_Number}"
+);
+testPropertyEscapes(
+ /^\p{Nl}+$/u,
+ matchSymbols,
+ "\\p{Nl}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0016ED],
+ [0x0016F1, 0x00215F],
+ [0x002183, 0x002184],
+ [0x002189, 0x003006],
+ [0x003008, 0x003020],
+ [0x00302A, 0x003037],
+ [0x00303B, 0x00A6E5],
+ [0x00A6F0, 0x00DBFF],
+ [0x00E000, 0x01013F],
+ [0x010175, 0x010340],
+ [0x010342, 0x010349],
+ [0x01034B, 0x0103D0],
+ [0x0103D6, 0x0123FF],
+ [0x01246F, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Letter_Number}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Letter_Number}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Nl}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Nl}"
+);
+testPropertyEscapes(
+ /^\P{gc=Letter_Number}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Letter_Number}"
+);
+testPropertyEscapes(
+ /^\P{gc=Nl}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Nl}"
+);
+testPropertyEscapes(
+ /^\P{Letter_Number}+$/u,
+ nonMatchSymbols,
+ "\\P{Letter_Number}"
+);
+testPropertyEscapes(
+ /^\P{Nl}+$/u,
+ nonMatchSymbols,
+ "\\P{Nl}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Line_Separator.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Line_Separator.js
new file mode 100644
index 0000000000..ee4b836290
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Line_Separator.js
@@ -0,0 +1,93 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Line_Separator`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x002028
+ ],
+ ranges: []
+});
+testPropertyEscapes(
+ /^\p{General_Category=Line_Separator}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Line_Separator}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Zl}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Zl}"
+);
+testPropertyEscapes(
+ /^\p{gc=Line_Separator}+$/u,
+ matchSymbols,
+ "\\p{gc=Line_Separator}"
+);
+testPropertyEscapes(
+ /^\p{gc=Zl}+$/u,
+ matchSymbols,
+ "\\p{gc=Zl}"
+);
+testPropertyEscapes(
+ /^\p{Line_Separator}+$/u,
+ matchSymbols,
+ "\\p{Line_Separator}"
+);
+testPropertyEscapes(
+ /^\p{Zl}+$/u,
+ matchSymbols,
+ "\\p{Zl}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x002027],
+ [0x002029, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Line_Separator}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Line_Separator}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Zl}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Zl}"
+);
+testPropertyEscapes(
+ /^\P{gc=Line_Separator}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Line_Separator}"
+);
+testPropertyEscapes(
+ /^\P{gc=Zl}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Zl}"
+);
+testPropertyEscapes(
+ /^\P{Line_Separator}+$/u,
+ nonMatchSymbols,
+ "\\P{Line_Separator}"
+);
+testPropertyEscapes(
+ /^\P{Zl}+$/u,
+ nonMatchSymbols,
+ "\\P{Zl}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Lowercase_Letter.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Lowercase_Letter.js
new file mode 100644
index 0000000000..f1858169ed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Lowercase_Letter.js
@@ -0,0 +1,1409 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Lowercase_Letter`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000B5,
+ 0x000101,
+ 0x000103,
+ 0x000105,
+ 0x000107,
+ 0x000109,
+ 0x00010B,
+ 0x00010D,
+ 0x00010F,
+ 0x000111,
+ 0x000113,
+ 0x000115,
+ 0x000117,
+ 0x000119,
+ 0x00011B,
+ 0x00011D,
+ 0x00011F,
+ 0x000121,
+ 0x000123,
+ 0x000125,
+ 0x000127,
+ 0x000129,
+ 0x00012B,
+ 0x00012D,
+ 0x00012F,
+ 0x000131,
+ 0x000133,
+ 0x000135,
+ 0x00013A,
+ 0x00013C,
+ 0x00013E,
+ 0x000140,
+ 0x000142,
+ 0x000144,
+ 0x000146,
+ 0x00014B,
+ 0x00014D,
+ 0x00014F,
+ 0x000151,
+ 0x000153,
+ 0x000155,
+ 0x000157,
+ 0x000159,
+ 0x00015B,
+ 0x00015D,
+ 0x00015F,
+ 0x000161,
+ 0x000163,
+ 0x000165,
+ 0x000167,
+ 0x000169,
+ 0x00016B,
+ 0x00016D,
+ 0x00016F,
+ 0x000171,
+ 0x000173,
+ 0x000175,
+ 0x000177,
+ 0x00017A,
+ 0x00017C,
+ 0x000183,
+ 0x000185,
+ 0x000188,
+ 0x000192,
+ 0x000195,
+ 0x00019E,
+ 0x0001A1,
+ 0x0001A3,
+ 0x0001A5,
+ 0x0001A8,
+ 0x0001AD,
+ 0x0001B0,
+ 0x0001B4,
+ 0x0001B6,
+ 0x0001C6,
+ 0x0001C9,
+ 0x0001CC,
+ 0x0001CE,
+ 0x0001D0,
+ 0x0001D2,
+ 0x0001D4,
+ 0x0001D6,
+ 0x0001D8,
+ 0x0001DA,
+ 0x0001DF,
+ 0x0001E1,
+ 0x0001E3,
+ 0x0001E5,
+ 0x0001E7,
+ 0x0001E9,
+ 0x0001EB,
+ 0x0001ED,
+ 0x0001F3,
+ 0x0001F5,
+ 0x0001F9,
+ 0x0001FB,
+ 0x0001FD,
+ 0x0001FF,
+ 0x000201,
+ 0x000203,
+ 0x000205,
+ 0x000207,
+ 0x000209,
+ 0x00020B,
+ 0x00020D,
+ 0x00020F,
+ 0x000211,
+ 0x000213,
+ 0x000215,
+ 0x000217,
+ 0x000219,
+ 0x00021B,
+ 0x00021D,
+ 0x00021F,
+ 0x000221,
+ 0x000223,
+ 0x000225,
+ 0x000227,
+ 0x000229,
+ 0x00022B,
+ 0x00022D,
+ 0x00022F,
+ 0x000231,
+ 0x00023C,
+ 0x000242,
+ 0x000247,
+ 0x000249,
+ 0x00024B,
+ 0x00024D,
+ 0x000371,
+ 0x000373,
+ 0x000377,
+ 0x000390,
+ 0x0003D9,
+ 0x0003DB,
+ 0x0003DD,
+ 0x0003DF,
+ 0x0003E1,
+ 0x0003E3,
+ 0x0003E5,
+ 0x0003E7,
+ 0x0003E9,
+ 0x0003EB,
+ 0x0003ED,
+ 0x0003F5,
+ 0x0003F8,
+ 0x000461,
+ 0x000463,
+ 0x000465,
+ 0x000467,
+ 0x000469,
+ 0x00046B,
+ 0x00046D,
+ 0x00046F,
+ 0x000471,
+ 0x000473,
+ 0x000475,
+ 0x000477,
+ 0x000479,
+ 0x00047B,
+ 0x00047D,
+ 0x00047F,
+ 0x000481,
+ 0x00048B,
+ 0x00048D,
+ 0x00048F,
+ 0x000491,
+ 0x000493,
+ 0x000495,
+ 0x000497,
+ 0x000499,
+ 0x00049B,
+ 0x00049D,
+ 0x00049F,
+ 0x0004A1,
+ 0x0004A3,
+ 0x0004A5,
+ 0x0004A7,
+ 0x0004A9,
+ 0x0004AB,
+ 0x0004AD,
+ 0x0004AF,
+ 0x0004B1,
+ 0x0004B3,
+ 0x0004B5,
+ 0x0004B7,
+ 0x0004B9,
+ 0x0004BB,
+ 0x0004BD,
+ 0x0004BF,
+ 0x0004C2,
+ 0x0004C4,
+ 0x0004C6,
+ 0x0004C8,
+ 0x0004CA,
+ 0x0004CC,
+ 0x0004D1,
+ 0x0004D3,
+ 0x0004D5,
+ 0x0004D7,
+ 0x0004D9,
+ 0x0004DB,
+ 0x0004DD,
+ 0x0004DF,
+ 0x0004E1,
+ 0x0004E3,
+ 0x0004E5,
+ 0x0004E7,
+ 0x0004E9,
+ 0x0004EB,
+ 0x0004ED,
+ 0x0004EF,
+ 0x0004F1,
+ 0x0004F3,
+ 0x0004F5,
+ 0x0004F7,
+ 0x0004F9,
+ 0x0004FB,
+ 0x0004FD,
+ 0x0004FF,
+ 0x000501,
+ 0x000503,
+ 0x000505,
+ 0x000507,
+ 0x000509,
+ 0x00050B,
+ 0x00050D,
+ 0x00050F,
+ 0x000511,
+ 0x000513,
+ 0x000515,
+ 0x000517,
+ 0x000519,
+ 0x00051B,
+ 0x00051D,
+ 0x00051F,
+ 0x000521,
+ 0x000523,
+ 0x000525,
+ 0x000527,
+ 0x000529,
+ 0x00052B,
+ 0x00052D,
+ 0x00052F,
+ 0x001E01,
+ 0x001E03,
+ 0x001E05,
+ 0x001E07,
+ 0x001E09,
+ 0x001E0B,
+ 0x001E0D,
+ 0x001E0F,
+ 0x001E11,
+ 0x001E13,
+ 0x001E15,
+ 0x001E17,
+ 0x001E19,
+ 0x001E1B,
+ 0x001E1D,
+ 0x001E1F,
+ 0x001E21,
+ 0x001E23,
+ 0x001E25,
+ 0x001E27,
+ 0x001E29,
+ 0x001E2B,
+ 0x001E2D,
+ 0x001E2F,
+ 0x001E31,
+ 0x001E33,
+ 0x001E35,
+ 0x001E37,
+ 0x001E39,
+ 0x001E3B,
+ 0x001E3D,
+ 0x001E3F,
+ 0x001E41,
+ 0x001E43,
+ 0x001E45,
+ 0x001E47,
+ 0x001E49,
+ 0x001E4B,
+ 0x001E4D,
+ 0x001E4F,
+ 0x001E51,
+ 0x001E53,
+ 0x001E55,
+ 0x001E57,
+ 0x001E59,
+ 0x001E5B,
+ 0x001E5D,
+ 0x001E5F,
+ 0x001E61,
+ 0x001E63,
+ 0x001E65,
+ 0x001E67,
+ 0x001E69,
+ 0x001E6B,
+ 0x001E6D,
+ 0x001E6F,
+ 0x001E71,
+ 0x001E73,
+ 0x001E75,
+ 0x001E77,
+ 0x001E79,
+ 0x001E7B,
+ 0x001E7D,
+ 0x001E7F,
+ 0x001E81,
+ 0x001E83,
+ 0x001E85,
+ 0x001E87,
+ 0x001E89,
+ 0x001E8B,
+ 0x001E8D,
+ 0x001E8F,
+ 0x001E91,
+ 0x001E93,
+ 0x001E9F,
+ 0x001EA1,
+ 0x001EA3,
+ 0x001EA5,
+ 0x001EA7,
+ 0x001EA9,
+ 0x001EAB,
+ 0x001EAD,
+ 0x001EAF,
+ 0x001EB1,
+ 0x001EB3,
+ 0x001EB5,
+ 0x001EB7,
+ 0x001EB9,
+ 0x001EBB,
+ 0x001EBD,
+ 0x001EBF,
+ 0x001EC1,
+ 0x001EC3,
+ 0x001EC5,
+ 0x001EC7,
+ 0x001EC9,
+ 0x001ECB,
+ 0x001ECD,
+ 0x001ECF,
+ 0x001ED1,
+ 0x001ED3,
+ 0x001ED5,
+ 0x001ED7,
+ 0x001ED9,
+ 0x001EDB,
+ 0x001EDD,
+ 0x001EDF,
+ 0x001EE1,
+ 0x001EE3,
+ 0x001EE5,
+ 0x001EE7,
+ 0x001EE9,
+ 0x001EEB,
+ 0x001EED,
+ 0x001EEF,
+ 0x001EF1,
+ 0x001EF3,
+ 0x001EF5,
+ 0x001EF7,
+ 0x001EF9,
+ 0x001EFB,
+ 0x001EFD,
+ 0x001FBE,
+ 0x00210A,
+ 0x002113,
+ 0x00212F,
+ 0x002134,
+ 0x002139,
+ 0x00214E,
+ 0x002184,
+ 0x002C61,
+ 0x002C68,
+ 0x002C6A,
+ 0x002C6C,
+ 0x002C71,
+ 0x002C81,
+ 0x002C83,
+ 0x002C85,
+ 0x002C87,
+ 0x002C89,
+ 0x002C8B,
+ 0x002C8D,
+ 0x002C8F,
+ 0x002C91,
+ 0x002C93,
+ 0x002C95,
+ 0x002C97,
+ 0x002C99,
+ 0x002C9B,
+ 0x002C9D,
+ 0x002C9F,
+ 0x002CA1,
+ 0x002CA3,
+ 0x002CA5,
+ 0x002CA7,
+ 0x002CA9,
+ 0x002CAB,
+ 0x002CAD,
+ 0x002CAF,
+ 0x002CB1,
+ 0x002CB3,
+ 0x002CB5,
+ 0x002CB7,
+ 0x002CB9,
+ 0x002CBB,
+ 0x002CBD,
+ 0x002CBF,
+ 0x002CC1,
+ 0x002CC3,
+ 0x002CC5,
+ 0x002CC7,
+ 0x002CC9,
+ 0x002CCB,
+ 0x002CCD,
+ 0x002CCF,
+ 0x002CD1,
+ 0x002CD3,
+ 0x002CD5,
+ 0x002CD7,
+ 0x002CD9,
+ 0x002CDB,
+ 0x002CDD,
+ 0x002CDF,
+ 0x002CE1,
+ 0x002CEC,
+ 0x002CEE,
+ 0x002CF3,
+ 0x002D27,
+ 0x002D2D,
+ 0x00A641,
+ 0x00A643,
+ 0x00A645,
+ 0x00A647,
+ 0x00A649,
+ 0x00A64B,
+ 0x00A64D,
+ 0x00A64F,
+ 0x00A651,
+ 0x00A653,
+ 0x00A655,
+ 0x00A657,
+ 0x00A659,
+ 0x00A65B,
+ 0x00A65D,
+ 0x00A65F,
+ 0x00A661,
+ 0x00A663,
+ 0x00A665,
+ 0x00A667,
+ 0x00A669,
+ 0x00A66B,
+ 0x00A66D,
+ 0x00A681,
+ 0x00A683,
+ 0x00A685,
+ 0x00A687,
+ 0x00A689,
+ 0x00A68B,
+ 0x00A68D,
+ 0x00A68F,
+ 0x00A691,
+ 0x00A693,
+ 0x00A695,
+ 0x00A697,
+ 0x00A699,
+ 0x00A69B,
+ 0x00A723,
+ 0x00A725,
+ 0x00A727,
+ 0x00A729,
+ 0x00A72B,
+ 0x00A72D,
+ 0x00A733,
+ 0x00A735,
+ 0x00A737,
+ 0x00A739,
+ 0x00A73B,
+ 0x00A73D,
+ 0x00A73F,
+ 0x00A741,
+ 0x00A743,
+ 0x00A745,
+ 0x00A747,
+ 0x00A749,
+ 0x00A74B,
+ 0x00A74D,
+ 0x00A74F,
+ 0x00A751,
+ 0x00A753,
+ 0x00A755,
+ 0x00A757,
+ 0x00A759,
+ 0x00A75B,
+ 0x00A75D,
+ 0x00A75F,
+ 0x00A761,
+ 0x00A763,
+ 0x00A765,
+ 0x00A767,
+ 0x00A769,
+ 0x00A76B,
+ 0x00A76D,
+ 0x00A76F,
+ 0x00A77A,
+ 0x00A77C,
+ 0x00A77F,
+ 0x00A781,
+ 0x00A783,
+ 0x00A785,
+ 0x00A787,
+ 0x00A78C,
+ 0x00A78E,
+ 0x00A791,
+ 0x00A797,
+ 0x00A799,
+ 0x00A79B,
+ 0x00A79D,
+ 0x00A79F,
+ 0x00A7A1,
+ 0x00A7A3,
+ 0x00A7A5,
+ 0x00A7A7,
+ 0x00A7A9,
+ 0x00A7AF,
+ 0x00A7B5,
+ 0x00A7B7,
+ 0x00A7B9,
+ 0x00A7BB,
+ 0x00A7BD,
+ 0x00A7BF,
+ 0x00A7C1,
+ 0x00A7C3,
+ 0x00A7C8,
+ 0x00A7CA,
+ 0x00A7D1,
+ 0x00A7D3,
+ 0x00A7D5,
+ 0x00A7D7,
+ 0x00A7D9,
+ 0x00A7F6,
+ 0x00A7FA,
+ 0x01D4BB,
+ 0x01D7CB
+ ],
+ ranges: [
+ [0x000061, 0x00007A],
+ [0x0000DF, 0x0000F6],
+ [0x0000F8, 0x0000FF],
+ [0x000137, 0x000138],
+ [0x000148, 0x000149],
+ [0x00017E, 0x000180],
+ [0x00018C, 0x00018D],
+ [0x000199, 0x00019B],
+ [0x0001AA, 0x0001AB],
+ [0x0001B9, 0x0001BA],
+ [0x0001BD, 0x0001BF],
+ [0x0001DC, 0x0001DD],
+ [0x0001EF, 0x0001F0],
+ [0x000233, 0x000239],
+ [0x00023F, 0x000240],
+ [0x00024F, 0x000293],
+ [0x000295, 0x0002AF],
+ [0x00037B, 0x00037D],
+ [0x0003AC, 0x0003CE],
+ [0x0003D0, 0x0003D1],
+ [0x0003D5, 0x0003D7],
+ [0x0003EF, 0x0003F3],
+ [0x0003FB, 0x0003FC],
+ [0x000430, 0x00045F],
+ [0x0004CE, 0x0004CF],
+ [0x000560, 0x000588],
+ [0x0010D0, 0x0010FA],
+ [0x0010FD, 0x0010FF],
+ [0x0013F8, 0x0013FD],
+ [0x001C80, 0x001C88],
+ [0x001D00, 0x001D2B],
+ [0x001D6B, 0x001D77],
+ [0x001D79, 0x001D9A],
+ [0x001E95, 0x001E9D],
+ [0x001EFF, 0x001F07],
+ [0x001F10, 0x001F15],
+ [0x001F20, 0x001F27],
+ [0x001F30, 0x001F37],
+ [0x001F40, 0x001F45],
+ [0x001F50, 0x001F57],
+ [0x001F60, 0x001F67],
+ [0x001F70, 0x001F7D],
+ [0x001F80, 0x001F87],
+ [0x001F90, 0x001F97],
+ [0x001FA0, 0x001FA7],
+ [0x001FB0, 0x001FB4],
+ [0x001FB6, 0x001FB7],
+ [0x001FC2, 0x001FC4],
+ [0x001FC6, 0x001FC7],
+ [0x001FD0, 0x001FD3],
+ [0x001FD6, 0x001FD7],
+ [0x001FE0, 0x001FE7],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FF7],
+ [0x00210E, 0x00210F],
+ [0x00213C, 0x00213D],
+ [0x002146, 0x002149],
+ [0x002C30, 0x002C5F],
+ [0x002C65, 0x002C66],
+ [0x002C73, 0x002C74],
+ [0x002C76, 0x002C7B],
+ [0x002CE3, 0x002CE4],
+ [0x002D00, 0x002D25],
+ [0x00A72F, 0x00A731],
+ [0x00A771, 0x00A778],
+ [0x00A793, 0x00A795],
+ [0x00AB30, 0x00AB5A],
+ [0x00AB60, 0x00AB68],
+ [0x00AB70, 0x00ABBF],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FF41, 0x00FF5A],
+ [0x010428, 0x01044F],
+ [0x0104D8, 0x0104FB],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC],
+ [0x010CC0, 0x010CF2],
+ [0x0118C0, 0x0118DF],
+ [0x016E60, 0x016E7F],
+ [0x01D41A, 0x01D433],
+ [0x01D44E, 0x01D454],
+ [0x01D456, 0x01D467],
+ [0x01D482, 0x01D49B],
+ [0x01D4B6, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D4CF],
+ [0x01D4EA, 0x01D503],
+ [0x01D51E, 0x01D537],
+ [0x01D552, 0x01D56B],
+ [0x01D586, 0x01D59F],
+ [0x01D5BA, 0x01D5D3],
+ [0x01D5EE, 0x01D607],
+ [0x01D622, 0x01D63B],
+ [0x01D656, 0x01D66F],
+ [0x01D68A, 0x01D6A5],
+ [0x01D6C2, 0x01D6DA],
+ [0x01D6DC, 0x01D6E1],
+ [0x01D6FC, 0x01D714],
+ [0x01D716, 0x01D71B],
+ [0x01D736, 0x01D74E],
+ [0x01D750, 0x01D755],
+ [0x01D770, 0x01D788],
+ [0x01D78A, 0x01D78F],
+ [0x01D7AA, 0x01D7C2],
+ [0x01D7C4, 0x01D7C9],
+ [0x01DF00, 0x01DF09],
+ [0x01DF0B, 0x01DF1E],
+ [0x01DF25, 0x01DF2A],
+ [0x01E922, 0x01E943]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Lowercase_Letter}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Lowercase_Letter}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Ll}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Ll}"
+);
+testPropertyEscapes(
+ /^\p{gc=Lowercase_Letter}+$/u,
+ matchSymbols,
+ "\\p{gc=Lowercase_Letter}"
+);
+testPropertyEscapes(
+ /^\p{gc=Ll}+$/u,
+ matchSymbols,
+ "\\p{gc=Ll}"
+);
+testPropertyEscapes(
+ /^\p{Lowercase_Letter}+$/u,
+ matchSymbols,
+ "\\p{Lowercase_Letter}"
+);
+testPropertyEscapes(
+ /^\p{Ll}+$/u,
+ matchSymbols,
+ "\\p{Ll}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000F7,
+ 0x000100,
+ 0x000102,
+ 0x000104,
+ 0x000106,
+ 0x000108,
+ 0x00010A,
+ 0x00010C,
+ 0x00010E,
+ 0x000110,
+ 0x000112,
+ 0x000114,
+ 0x000116,
+ 0x000118,
+ 0x00011A,
+ 0x00011C,
+ 0x00011E,
+ 0x000120,
+ 0x000122,
+ 0x000124,
+ 0x000126,
+ 0x000128,
+ 0x00012A,
+ 0x00012C,
+ 0x00012E,
+ 0x000130,
+ 0x000132,
+ 0x000134,
+ 0x000136,
+ 0x000139,
+ 0x00013B,
+ 0x00013D,
+ 0x00013F,
+ 0x000141,
+ 0x000143,
+ 0x000145,
+ 0x000147,
+ 0x00014A,
+ 0x00014C,
+ 0x00014E,
+ 0x000150,
+ 0x000152,
+ 0x000154,
+ 0x000156,
+ 0x000158,
+ 0x00015A,
+ 0x00015C,
+ 0x00015E,
+ 0x000160,
+ 0x000162,
+ 0x000164,
+ 0x000166,
+ 0x000168,
+ 0x00016A,
+ 0x00016C,
+ 0x00016E,
+ 0x000170,
+ 0x000172,
+ 0x000174,
+ 0x000176,
+ 0x00017B,
+ 0x00017D,
+ 0x000184,
+ 0x0001A2,
+ 0x0001A4,
+ 0x0001A9,
+ 0x0001AC,
+ 0x0001B5,
+ 0x0001CD,
+ 0x0001CF,
+ 0x0001D1,
+ 0x0001D3,
+ 0x0001D5,
+ 0x0001D7,
+ 0x0001D9,
+ 0x0001DB,
+ 0x0001DE,
+ 0x0001E0,
+ 0x0001E2,
+ 0x0001E4,
+ 0x0001E6,
+ 0x0001E8,
+ 0x0001EA,
+ 0x0001EC,
+ 0x0001EE,
+ 0x0001F4,
+ 0x0001FA,
+ 0x0001FC,
+ 0x0001FE,
+ 0x000200,
+ 0x000202,
+ 0x000204,
+ 0x000206,
+ 0x000208,
+ 0x00020A,
+ 0x00020C,
+ 0x00020E,
+ 0x000210,
+ 0x000212,
+ 0x000214,
+ 0x000216,
+ 0x000218,
+ 0x00021A,
+ 0x00021C,
+ 0x00021E,
+ 0x000220,
+ 0x000222,
+ 0x000224,
+ 0x000226,
+ 0x000228,
+ 0x00022A,
+ 0x00022C,
+ 0x00022E,
+ 0x000230,
+ 0x000232,
+ 0x000241,
+ 0x000248,
+ 0x00024A,
+ 0x00024C,
+ 0x00024E,
+ 0x000294,
+ 0x000372,
+ 0x0003CF,
+ 0x0003D8,
+ 0x0003DA,
+ 0x0003DC,
+ 0x0003DE,
+ 0x0003E0,
+ 0x0003E2,
+ 0x0003E4,
+ 0x0003E6,
+ 0x0003E8,
+ 0x0003EA,
+ 0x0003EC,
+ 0x0003EE,
+ 0x0003F4,
+ 0x000460,
+ 0x000462,
+ 0x000464,
+ 0x000466,
+ 0x000468,
+ 0x00046A,
+ 0x00046C,
+ 0x00046E,
+ 0x000470,
+ 0x000472,
+ 0x000474,
+ 0x000476,
+ 0x000478,
+ 0x00047A,
+ 0x00047C,
+ 0x00047E,
+ 0x000480,
+ 0x00048C,
+ 0x00048E,
+ 0x000490,
+ 0x000492,
+ 0x000494,
+ 0x000496,
+ 0x000498,
+ 0x00049A,
+ 0x00049C,
+ 0x00049E,
+ 0x0004A0,
+ 0x0004A2,
+ 0x0004A4,
+ 0x0004A6,
+ 0x0004A8,
+ 0x0004AA,
+ 0x0004AC,
+ 0x0004AE,
+ 0x0004B0,
+ 0x0004B2,
+ 0x0004B4,
+ 0x0004B6,
+ 0x0004B8,
+ 0x0004BA,
+ 0x0004BC,
+ 0x0004BE,
+ 0x0004C3,
+ 0x0004C5,
+ 0x0004C7,
+ 0x0004C9,
+ 0x0004CB,
+ 0x0004CD,
+ 0x0004D0,
+ 0x0004D2,
+ 0x0004D4,
+ 0x0004D6,
+ 0x0004D8,
+ 0x0004DA,
+ 0x0004DC,
+ 0x0004DE,
+ 0x0004E0,
+ 0x0004E2,
+ 0x0004E4,
+ 0x0004E6,
+ 0x0004E8,
+ 0x0004EA,
+ 0x0004EC,
+ 0x0004EE,
+ 0x0004F0,
+ 0x0004F2,
+ 0x0004F4,
+ 0x0004F6,
+ 0x0004F8,
+ 0x0004FA,
+ 0x0004FC,
+ 0x0004FE,
+ 0x000500,
+ 0x000502,
+ 0x000504,
+ 0x000506,
+ 0x000508,
+ 0x00050A,
+ 0x00050C,
+ 0x00050E,
+ 0x000510,
+ 0x000512,
+ 0x000514,
+ 0x000516,
+ 0x000518,
+ 0x00051A,
+ 0x00051C,
+ 0x00051E,
+ 0x000520,
+ 0x000522,
+ 0x000524,
+ 0x000526,
+ 0x000528,
+ 0x00052A,
+ 0x00052C,
+ 0x00052E,
+ 0x001D78,
+ 0x001E02,
+ 0x001E04,
+ 0x001E06,
+ 0x001E08,
+ 0x001E0A,
+ 0x001E0C,
+ 0x001E0E,
+ 0x001E10,
+ 0x001E12,
+ 0x001E14,
+ 0x001E16,
+ 0x001E18,
+ 0x001E1A,
+ 0x001E1C,
+ 0x001E1E,
+ 0x001E20,
+ 0x001E22,
+ 0x001E24,
+ 0x001E26,
+ 0x001E28,
+ 0x001E2A,
+ 0x001E2C,
+ 0x001E2E,
+ 0x001E30,
+ 0x001E32,
+ 0x001E34,
+ 0x001E36,
+ 0x001E38,
+ 0x001E3A,
+ 0x001E3C,
+ 0x001E3E,
+ 0x001E40,
+ 0x001E42,
+ 0x001E44,
+ 0x001E46,
+ 0x001E48,
+ 0x001E4A,
+ 0x001E4C,
+ 0x001E4E,
+ 0x001E50,
+ 0x001E52,
+ 0x001E54,
+ 0x001E56,
+ 0x001E58,
+ 0x001E5A,
+ 0x001E5C,
+ 0x001E5E,
+ 0x001E60,
+ 0x001E62,
+ 0x001E64,
+ 0x001E66,
+ 0x001E68,
+ 0x001E6A,
+ 0x001E6C,
+ 0x001E6E,
+ 0x001E70,
+ 0x001E72,
+ 0x001E74,
+ 0x001E76,
+ 0x001E78,
+ 0x001E7A,
+ 0x001E7C,
+ 0x001E7E,
+ 0x001E80,
+ 0x001E82,
+ 0x001E84,
+ 0x001E86,
+ 0x001E88,
+ 0x001E8A,
+ 0x001E8C,
+ 0x001E8E,
+ 0x001E90,
+ 0x001E92,
+ 0x001E94,
+ 0x001E9E,
+ 0x001EA0,
+ 0x001EA2,
+ 0x001EA4,
+ 0x001EA6,
+ 0x001EA8,
+ 0x001EAA,
+ 0x001EAC,
+ 0x001EAE,
+ 0x001EB0,
+ 0x001EB2,
+ 0x001EB4,
+ 0x001EB6,
+ 0x001EB8,
+ 0x001EBA,
+ 0x001EBC,
+ 0x001EBE,
+ 0x001EC0,
+ 0x001EC2,
+ 0x001EC4,
+ 0x001EC6,
+ 0x001EC8,
+ 0x001ECA,
+ 0x001ECC,
+ 0x001ECE,
+ 0x001ED0,
+ 0x001ED2,
+ 0x001ED4,
+ 0x001ED6,
+ 0x001ED8,
+ 0x001EDA,
+ 0x001EDC,
+ 0x001EDE,
+ 0x001EE0,
+ 0x001EE2,
+ 0x001EE4,
+ 0x001EE6,
+ 0x001EE8,
+ 0x001EEA,
+ 0x001EEC,
+ 0x001EEE,
+ 0x001EF0,
+ 0x001EF2,
+ 0x001EF4,
+ 0x001EF6,
+ 0x001EF8,
+ 0x001EFA,
+ 0x001EFC,
+ 0x001EFE,
+ 0x001FB5,
+ 0x001FC5,
+ 0x001FF5,
+ 0x002C60,
+ 0x002C67,
+ 0x002C69,
+ 0x002C6B,
+ 0x002C72,
+ 0x002C75,
+ 0x002C82,
+ 0x002C84,
+ 0x002C86,
+ 0x002C88,
+ 0x002C8A,
+ 0x002C8C,
+ 0x002C8E,
+ 0x002C90,
+ 0x002C92,
+ 0x002C94,
+ 0x002C96,
+ 0x002C98,
+ 0x002C9A,
+ 0x002C9C,
+ 0x002C9E,
+ 0x002CA0,
+ 0x002CA2,
+ 0x002CA4,
+ 0x002CA6,
+ 0x002CA8,
+ 0x002CAA,
+ 0x002CAC,
+ 0x002CAE,
+ 0x002CB0,
+ 0x002CB2,
+ 0x002CB4,
+ 0x002CB6,
+ 0x002CB8,
+ 0x002CBA,
+ 0x002CBC,
+ 0x002CBE,
+ 0x002CC0,
+ 0x002CC2,
+ 0x002CC4,
+ 0x002CC6,
+ 0x002CC8,
+ 0x002CCA,
+ 0x002CCC,
+ 0x002CCE,
+ 0x002CD0,
+ 0x002CD2,
+ 0x002CD4,
+ 0x002CD6,
+ 0x002CD8,
+ 0x002CDA,
+ 0x002CDC,
+ 0x002CDE,
+ 0x002CE0,
+ 0x002CE2,
+ 0x002CED,
+ 0x002D26,
+ 0x00A642,
+ 0x00A644,
+ 0x00A646,
+ 0x00A648,
+ 0x00A64A,
+ 0x00A64C,
+ 0x00A64E,
+ 0x00A650,
+ 0x00A652,
+ 0x00A654,
+ 0x00A656,
+ 0x00A658,
+ 0x00A65A,
+ 0x00A65C,
+ 0x00A65E,
+ 0x00A660,
+ 0x00A662,
+ 0x00A664,
+ 0x00A666,
+ 0x00A668,
+ 0x00A66A,
+ 0x00A66C,
+ 0x00A682,
+ 0x00A684,
+ 0x00A686,
+ 0x00A688,
+ 0x00A68A,
+ 0x00A68C,
+ 0x00A68E,
+ 0x00A690,
+ 0x00A692,
+ 0x00A694,
+ 0x00A696,
+ 0x00A698,
+ 0x00A69A,
+ 0x00A724,
+ 0x00A726,
+ 0x00A728,
+ 0x00A72A,
+ 0x00A72C,
+ 0x00A72E,
+ 0x00A732,
+ 0x00A734,
+ 0x00A736,
+ 0x00A738,
+ 0x00A73A,
+ 0x00A73C,
+ 0x00A73E,
+ 0x00A740,
+ 0x00A742,
+ 0x00A744,
+ 0x00A746,
+ 0x00A748,
+ 0x00A74A,
+ 0x00A74C,
+ 0x00A74E,
+ 0x00A750,
+ 0x00A752,
+ 0x00A754,
+ 0x00A756,
+ 0x00A758,
+ 0x00A75A,
+ 0x00A75C,
+ 0x00A75E,
+ 0x00A760,
+ 0x00A762,
+ 0x00A764,
+ 0x00A766,
+ 0x00A768,
+ 0x00A76A,
+ 0x00A76C,
+ 0x00A76E,
+ 0x00A770,
+ 0x00A779,
+ 0x00A77B,
+ 0x00A780,
+ 0x00A782,
+ 0x00A784,
+ 0x00A786,
+ 0x00A78D,
+ 0x00A792,
+ 0x00A796,
+ 0x00A798,
+ 0x00A79A,
+ 0x00A79C,
+ 0x00A79E,
+ 0x00A7A0,
+ 0x00A7A2,
+ 0x00A7A4,
+ 0x00A7A6,
+ 0x00A7A8,
+ 0x00A7B6,
+ 0x00A7B8,
+ 0x00A7BA,
+ 0x00A7BC,
+ 0x00A7BE,
+ 0x00A7C0,
+ 0x00A7C2,
+ 0x00A7C9,
+ 0x00A7D2,
+ 0x00A7D4,
+ 0x00A7D6,
+ 0x00A7D8,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA,
+ 0x01D455,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D6DB,
+ 0x01D715,
+ 0x01D74F,
+ 0x01D789,
+ 0x01D7C3,
+ 0x01D7CA,
+ 0x01DF0A
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000060],
+ [0x00007B, 0x0000B4],
+ [0x0000B6, 0x0000DE],
+ [0x000178, 0x000179],
+ [0x000181, 0x000182],
+ [0x000186, 0x000187],
+ [0x000189, 0x00018B],
+ [0x00018E, 0x000191],
+ [0x000193, 0x000194],
+ [0x000196, 0x000198],
+ [0x00019C, 0x00019D],
+ [0x00019F, 0x0001A0],
+ [0x0001A6, 0x0001A7],
+ [0x0001AE, 0x0001AF],
+ [0x0001B1, 0x0001B3],
+ [0x0001B7, 0x0001B8],
+ [0x0001BB, 0x0001BC],
+ [0x0001C0, 0x0001C5],
+ [0x0001C7, 0x0001C8],
+ [0x0001CA, 0x0001CB],
+ [0x0001F1, 0x0001F2],
+ [0x0001F6, 0x0001F8],
+ [0x00023A, 0x00023B],
+ [0x00023D, 0x00023E],
+ [0x000243, 0x000246],
+ [0x0002B0, 0x000370],
+ [0x000374, 0x000376],
+ [0x000378, 0x00037A],
+ [0x00037E, 0x00038F],
+ [0x000391, 0x0003AB],
+ [0x0003D2, 0x0003D4],
+ [0x0003F6, 0x0003F7],
+ [0x0003F9, 0x0003FA],
+ [0x0003FD, 0x00042F],
+ [0x000482, 0x00048A],
+ [0x0004C0, 0x0004C1],
+ [0x000530, 0x00055F],
+ [0x000589, 0x0010CF],
+ [0x0010FB, 0x0010FC],
+ [0x001100, 0x0013F7],
+ [0x0013FE, 0x001C7F],
+ [0x001C89, 0x001CFF],
+ [0x001D2C, 0x001D6A],
+ [0x001D9B, 0x001E00],
+ [0x001F08, 0x001F0F],
+ [0x001F16, 0x001F1F],
+ [0x001F28, 0x001F2F],
+ [0x001F38, 0x001F3F],
+ [0x001F46, 0x001F4F],
+ [0x001F58, 0x001F5F],
+ [0x001F68, 0x001F6F],
+ [0x001F7E, 0x001F7F],
+ [0x001F88, 0x001F8F],
+ [0x001F98, 0x001F9F],
+ [0x001FA8, 0x001FAF],
+ [0x001FB8, 0x001FBD],
+ [0x001FBF, 0x001FC1],
+ [0x001FC8, 0x001FCF],
+ [0x001FD4, 0x001FD5],
+ [0x001FD8, 0x001FDF],
+ [0x001FE8, 0x001FF1],
+ [0x001FF8, 0x002109],
+ [0x00210B, 0x00210D],
+ [0x002110, 0x002112],
+ [0x002114, 0x00212E],
+ [0x002130, 0x002133],
+ [0x002135, 0x002138],
+ [0x00213A, 0x00213B],
+ [0x00213E, 0x002145],
+ [0x00214A, 0x00214D],
+ [0x00214F, 0x002183],
+ [0x002185, 0x002C2F],
+ [0x002C62, 0x002C64],
+ [0x002C6D, 0x002C70],
+ [0x002C7C, 0x002C80],
+ [0x002CE5, 0x002CEB],
+ [0x002CEF, 0x002CF2],
+ [0x002CF4, 0x002CFF],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x00A640],
+ [0x00A66E, 0x00A680],
+ [0x00A69C, 0x00A722],
+ [0x00A77D, 0x00A77E],
+ [0x00A788, 0x00A78B],
+ [0x00A78F, 0x00A790],
+ [0x00A7AA, 0x00A7AE],
+ [0x00A7B0, 0x00A7B4],
+ [0x00A7C4, 0x00A7C7],
+ [0x00A7CB, 0x00A7D0],
+ [0x00A7DA, 0x00A7F5],
+ [0x00A7F7, 0x00A7F9],
+ [0x00A7FB, 0x00AB2F],
+ [0x00AB5B, 0x00AB5F],
+ [0x00AB69, 0x00AB6F],
+ [0x00ABC0, 0x00DBFF],
+ [0x00E000, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FF40],
+ [0x00FF5B, 0x010427],
+ [0x010450, 0x0104D7],
+ [0x0104FC, 0x010596],
+ [0x0105BD, 0x010CBF],
+ [0x010CF3, 0x0118BF],
+ [0x0118E0, 0x016E5F],
+ [0x016E80, 0x01D419],
+ [0x01D434, 0x01D44D],
+ [0x01D468, 0x01D481],
+ [0x01D49C, 0x01D4B5],
+ [0x01D4D0, 0x01D4E9],
+ [0x01D504, 0x01D51D],
+ [0x01D538, 0x01D551],
+ [0x01D56C, 0x01D585],
+ [0x01D5A0, 0x01D5B9],
+ [0x01D5D4, 0x01D5ED],
+ [0x01D608, 0x01D621],
+ [0x01D63C, 0x01D655],
+ [0x01D670, 0x01D689],
+ [0x01D6A6, 0x01D6C1],
+ [0x01D6E2, 0x01D6FB],
+ [0x01D71C, 0x01D735],
+ [0x01D756, 0x01D76F],
+ [0x01D790, 0x01D7A9],
+ [0x01D7CC, 0x01DEFF],
+ [0x01DF1F, 0x01DF24],
+ [0x01DF2B, 0x01E921],
+ [0x01E944, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Lowercase_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Lowercase_Letter}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Ll}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Ll}"
+);
+testPropertyEscapes(
+ /^\P{gc=Lowercase_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Lowercase_Letter}"
+);
+testPropertyEscapes(
+ /^\P{gc=Ll}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Ll}"
+);
+testPropertyEscapes(
+ /^\P{Lowercase_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{Lowercase_Letter}"
+);
+testPropertyEscapes(
+ /^\P{Ll}+$/u,
+ nonMatchSymbols,
+ "\\P{Ll}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Mark.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Mark.js
new file mode 100644
index 0000000000..14b1aed760
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Mark.js
@@ -0,0 +1,743 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Mark`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0005BF,
+ 0x0005C7,
+ 0x000670,
+ 0x000711,
+ 0x0007FD,
+ 0x0009BC,
+ 0x0009D7,
+ 0x0009FE,
+ 0x000A3C,
+ 0x000A51,
+ 0x000A75,
+ 0x000ABC,
+ 0x000B3C,
+ 0x000B82,
+ 0x000BD7,
+ 0x000C3C,
+ 0x000CBC,
+ 0x000CF3,
+ 0x000D57,
+ 0x000DCA,
+ 0x000DD6,
+ 0x000E31,
+ 0x000EB1,
+ 0x000F35,
+ 0x000F37,
+ 0x000F39,
+ 0x000FC6,
+ 0x00108F,
+ 0x0017DD,
+ 0x00180F,
+ 0x0018A9,
+ 0x001A7F,
+ 0x001CED,
+ 0x001CF4,
+ 0x002D7F,
+ 0x00A802,
+ 0x00A806,
+ 0x00A80B,
+ 0x00A82C,
+ 0x00A8FF,
+ 0x00A9E5,
+ 0x00AA43,
+ 0x00AAB0,
+ 0x00AAC1,
+ 0x00FB1E,
+ 0x0101FD,
+ 0x0102E0,
+ 0x010A3F,
+ 0x011070,
+ 0x0110C2,
+ 0x011173,
+ 0x01123E,
+ 0x011241,
+ 0x011357,
+ 0x01145E,
+ 0x011940,
+ 0x0119E4,
+ 0x011A47,
+ 0x011D3A,
+ 0x011D47,
+ 0x011F03,
+ 0x013440,
+ 0x016F4F,
+ 0x016FE4,
+ 0x01DA75,
+ 0x01DA84,
+ 0x01E08F,
+ 0x01E2AE
+ ],
+ ranges: [
+ [0x000300, 0x00036F],
+ [0x000483, 0x000489],
+ [0x000591, 0x0005BD],
+ [0x0005C1, 0x0005C2],
+ [0x0005C4, 0x0005C5],
+ [0x000610, 0x00061A],
+ [0x00064B, 0x00065F],
+ [0x0006D6, 0x0006DC],
+ [0x0006DF, 0x0006E4],
+ [0x0006E7, 0x0006E8],
+ [0x0006EA, 0x0006ED],
+ [0x000730, 0x00074A],
+ [0x0007A6, 0x0007B0],
+ [0x0007EB, 0x0007F3],
+ [0x000816, 0x000819],
+ [0x00081B, 0x000823],
+ [0x000825, 0x000827],
+ [0x000829, 0x00082D],
+ [0x000859, 0x00085B],
+ [0x000898, 0x00089F],
+ [0x0008CA, 0x0008E1],
+ [0x0008E3, 0x000903],
+ [0x00093A, 0x00093C],
+ [0x00093E, 0x00094F],
+ [0x000951, 0x000957],
+ [0x000962, 0x000963],
+ [0x000981, 0x000983],
+ [0x0009BE, 0x0009C4],
+ [0x0009C7, 0x0009C8],
+ [0x0009CB, 0x0009CD],
+ [0x0009E2, 0x0009E3],
+ [0x000A01, 0x000A03],
+ [0x000A3E, 0x000A42],
+ [0x000A47, 0x000A48],
+ [0x000A4B, 0x000A4D],
+ [0x000A70, 0x000A71],
+ [0x000A81, 0x000A83],
+ [0x000ABE, 0x000AC5],
+ [0x000AC7, 0x000AC9],
+ [0x000ACB, 0x000ACD],
+ [0x000AE2, 0x000AE3],
+ [0x000AFA, 0x000AFF],
+ [0x000B01, 0x000B03],
+ [0x000B3E, 0x000B44],
+ [0x000B47, 0x000B48],
+ [0x000B4B, 0x000B4D],
+ [0x000B55, 0x000B57],
+ [0x000B62, 0x000B63],
+ [0x000BBE, 0x000BC2],
+ [0x000BC6, 0x000BC8],
+ [0x000BCA, 0x000BCD],
+ [0x000C00, 0x000C04],
+ [0x000C3E, 0x000C44],
+ [0x000C46, 0x000C48],
+ [0x000C4A, 0x000C4D],
+ [0x000C55, 0x000C56],
+ [0x000C62, 0x000C63],
+ [0x000C81, 0x000C83],
+ [0x000CBE, 0x000CC4],
+ [0x000CC6, 0x000CC8],
+ [0x000CCA, 0x000CCD],
+ [0x000CD5, 0x000CD6],
+ [0x000CE2, 0x000CE3],
+ [0x000D00, 0x000D03],
+ [0x000D3B, 0x000D3C],
+ [0x000D3E, 0x000D44],
+ [0x000D46, 0x000D48],
+ [0x000D4A, 0x000D4D],
+ [0x000D62, 0x000D63],
+ [0x000D81, 0x000D83],
+ [0x000DCF, 0x000DD4],
+ [0x000DD8, 0x000DDF],
+ [0x000DF2, 0x000DF3],
+ [0x000E34, 0x000E3A],
+ [0x000E47, 0x000E4E],
+ [0x000EB4, 0x000EBC],
+ [0x000EC8, 0x000ECE],
+ [0x000F18, 0x000F19],
+ [0x000F3E, 0x000F3F],
+ [0x000F71, 0x000F84],
+ [0x000F86, 0x000F87],
+ [0x000F8D, 0x000F97],
+ [0x000F99, 0x000FBC],
+ [0x00102B, 0x00103E],
+ [0x001056, 0x001059],
+ [0x00105E, 0x001060],
+ [0x001062, 0x001064],
+ [0x001067, 0x00106D],
+ [0x001071, 0x001074],
+ [0x001082, 0x00108D],
+ [0x00109A, 0x00109D],
+ [0x00135D, 0x00135F],
+ [0x001712, 0x001715],
+ [0x001732, 0x001734],
+ [0x001752, 0x001753],
+ [0x001772, 0x001773],
+ [0x0017B4, 0x0017D3],
+ [0x00180B, 0x00180D],
+ [0x001885, 0x001886],
+ [0x001920, 0x00192B],
+ [0x001930, 0x00193B],
+ [0x001A17, 0x001A1B],
+ [0x001A55, 0x001A5E],
+ [0x001A60, 0x001A7C],
+ [0x001AB0, 0x001ACE],
+ [0x001B00, 0x001B04],
+ [0x001B34, 0x001B44],
+ [0x001B6B, 0x001B73],
+ [0x001B80, 0x001B82],
+ [0x001BA1, 0x001BAD],
+ [0x001BE6, 0x001BF3],
+ [0x001C24, 0x001C37],
+ [0x001CD0, 0x001CD2],
+ [0x001CD4, 0x001CE8],
+ [0x001CF7, 0x001CF9],
+ [0x001DC0, 0x001DFF],
+ [0x0020D0, 0x0020F0],
+ [0x002CEF, 0x002CF1],
+ [0x002DE0, 0x002DFF],
+ [0x00302A, 0x00302F],
+ [0x003099, 0x00309A],
+ [0x00A66F, 0x00A672],
+ [0x00A674, 0x00A67D],
+ [0x00A69E, 0x00A69F],
+ [0x00A6F0, 0x00A6F1],
+ [0x00A823, 0x00A827],
+ [0x00A880, 0x00A881],
+ [0x00A8B4, 0x00A8C5],
+ [0x00A8E0, 0x00A8F1],
+ [0x00A926, 0x00A92D],
+ [0x00A947, 0x00A953],
+ [0x00A980, 0x00A983],
+ [0x00A9B3, 0x00A9C0],
+ [0x00AA29, 0x00AA36],
+ [0x00AA4C, 0x00AA4D],
+ [0x00AA7B, 0x00AA7D],
+ [0x00AAB2, 0x00AAB4],
+ [0x00AAB7, 0x00AAB8],
+ [0x00AABE, 0x00AABF],
+ [0x00AAEB, 0x00AAEF],
+ [0x00AAF5, 0x00AAF6],
+ [0x00ABE3, 0x00ABEA],
+ [0x00ABEC, 0x00ABED],
+ [0x00FE00, 0x00FE0F],
+ [0x00FE20, 0x00FE2F],
+ [0x010376, 0x01037A],
+ [0x010A01, 0x010A03],
+ [0x010A05, 0x010A06],
+ [0x010A0C, 0x010A0F],
+ [0x010A38, 0x010A3A],
+ [0x010AE5, 0x010AE6],
+ [0x010D24, 0x010D27],
+ [0x010EAB, 0x010EAC],
+ [0x010EFD, 0x010EFF],
+ [0x010F46, 0x010F50],
+ [0x010F82, 0x010F85],
+ [0x011000, 0x011002],
+ [0x011038, 0x011046],
+ [0x011073, 0x011074],
+ [0x01107F, 0x011082],
+ [0x0110B0, 0x0110BA],
+ [0x011100, 0x011102],
+ [0x011127, 0x011134],
+ [0x011145, 0x011146],
+ [0x011180, 0x011182],
+ [0x0111B3, 0x0111C0],
+ [0x0111C9, 0x0111CC],
+ [0x0111CE, 0x0111CF],
+ [0x01122C, 0x011237],
+ [0x0112DF, 0x0112EA],
+ [0x011300, 0x011303],
+ [0x01133B, 0x01133C],
+ [0x01133E, 0x011344],
+ [0x011347, 0x011348],
+ [0x01134B, 0x01134D],
+ [0x011362, 0x011363],
+ [0x011366, 0x01136C],
+ [0x011370, 0x011374],
+ [0x011435, 0x011446],
+ [0x0114B0, 0x0114C3],
+ [0x0115AF, 0x0115B5],
+ [0x0115B8, 0x0115C0],
+ [0x0115DC, 0x0115DD],
+ [0x011630, 0x011640],
+ [0x0116AB, 0x0116B7],
+ [0x01171D, 0x01172B],
+ [0x01182C, 0x01183A],
+ [0x011930, 0x011935],
+ [0x011937, 0x011938],
+ [0x01193B, 0x01193E],
+ [0x011942, 0x011943],
+ [0x0119D1, 0x0119D7],
+ [0x0119DA, 0x0119E0],
+ [0x011A01, 0x011A0A],
+ [0x011A33, 0x011A39],
+ [0x011A3B, 0x011A3E],
+ [0x011A51, 0x011A5B],
+ [0x011A8A, 0x011A99],
+ [0x011C2F, 0x011C36],
+ [0x011C38, 0x011C3F],
+ [0x011C92, 0x011CA7],
+ [0x011CA9, 0x011CB6],
+ [0x011D31, 0x011D36],
+ [0x011D3C, 0x011D3D],
+ [0x011D3F, 0x011D45],
+ [0x011D8A, 0x011D8E],
+ [0x011D90, 0x011D91],
+ [0x011D93, 0x011D97],
+ [0x011EF3, 0x011EF6],
+ [0x011F00, 0x011F01],
+ [0x011F34, 0x011F3A],
+ [0x011F3E, 0x011F42],
+ [0x013447, 0x013455],
+ [0x016AF0, 0x016AF4],
+ [0x016B30, 0x016B36],
+ [0x016F51, 0x016F87],
+ [0x016F8F, 0x016F92],
+ [0x016FF0, 0x016FF1],
+ [0x01BC9D, 0x01BC9E],
+ [0x01CF00, 0x01CF2D],
+ [0x01CF30, 0x01CF46],
+ [0x01D165, 0x01D169],
+ [0x01D16D, 0x01D172],
+ [0x01D17B, 0x01D182],
+ [0x01D185, 0x01D18B],
+ [0x01D1AA, 0x01D1AD],
+ [0x01D242, 0x01D244],
+ [0x01DA00, 0x01DA36],
+ [0x01DA3B, 0x01DA6C],
+ [0x01DA9B, 0x01DA9F],
+ [0x01DAA1, 0x01DAAF],
+ [0x01E000, 0x01E006],
+ [0x01E008, 0x01E018],
+ [0x01E01B, 0x01E021],
+ [0x01E023, 0x01E024],
+ [0x01E026, 0x01E02A],
+ [0x01E130, 0x01E136],
+ [0x01E2EC, 0x01E2EF],
+ [0x01E4EC, 0x01E4EF],
+ [0x01E8D0, 0x01E8D6],
+ [0x01E944, 0x01E94A],
+ [0x0E0100, 0x0E01EF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Mark}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Mark}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=M}+$/u,
+ matchSymbols,
+ "\\p{General_Category=M}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Combining_Mark}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Combining_Mark}"
+);
+testPropertyEscapes(
+ /^\p{gc=Mark}+$/u,
+ matchSymbols,
+ "\\p{gc=Mark}"
+);
+testPropertyEscapes(
+ /^\p{gc=M}+$/u,
+ matchSymbols,
+ "\\p{gc=M}"
+);
+testPropertyEscapes(
+ /^\p{gc=Combining_Mark}+$/u,
+ matchSymbols,
+ "\\p{gc=Combining_Mark}"
+);
+testPropertyEscapes(
+ /^\p{Mark}+$/u,
+ matchSymbols,
+ "\\p{Mark}"
+);
+testPropertyEscapes(
+ /^\p{M}+$/u,
+ matchSymbols,
+ "\\p{M}"
+);
+testPropertyEscapes(
+ /^\p{Combining_Mark}+$/u,
+ matchSymbols,
+ "\\p{Combining_Mark}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0005BE,
+ 0x0005C0,
+ 0x0005C3,
+ 0x0005C6,
+ 0x0006E9,
+ 0x00081A,
+ 0x000824,
+ 0x000828,
+ 0x0008E2,
+ 0x00093D,
+ 0x000950,
+ 0x0009BD,
+ 0x000A3D,
+ 0x000ABD,
+ 0x000AC6,
+ 0x000ACA,
+ 0x000B00,
+ 0x000B3D,
+ 0x000BC9,
+ 0x000C3D,
+ 0x000C45,
+ 0x000C49,
+ 0x000CBD,
+ 0x000CC5,
+ 0x000CC9,
+ 0x000D3D,
+ 0x000D45,
+ 0x000D49,
+ 0x000DD5,
+ 0x000DD7,
+ 0x000F36,
+ 0x000F38,
+ 0x000F85,
+ 0x000F98,
+ 0x001061,
+ 0x00108E,
+ 0x00180E,
+ 0x001A5F,
+ 0x001CD3,
+ 0x00A673,
+ 0x00AAB1,
+ 0x00AAC0,
+ 0x00ABEB,
+ 0x010A04,
+ 0x0111CD,
+ 0x01133D,
+ 0x011936,
+ 0x01193F,
+ 0x011941,
+ 0x011A3A,
+ 0x011C37,
+ 0x011CA8,
+ 0x011D3B,
+ 0x011D3E,
+ 0x011D46,
+ 0x011D8F,
+ 0x011D92,
+ 0x011F02,
+ 0x016F50,
+ 0x01DAA0,
+ 0x01E007,
+ 0x01E022,
+ 0x01E025
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0002FF],
+ [0x000370, 0x000482],
+ [0x00048A, 0x000590],
+ [0x0005C8, 0x00060F],
+ [0x00061B, 0x00064A],
+ [0x000660, 0x00066F],
+ [0x000671, 0x0006D5],
+ [0x0006DD, 0x0006DE],
+ [0x0006E5, 0x0006E6],
+ [0x0006EE, 0x000710],
+ [0x000712, 0x00072F],
+ [0x00074B, 0x0007A5],
+ [0x0007B1, 0x0007EA],
+ [0x0007F4, 0x0007FC],
+ [0x0007FE, 0x000815],
+ [0x00082E, 0x000858],
+ [0x00085C, 0x000897],
+ [0x0008A0, 0x0008C9],
+ [0x000904, 0x000939],
+ [0x000958, 0x000961],
+ [0x000964, 0x000980],
+ [0x000984, 0x0009BB],
+ [0x0009C5, 0x0009C6],
+ [0x0009C9, 0x0009CA],
+ [0x0009CE, 0x0009D6],
+ [0x0009D8, 0x0009E1],
+ [0x0009E4, 0x0009FD],
+ [0x0009FF, 0x000A00],
+ [0x000A04, 0x000A3B],
+ [0x000A43, 0x000A46],
+ [0x000A49, 0x000A4A],
+ [0x000A4E, 0x000A50],
+ [0x000A52, 0x000A6F],
+ [0x000A72, 0x000A74],
+ [0x000A76, 0x000A80],
+ [0x000A84, 0x000ABB],
+ [0x000ACE, 0x000AE1],
+ [0x000AE4, 0x000AF9],
+ [0x000B04, 0x000B3B],
+ [0x000B45, 0x000B46],
+ [0x000B49, 0x000B4A],
+ [0x000B4E, 0x000B54],
+ [0x000B58, 0x000B61],
+ [0x000B64, 0x000B81],
+ [0x000B83, 0x000BBD],
+ [0x000BC3, 0x000BC5],
+ [0x000BCE, 0x000BD6],
+ [0x000BD8, 0x000BFF],
+ [0x000C05, 0x000C3B],
+ [0x000C4E, 0x000C54],
+ [0x000C57, 0x000C61],
+ [0x000C64, 0x000C80],
+ [0x000C84, 0x000CBB],
+ [0x000CCE, 0x000CD4],
+ [0x000CD7, 0x000CE1],
+ [0x000CE4, 0x000CF2],
+ [0x000CF4, 0x000CFF],
+ [0x000D04, 0x000D3A],
+ [0x000D4E, 0x000D56],
+ [0x000D58, 0x000D61],
+ [0x000D64, 0x000D80],
+ [0x000D84, 0x000DC9],
+ [0x000DCB, 0x000DCE],
+ [0x000DE0, 0x000DF1],
+ [0x000DF4, 0x000E30],
+ [0x000E32, 0x000E33],
+ [0x000E3B, 0x000E46],
+ [0x000E4F, 0x000EB0],
+ [0x000EB2, 0x000EB3],
+ [0x000EBD, 0x000EC7],
+ [0x000ECF, 0x000F17],
+ [0x000F1A, 0x000F34],
+ [0x000F3A, 0x000F3D],
+ [0x000F40, 0x000F70],
+ [0x000F88, 0x000F8C],
+ [0x000FBD, 0x000FC5],
+ [0x000FC7, 0x00102A],
+ [0x00103F, 0x001055],
+ [0x00105A, 0x00105D],
+ [0x001065, 0x001066],
+ [0x00106E, 0x001070],
+ [0x001075, 0x001081],
+ [0x001090, 0x001099],
+ [0x00109E, 0x00135C],
+ [0x001360, 0x001711],
+ [0x001716, 0x001731],
+ [0x001735, 0x001751],
+ [0x001754, 0x001771],
+ [0x001774, 0x0017B3],
+ [0x0017D4, 0x0017DC],
+ [0x0017DE, 0x00180A],
+ [0x001810, 0x001884],
+ [0x001887, 0x0018A8],
+ [0x0018AA, 0x00191F],
+ [0x00192C, 0x00192F],
+ [0x00193C, 0x001A16],
+ [0x001A1C, 0x001A54],
+ [0x001A7D, 0x001A7E],
+ [0x001A80, 0x001AAF],
+ [0x001ACF, 0x001AFF],
+ [0x001B05, 0x001B33],
+ [0x001B45, 0x001B6A],
+ [0x001B74, 0x001B7F],
+ [0x001B83, 0x001BA0],
+ [0x001BAE, 0x001BE5],
+ [0x001BF4, 0x001C23],
+ [0x001C38, 0x001CCF],
+ [0x001CE9, 0x001CEC],
+ [0x001CEE, 0x001CF3],
+ [0x001CF5, 0x001CF6],
+ [0x001CFA, 0x001DBF],
+ [0x001E00, 0x0020CF],
+ [0x0020F1, 0x002CEE],
+ [0x002CF2, 0x002D7E],
+ [0x002D80, 0x002DDF],
+ [0x002E00, 0x003029],
+ [0x003030, 0x003098],
+ [0x00309B, 0x00A66E],
+ [0x00A67E, 0x00A69D],
+ [0x00A6A0, 0x00A6EF],
+ [0x00A6F2, 0x00A801],
+ [0x00A803, 0x00A805],
+ [0x00A807, 0x00A80A],
+ [0x00A80C, 0x00A822],
+ [0x00A828, 0x00A82B],
+ [0x00A82D, 0x00A87F],
+ [0x00A882, 0x00A8B3],
+ [0x00A8C6, 0x00A8DF],
+ [0x00A8F2, 0x00A8FE],
+ [0x00A900, 0x00A925],
+ [0x00A92E, 0x00A946],
+ [0x00A954, 0x00A97F],
+ [0x00A984, 0x00A9B2],
+ [0x00A9C1, 0x00A9E4],
+ [0x00A9E6, 0x00AA28],
+ [0x00AA37, 0x00AA42],
+ [0x00AA44, 0x00AA4B],
+ [0x00AA4E, 0x00AA7A],
+ [0x00AA7E, 0x00AAAF],
+ [0x00AAB5, 0x00AAB6],
+ [0x00AAB9, 0x00AABD],
+ [0x00AAC2, 0x00AAEA],
+ [0x00AAF0, 0x00AAF4],
+ [0x00AAF7, 0x00ABE2],
+ [0x00ABEE, 0x00DBFF],
+ [0x00E000, 0x00FB1D],
+ [0x00FB1F, 0x00FDFF],
+ [0x00FE10, 0x00FE1F],
+ [0x00FE30, 0x0101FC],
+ [0x0101FE, 0x0102DF],
+ [0x0102E1, 0x010375],
+ [0x01037B, 0x010A00],
+ [0x010A07, 0x010A0B],
+ [0x010A10, 0x010A37],
+ [0x010A3B, 0x010A3E],
+ [0x010A40, 0x010AE4],
+ [0x010AE7, 0x010D23],
+ [0x010D28, 0x010EAA],
+ [0x010EAD, 0x010EFC],
+ [0x010F00, 0x010F45],
+ [0x010F51, 0x010F81],
+ [0x010F86, 0x010FFF],
+ [0x011003, 0x011037],
+ [0x011047, 0x01106F],
+ [0x011071, 0x011072],
+ [0x011075, 0x01107E],
+ [0x011083, 0x0110AF],
+ [0x0110BB, 0x0110C1],
+ [0x0110C3, 0x0110FF],
+ [0x011103, 0x011126],
+ [0x011135, 0x011144],
+ [0x011147, 0x011172],
+ [0x011174, 0x01117F],
+ [0x011183, 0x0111B2],
+ [0x0111C1, 0x0111C8],
+ [0x0111D0, 0x01122B],
+ [0x011238, 0x01123D],
+ [0x01123F, 0x011240],
+ [0x011242, 0x0112DE],
+ [0x0112EB, 0x0112FF],
+ [0x011304, 0x01133A],
+ [0x011345, 0x011346],
+ [0x011349, 0x01134A],
+ [0x01134E, 0x011356],
+ [0x011358, 0x011361],
+ [0x011364, 0x011365],
+ [0x01136D, 0x01136F],
+ [0x011375, 0x011434],
+ [0x011447, 0x01145D],
+ [0x01145F, 0x0114AF],
+ [0x0114C4, 0x0115AE],
+ [0x0115B6, 0x0115B7],
+ [0x0115C1, 0x0115DB],
+ [0x0115DE, 0x01162F],
+ [0x011641, 0x0116AA],
+ [0x0116B8, 0x01171C],
+ [0x01172C, 0x01182B],
+ [0x01183B, 0x01192F],
+ [0x011939, 0x01193A],
+ [0x011944, 0x0119D0],
+ [0x0119D8, 0x0119D9],
+ [0x0119E1, 0x0119E3],
+ [0x0119E5, 0x011A00],
+ [0x011A0B, 0x011A32],
+ [0x011A3F, 0x011A46],
+ [0x011A48, 0x011A50],
+ [0x011A5C, 0x011A89],
+ [0x011A9A, 0x011C2E],
+ [0x011C40, 0x011C91],
+ [0x011CB7, 0x011D30],
+ [0x011D37, 0x011D39],
+ [0x011D48, 0x011D89],
+ [0x011D98, 0x011EF2],
+ [0x011EF7, 0x011EFF],
+ [0x011F04, 0x011F33],
+ [0x011F3B, 0x011F3D],
+ [0x011F43, 0x01343F],
+ [0x013441, 0x013446],
+ [0x013456, 0x016AEF],
+ [0x016AF5, 0x016B2F],
+ [0x016B37, 0x016F4E],
+ [0x016F88, 0x016F8E],
+ [0x016F93, 0x016FE3],
+ [0x016FE5, 0x016FEF],
+ [0x016FF2, 0x01BC9C],
+ [0x01BC9F, 0x01CEFF],
+ [0x01CF2E, 0x01CF2F],
+ [0x01CF47, 0x01D164],
+ [0x01D16A, 0x01D16C],
+ [0x01D173, 0x01D17A],
+ [0x01D183, 0x01D184],
+ [0x01D18C, 0x01D1A9],
+ [0x01D1AE, 0x01D241],
+ [0x01D245, 0x01D9FF],
+ [0x01DA37, 0x01DA3A],
+ [0x01DA6D, 0x01DA74],
+ [0x01DA76, 0x01DA83],
+ [0x01DA85, 0x01DA9A],
+ [0x01DAB0, 0x01DFFF],
+ [0x01E019, 0x01E01A],
+ [0x01E02B, 0x01E08E],
+ [0x01E090, 0x01E12F],
+ [0x01E137, 0x01E2AD],
+ [0x01E2AF, 0x01E2EB],
+ [0x01E2F0, 0x01E4EB],
+ [0x01E4F0, 0x01E8CF],
+ [0x01E8D7, 0x01E943],
+ [0x01E94B, 0x0E00FF],
+ [0x0E01F0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Mark}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Mark}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=M}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=M}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Combining_Mark}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Combining_Mark}"
+);
+testPropertyEscapes(
+ /^\P{gc=Mark}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Mark}"
+);
+testPropertyEscapes(
+ /^\P{gc=M}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=M}"
+);
+testPropertyEscapes(
+ /^\P{gc=Combining_Mark}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Combining_Mark}"
+);
+testPropertyEscapes(
+ /^\P{Mark}+$/u,
+ nonMatchSymbols,
+ "\\P{Mark}"
+);
+testPropertyEscapes(
+ /^\P{M}+$/u,
+ nonMatchSymbols,
+ "\\P{M}"
+);
+testPropertyEscapes(
+ /^\P{Combining_Mark}+$/u,
+ nonMatchSymbols,
+ "\\P{Combining_Mark}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Math_Symbol.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Math_Symbol.js
new file mode 100644
index 0000000000..563d334e4e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Math_Symbol.js
@@ -0,0 +1,221 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Math_Symbol`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00002B,
+ 0x00007C,
+ 0x00007E,
+ 0x0000AC,
+ 0x0000B1,
+ 0x0000D7,
+ 0x0000F7,
+ 0x0003F6,
+ 0x002044,
+ 0x002052,
+ 0x002118,
+ 0x00214B,
+ 0x0021A0,
+ 0x0021A3,
+ 0x0021A6,
+ 0x0021AE,
+ 0x0021D2,
+ 0x0021D4,
+ 0x00237C,
+ 0x0025B7,
+ 0x0025C1,
+ 0x00266F,
+ 0x00FB29,
+ 0x00FE62,
+ 0x00FF0B,
+ 0x00FF5C,
+ 0x00FF5E,
+ 0x00FFE2,
+ 0x01D6C1,
+ 0x01D6DB,
+ 0x01D6FB,
+ 0x01D715,
+ 0x01D735,
+ 0x01D74F,
+ 0x01D76F,
+ 0x01D789,
+ 0x01D7A9,
+ 0x01D7C3
+ ],
+ ranges: [
+ [0x00003C, 0x00003E],
+ [0x000606, 0x000608],
+ [0x00207A, 0x00207C],
+ [0x00208A, 0x00208C],
+ [0x002140, 0x002144],
+ [0x002190, 0x002194],
+ [0x00219A, 0x00219B],
+ [0x0021CE, 0x0021CF],
+ [0x0021F4, 0x0022FF],
+ [0x002320, 0x002321],
+ [0x00239B, 0x0023B3],
+ [0x0023DC, 0x0023E1],
+ [0x0025F8, 0x0025FF],
+ [0x0027C0, 0x0027C4],
+ [0x0027C7, 0x0027E5],
+ [0x0027F0, 0x0027FF],
+ [0x002900, 0x002982],
+ [0x002999, 0x0029D7],
+ [0x0029DC, 0x0029FB],
+ [0x0029FE, 0x002AFF],
+ [0x002B30, 0x002B44],
+ [0x002B47, 0x002B4C],
+ [0x00FE64, 0x00FE66],
+ [0x00FF1C, 0x00FF1E],
+ [0x00FFE9, 0x00FFEC],
+ [0x01EEF0, 0x01EEF1]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Math_Symbol}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Math_Symbol}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Sm}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Sm}"
+);
+testPropertyEscapes(
+ /^\p{gc=Math_Symbol}+$/u,
+ matchSymbols,
+ "\\p{gc=Math_Symbol}"
+);
+testPropertyEscapes(
+ /^\p{gc=Sm}+$/u,
+ matchSymbols,
+ "\\p{gc=Sm}"
+);
+testPropertyEscapes(
+ /^\p{Math_Symbol}+$/u,
+ matchSymbols,
+ "\\p{Math_Symbol}"
+);
+testPropertyEscapes(
+ /^\p{Sm}+$/u,
+ matchSymbols,
+ "\\p{Sm}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00007D,
+ 0x0021D3,
+ 0x00FE63,
+ 0x00FF5D
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00002A],
+ [0x00002C, 0x00003B],
+ [0x00003F, 0x00007B],
+ [0x00007F, 0x0000AB],
+ [0x0000AD, 0x0000B0],
+ [0x0000B2, 0x0000D6],
+ [0x0000D8, 0x0000F6],
+ [0x0000F8, 0x0003F5],
+ [0x0003F7, 0x000605],
+ [0x000609, 0x002043],
+ [0x002045, 0x002051],
+ [0x002053, 0x002079],
+ [0x00207D, 0x002089],
+ [0x00208D, 0x002117],
+ [0x002119, 0x00213F],
+ [0x002145, 0x00214A],
+ [0x00214C, 0x00218F],
+ [0x002195, 0x002199],
+ [0x00219C, 0x00219F],
+ [0x0021A1, 0x0021A2],
+ [0x0021A4, 0x0021A5],
+ [0x0021A7, 0x0021AD],
+ [0x0021AF, 0x0021CD],
+ [0x0021D0, 0x0021D1],
+ [0x0021D5, 0x0021F3],
+ [0x002300, 0x00231F],
+ [0x002322, 0x00237B],
+ [0x00237D, 0x00239A],
+ [0x0023B4, 0x0023DB],
+ [0x0023E2, 0x0025B6],
+ [0x0025B8, 0x0025C0],
+ [0x0025C2, 0x0025F7],
+ [0x002600, 0x00266E],
+ [0x002670, 0x0027BF],
+ [0x0027C5, 0x0027C6],
+ [0x0027E6, 0x0027EF],
+ [0x002800, 0x0028FF],
+ [0x002983, 0x002998],
+ [0x0029D8, 0x0029DB],
+ [0x0029FC, 0x0029FD],
+ [0x002B00, 0x002B2F],
+ [0x002B45, 0x002B46],
+ [0x002B4D, 0x00DBFF],
+ [0x00E000, 0x00FB28],
+ [0x00FB2A, 0x00FE61],
+ [0x00FE67, 0x00FF0A],
+ [0x00FF0C, 0x00FF1B],
+ [0x00FF1F, 0x00FF5B],
+ [0x00FF5F, 0x00FFE1],
+ [0x00FFE3, 0x00FFE8],
+ [0x00FFED, 0x01D6C0],
+ [0x01D6C2, 0x01D6DA],
+ [0x01D6DC, 0x01D6FA],
+ [0x01D6FC, 0x01D714],
+ [0x01D716, 0x01D734],
+ [0x01D736, 0x01D74E],
+ [0x01D750, 0x01D76E],
+ [0x01D770, 0x01D788],
+ [0x01D78A, 0x01D7A8],
+ [0x01D7AA, 0x01D7C2],
+ [0x01D7C4, 0x01EEEF],
+ [0x01EEF2, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Math_Symbol}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Math_Symbol}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Sm}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Sm}"
+);
+testPropertyEscapes(
+ /^\P{gc=Math_Symbol}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Math_Symbol}"
+);
+testPropertyEscapes(
+ /^\P{gc=Sm}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Sm}"
+);
+testPropertyEscapes(
+ /^\P{Math_Symbol}+$/u,
+ nonMatchSymbols,
+ "\\P{Math_Symbol}"
+);
+testPropertyEscapes(
+ /^\P{Sm}+$/u,
+ nonMatchSymbols,
+ "\\P{Sm}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Modifier_Letter.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Modifier_Letter.js
new file mode 100644
index 0000000000..5569499ea6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Modifier_Letter.js
@@ -0,0 +1,235 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Modifier_Letter`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0002EC,
+ 0x0002EE,
+ 0x000374,
+ 0x00037A,
+ 0x000559,
+ 0x000640,
+ 0x0007FA,
+ 0x00081A,
+ 0x000824,
+ 0x000828,
+ 0x0008C9,
+ 0x000971,
+ 0x000E46,
+ 0x000EC6,
+ 0x0010FC,
+ 0x0017D7,
+ 0x001843,
+ 0x001AA7,
+ 0x001D78,
+ 0x002071,
+ 0x00207F,
+ 0x002D6F,
+ 0x002E2F,
+ 0x003005,
+ 0x00303B,
+ 0x00A015,
+ 0x00A60C,
+ 0x00A67F,
+ 0x00A770,
+ 0x00A788,
+ 0x00A9CF,
+ 0x00A9E6,
+ 0x00AA70,
+ 0x00AADD,
+ 0x00AB69,
+ 0x00FF70,
+ 0x016FE3,
+ 0x01E4EB,
+ 0x01E94B
+ ],
+ ranges: [
+ [0x0002B0, 0x0002C1],
+ [0x0002C6, 0x0002D1],
+ [0x0002E0, 0x0002E4],
+ [0x0006E5, 0x0006E6],
+ [0x0007F4, 0x0007F5],
+ [0x001C78, 0x001C7D],
+ [0x001D2C, 0x001D6A],
+ [0x001D9B, 0x001DBF],
+ [0x002090, 0x00209C],
+ [0x002C7C, 0x002C7D],
+ [0x003031, 0x003035],
+ [0x00309D, 0x00309E],
+ [0x0030FC, 0x0030FE],
+ [0x00A4F8, 0x00A4FD],
+ [0x00A69C, 0x00A69D],
+ [0x00A717, 0x00A71F],
+ [0x00A7F2, 0x00A7F4],
+ [0x00A7F8, 0x00A7F9],
+ [0x00AAF3, 0x00AAF4],
+ [0x00AB5C, 0x00AB5F],
+ [0x00FF9E, 0x00FF9F],
+ [0x010780, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x016B40, 0x016B43],
+ [0x016F93, 0x016F9F],
+ [0x016FE0, 0x016FE1],
+ [0x01AFF0, 0x01AFF3],
+ [0x01AFF5, 0x01AFFB],
+ [0x01AFFD, 0x01AFFE],
+ [0x01E030, 0x01E06D],
+ [0x01E137, 0x01E13D]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Modifier_Letter}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Modifier_Letter}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Lm}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Lm}"
+);
+testPropertyEscapes(
+ /^\p{gc=Modifier_Letter}+$/u,
+ matchSymbols,
+ "\\p{gc=Modifier_Letter}"
+);
+testPropertyEscapes(
+ /^\p{gc=Lm}+$/u,
+ matchSymbols,
+ "\\p{gc=Lm}"
+);
+testPropertyEscapes(
+ /^\p{Modifier_Letter}+$/u,
+ matchSymbols,
+ "\\p{Modifier_Letter}"
+);
+testPropertyEscapes(
+ /^\p{Lm}+$/u,
+ matchSymbols,
+ "\\p{Lm}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0002ED,
+ 0x010786,
+ 0x0107B1,
+ 0x016FE2,
+ 0x01AFF4,
+ 0x01AFFC
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0002AF],
+ [0x0002C2, 0x0002C5],
+ [0x0002D2, 0x0002DF],
+ [0x0002E5, 0x0002EB],
+ [0x0002EF, 0x000373],
+ [0x000375, 0x000379],
+ [0x00037B, 0x000558],
+ [0x00055A, 0x00063F],
+ [0x000641, 0x0006E4],
+ [0x0006E7, 0x0007F3],
+ [0x0007F6, 0x0007F9],
+ [0x0007FB, 0x000819],
+ [0x00081B, 0x000823],
+ [0x000825, 0x000827],
+ [0x000829, 0x0008C8],
+ [0x0008CA, 0x000970],
+ [0x000972, 0x000E45],
+ [0x000E47, 0x000EC5],
+ [0x000EC7, 0x0010FB],
+ [0x0010FD, 0x0017D6],
+ [0x0017D8, 0x001842],
+ [0x001844, 0x001AA6],
+ [0x001AA8, 0x001C77],
+ [0x001C7E, 0x001D2B],
+ [0x001D6B, 0x001D77],
+ [0x001D79, 0x001D9A],
+ [0x001DC0, 0x002070],
+ [0x002072, 0x00207E],
+ [0x002080, 0x00208F],
+ [0x00209D, 0x002C7B],
+ [0x002C7E, 0x002D6E],
+ [0x002D70, 0x002E2E],
+ [0x002E30, 0x003004],
+ [0x003006, 0x003030],
+ [0x003036, 0x00303A],
+ [0x00303C, 0x00309C],
+ [0x00309F, 0x0030FB],
+ [0x0030FF, 0x00A014],
+ [0x00A016, 0x00A4F7],
+ [0x00A4FE, 0x00A60B],
+ [0x00A60D, 0x00A67E],
+ [0x00A680, 0x00A69B],
+ [0x00A69E, 0x00A716],
+ [0x00A720, 0x00A76F],
+ [0x00A771, 0x00A787],
+ [0x00A789, 0x00A7F1],
+ [0x00A7F5, 0x00A7F7],
+ [0x00A7FA, 0x00A9CE],
+ [0x00A9D0, 0x00A9E5],
+ [0x00A9E7, 0x00AA6F],
+ [0x00AA71, 0x00AADC],
+ [0x00AADE, 0x00AAF2],
+ [0x00AAF5, 0x00AB5B],
+ [0x00AB60, 0x00AB68],
+ [0x00AB6A, 0x00DBFF],
+ [0x00E000, 0x00FF6F],
+ [0x00FF71, 0x00FF9D],
+ [0x00FFA0, 0x01077F],
+ [0x0107BB, 0x016B3F],
+ [0x016B44, 0x016F92],
+ [0x016FA0, 0x016FDF],
+ [0x016FE4, 0x01AFEF],
+ [0x01AFFF, 0x01E02F],
+ [0x01E06E, 0x01E136],
+ [0x01E13E, 0x01E4EA],
+ [0x01E4EC, 0x01E94A],
+ [0x01E94C, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Modifier_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Modifier_Letter}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Lm}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Lm}"
+);
+testPropertyEscapes(
+ /^\P{gc=Modifier_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Modifier_Letter}"
+);
+testPropertyEscapes(
+ /^\P{gc=Lm}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Lm}"
+);
+testPropertyEscapes(
+ /^\P{Modifier_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{Modifier_Letter}"
+);
+testPropertyEscapes(
+ /^\P{Lm}+$/u,
+ nonMatchSymbols,
+ "\\P{Lm}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Modifier_Symbol.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Modifier_Symbol.js
new file mode 100644
index 0000000000..b40382c0dc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Modifier_Symbol.js
@@ -0,0 +1,155 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Modifier_Symbol`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00005E,
+ 0x000060,
+ 0x0000A8,
+ 0x0000AF,
+ 0x0000B4,
+ 0x0000B8,
+ 0x0002ED,
+ 0x000375,
+ 0x000888,
+ 0x001FBD,
+ 0x00AB5B,
+ 0x00FF3E,
+ 0x00FF40,
+ 0x00FFE3
+ ],
+ ranges: [
+ [0x0002C2, 0x0002C5],
+ [0x0002D2, 0x0002DF],
+ [0x0002E5, 0x0002EB],
+ [0x0002EF, 0x0002FF],
+ [0x000384, 0x000385],
+ [0x001FBF, 0x001FC1],
+ [0x001FCD, 0x001FCF],
+ [0x001FDD, 0x001FDF],
+ [0x001FED, 0x001FEF],
+ [0x001FFD, 0x001FFE],
+ [0x00309B, 0x00309C],
+ [0x00A700, 0x00A716],
+ [0x00A720, 0x00A721],
+ [0x00A789, 0x00A78A],
+ [0x00AB6A, 0x00AB6B],
+ [0x00FBB2, 0x00FBC2],
+ [0x01F3FB, 0x01F3FF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Modifier_Symbol}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Modifier_Symbol}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Sk}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Sk}"
+);
+testPropertyEscapes(
+ /^\p{gc=Modifier_Symbol}+$/u,
+ matchSymbols,
+ "\\p{gc=Modifier_Symbol}"
+);
+testPropertyEscapes(
+ /^\p{gc=Sk}+$/u,
+ matchSymbols,
+ "\\p{gc=Sk}"
+);
+testPropertyEscapes(
+ /^\p{Modifier_Symbol}+$/u,
+ matchSymbols,
+ "\\p{Modifier_Symbol}"
+);
+testPropertyEscapes(
+ /^\p{Sk}+$/u,
+ matchSymbols,
+ "\\p{Sk}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00005F,
+ 0x0002EC,
+ 0x0002EE,
+ 0x001FBE,
+ 0x00FF3F
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00005D],
+ [0x000061, 0x0000A7],
+ [0x0000A9, 0x0000AE],
+ [0x0000B0, 0x0000B3],
+ [0x0000B5, 0x0000B7],
+ [0x0000B9, 0x0002C1],
+ [0x0002C6, 0x0002D1],
+ [0x0002E0, 0x0002E4],
+ [0x000300, 0x000374],
+ [0x000376, 0x000383],
+ [0x000386, 0x000887],
+ [0x000889, 0x001FBC],
+ [0x001FC2, 0x001FCC],
+ [0x001FD0, 0x001FDC],
+ [0x001FE0, 0x001FEC],
+ [0x001FF0, 0x001FFC],
+ [0x001FFF, 0x00309A],
+ [0x00309D, 0x00A6FF],
+ [0x00A717, 0x00A71F],
+ [0x00A722, 0x00A788],
+ [0x00A78B, 0x00AB5A],
+ [0x00AB5C, 0x00AB69],
+ [0x00AB6C, 0x00DBFF],
+ [0x00E000, 0x00FBB1],
+ [0x00FBC3, 0x00FF3D],
+ [0x00FF41, 0x00FFE2],
+ [0x00FFE4, 0x01F3FA],
+ [0x01F400, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Modifier_Symbol}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Modifier_Symbol}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Sk}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Sk}"
+);
+testPropertyEscapes(
+ /^\P{gc=Modifier_Symbol}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Modifier_Symbol}"
+);
+testPropertyEscapes(
+ /^\P{gc=Sk}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Sk}"
+);
+testPropertyEscapes(
+ /^\P{Modifier_Symbol}+$/u,
+ nonMatchSymbols,
+ "\\P{Modifier_Symbol}"
+);
+testPropertyEscapes(
+ /^\P{Sk}+$/u,
+ nonMatchSymbols,
+ "\\P{Sk}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Nonspacing_Mark.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Nonspacing_Mark.js
new file mode 100644
index 0000000000..4a987a35aa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Nonspacing_Mark.js
@@ -0,0 +1,785 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Nonspacing_Mark`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0005BF,
+ 0x0005C7,
+ 0x000670,
+ 0x000711,
+ 0x0007FD,
+ 0x00093A,
+ 0x00093C,
+ 0x00094D,
+ 0x000981,
+ 0x0009BC,
+ 0x0009CD,
+ 0x0009FE,
+ 0x000A3C,
+ 0x000A51,
+ 0x000A75,
+ 0x000ABC,
+ 0x000ACD,
+ 0x000B01,
+ 0x000B3C,
+ 0x000B3F,
+ 0x000B4D,
+ 0x000B82,
+ 0x000BC0,
+ 0x000BCD,
+ 0x000C00,
+ 0x000C04,
+ 0x000C3C,
+ 0x000C81,
+ 0x000CBC,
+ 0x000CBF,
+ 0x000CC6,
+ 0x000D4D,
+ 0x000D81,
+ 0x000DCA,
+ 0x000DD6,
+ 0x000E31,
+ 0x000EB1,
+ 0x000F35,
+ 0x000F37,
+ 0x000F39,
+ 0x000FC6,
+ 0x001082,
+ 0x00108D,
+ 0x00109D,
+ 0x0017C6,
+ 0x0017DD,
+ 0x00180F,
+ 0x0018A9,
+ 0x001932,
+ 0x001A1B,
+ 0x001A56,
+ 0x001A60,
+ 0x001A62,
+ 0x001A7F,
+ 0x001B34,
+ 0x001B3C,
+ 0x001B42,
+ 0x001BE6,
+ 0x001BED,
+ 0x001CED,
+ 0x001CF4,
+ 0x0020E1,
+ 0x002D7F,
+ 0x00A66F,
+ 0x00A802,
+ 0x00A806,
+ 0x00A80B,
+ 0x00A82C,
+ 0x00A8FF,
+ 0x00A9B3,
+ 0x00A9E5,
+ 0x00AA43,
+ 0x00AA4C,
+ 0x00AA7C,
+ 0x00AAB0,
+ 0x00AAC1,
+ 0x00AAF6,
+ 0x00ABE5,
+ 0x00ABE8,
+ 0x00ABED,
+ 0x00FB1E,
+ 0x0101FD,
+ 0x0102E0,
+ 0x010A3F,
+ 0x011001,
+ 0x011070,
+ 0x0110C2,
+ 0x011173,
+ 0x0111CF,
+ 0x011234,
+ 0x01123E,
+ 0x011241,
+ 0x0112DF,
+ 0x011340,
+ 0x011446,
+ 0x01145E,
+ 0x0114BA,
+ 0x01163D,
+ 0x0116AB,
+ 0x0116AD,
+ 0x0116B7,
+ 0x01193E,
+ 0x011943,
+ 0x0119E0,
+ 0x011A47,
+ 0x011C3F,
+ 0x011D3A,
+ 0x011D47,
+ 0x011D95,
+ 0x011D97,
+ 0x011F40,
+ 0x011F42,
+ 0x013440,
+ 0x016F4F,
+ 0x016FE4,
+ 0x01DA75,
+ 0x01DA84,
+ 0x01E08F,
+ 0x01E2AE
+ ],
+ ranges: [
+ [0x000300, 0x00036F],
+ [0x000483, 0x000487],
+ [0x000591, 0x0005BD],
+ [0x0005C1, 0x0005C2],
+ [0x0005C4, 0x0005C5],
+ [0x000610, 0x00061A],
+ [0x00064B, 0x00065F],
+ [0x0006D6, 0x0006DC],
+ [0x0006DF, 0x0006E4],
+ [0x0006E7, 0x0006E8],
+ [0x0006EA, 0x0006ED],
+ [0x000730, 0x00074A],
+ [0x0007A6, 0x0007B0],
+ [0x0007EB, 0x0007F3],
+ [0x000816, 0x000819],
+ [0x00081B, 0x000823],
+ [0x000825, 0x000827],
+ [0x000829, 0x00082D],
+ [0x000859, 0x00085B],
+ [0x000898, 0x00089F],
+ [0x0008CA, 0x0008E1],
+ [0x0008E3, 0x000902],
+ [0x000941, 0x000948],
+ [0x000951, 0x000957],
+ [0x000962, 0x000963],
+ [0x0009C1, 0x0009C4],
+ [0x0009E2, 0x0009E3],
+ [0x000A01, 0x000A02],
+ [0x000A41, 0x000A42],
+ [0x000A47, 0x000A48],
+ [0x000A4B, 0x000A4D],
+ [0x000A70, 0x000A71],
+ [0x000A81, 0x000A82],
+ [0x000AC1, 0x000AC5],
+ [0x000AC7, 0x000AC8],
+ [0x000AE2, 0x000AE3],
+ [0x000AFA, 0x000AFF],
+ [0x000B41, 0x000B44],
+ [0x000B55, 0x000B56],
+ [0x000B62, 0x000B63],
+ [0x000C3E, 0x000C40],
+ [0x000C46, 0x000C48],
+ [0x000C4A, 0x000C4D],
+ [0x000C55, 0x000C56],
+ [0x000C62, 0x000C63],
+ [0x000CCC, 0x000CCD],
+ [0x000CE2, 0x000CE3],
+ [0x000D00, 0x000D01],
+ [0x000D3B, 0x000D3C],
+ [0x000D41, 0x000D44],
+ [0x000D62, 0x000D63],
+ [0x000DD2, 0x000DD4],
+ [0x000E34, 0x000E3A],
+ [0x000E47, 0x000E4E],
+ [0x000EB4, 0x000EBC],
+ [0x000EC8, 0x000ECE],
+ [0x000F18, 0x000F19],
+ [0x000F71, 0x000F7E],
+ [0x000F80, 0x000F84],
+ [0x000F86, 0x000F87],
+ [0x000F8D, 0x000F97],
+ [0x000F99, 0x000FBC],
+ [0x00102D, 0x001030],
+ [0x001032, 0x001037],
+ [0x001039, 0x00103A],
+ [0x00103D, 0x00103E],
+ [0x001058, 0x001059],
+ [0x00105E, 0x001060],
+ [0x001071, 0x001074],
+ [0x001085, 0x001086],
+ [0x00135D, 0x00135F],
+ [0x001712, 0x001714],
+ [0x001732, 0x001733],
+ [0x001752, 0x001753],
+ [0x001772, 0x001773],
+ [0x0017B4, 0x0017B5],
+ [0x0017B7, 0x0017BD],
+ [0x0017C9, 0x0017D3],
+ [0x00180B, 0x00180D],
+ [0x001885, 0x001886],
+ [0x001920, 0x001922],
+ [0x001927, 0x001928],
+ [0x001939, 0x00193B],
+ [0x001A17, 0x001A18],
+ [0x001A58, 0x001A5E],
+ [0x001A65, 0x001A6C],
+ [0x001A73, 0x001A7C],
+ [0x001AB0, 0x001ABD],
+ [0x001ABF, 0x001ACE],
+ [0x001B00, 0x001B03],
+ [0x001B36, 0x001B3A],
+ [0x001B6B, 0x001B73],
+ [0x001B80, 0x001B81],
+ [0x001BA2, 0x001BA5],
+ [0x001BA8, 0x001BA9],
+ [0x001BAB, 0x001BAD],
+ [0x001BE8, 0x001BE9],
+ [0x001BEF, 0x001BF1],
+ [0x001C2C, 0x001C33],
+ [0x001C36, 0x001C37],
+ [0x001CD0, 0x001CD2],
+ [0x001CD4, 0x001CE0],
+ [0x001CE2, 0x001CE8],
+ [0x001CF8, 0x001CF9],
+ [0x001DC0, 0x001DFF],
+ [0x0020D0, 0x0020DC],
+ [0x0020E5, 0x0020F0],
+ [0x002CEF, 0x002CF1],
+ [0x002DE0, 0x002DFF],
+ [0x00302A, 0x00302D],
+ [0x003099, 0x00309A],
+ [0x00A674, 0x00A67D],
+ [0x00A69E, 0x00A69F],
+ [0x00A6F0, 0x00A6F1],
+ [0x00A825, 0x00A826],
+ [0x00A8C4, 0x00A8C5],
+ [0x00A8E0, 0x00A8F1],
+ [0x00A926, 0x00A92D],
+ [0x00A947, 0x00A951],
+ [0x00A980, 0x00A982],
+ [0x00A9B6, 0x00A9B9],
+ [0x00A9BC, 0x00A9BD],
+ [0x00AA29, 0x00AA2E],
+ [0x00AA31, 0x00AA32],
+ [0x00AA35, 0x00AA36],
+ [0x00AAB2, 0x00AAB4],
+ [0x00AAB7, 0x00AAB8],
+ [0x00AABE, 0x00AABF],
+ [0x00AAEC, 0x00AAED],
+ [0x00FE00, 0x00FE0F],
+ [0x00FE20, 0x00FE2F],
+ [0x010376, 0x01037A],
+ [0x010A01, 0x010A03],
+ [0x010A05, 0x010A06],
+ [0x010A0C, 0x010A0F],
+ [0x010A38, 0x010A3A],
+ [0x010AE5, 0x010AE6],
+ [0x010D24, 0x010D27],
+ [0x010EAB, 0x010EAC],
+ [0x010EFD, 0x010EFF],
+ [0x010F46, 0x010F50],
+ [0x010F82, 0x010F85],
+ [0x011038, 0x011046],
+ [0x011073, 0x011074],
+ [0x01107F, 0x011081],
+ [0x0110B3, 0x0110B6],
+ [0x0110B9, 0x0110BA],
+ [0x011100, 0x011102],
+ [0x011127, 0x01112B],
+ [0x01112D, 0x011134],
+ [0x011180, 0x011181],
+ [0x0111B6, 0x0111BE],
+ [0x0111C9, 0x0111CC],
+ [0x01122F, 0x011231],
+ [0x011236, 0x011237],
+ [0x0112E3, 0x0112EA],
+ [0x011300, 0x011301],
+ [0x01133B, 0x01133C],
+ [0x011366, 0x01136C],
+ [0x011370, 0x011374],
+ [0x011438, 0x01143F],
+ [0x011442, 0x011444],
+ [0x0114B3, 0x0114B8],
+ [0x0114BF, 0x0114C0],
+ [0x0114C2, 0x0114C3],
+ [0x0115B2, 0x0115B5],
+ [0x0115BC, 0x0115BD],
+ [0x0115BF, 0x0115C0],
+ [0x0115DC, 0x0115DD],
+ [0x011633, 0x01163A],
+ [0x01163F, 0x011640],
+ [0x0116B0, 0x0116B5],
+ [0x01171D, 0x01171F],
+ [0x011722, 0x011725],
+ [0x011727, 0x01172B],
+ [0x01182F, 0x011837],
+ [0x011839, 0x01183A],
+ [0x01193B, 0x01193C],
+ [0x0119D4, 0x0119D7],
+ [0x0119DA, 0x0119DB],
+ [0x011A01, 0x011A0A],
+ [0x011A33, 0x011A38],
+ [0x011A3B, 0x011A3E],
+ [0x011A51, 0x011A56],
+ [0x011A59, 0x011A5B],
+ [0x011A8A, 0x011A96],
+ [0x011A98, 0x011A99],
+ [0x011C30, 0x011C36],
+ [0x011C38, 0x011C3D],
+ [0x011C92, 0x011CA7],
+ [0x011CAA, 0x011CB0],
+ [0x011CB2, 0x011CB3],
+ [0x011CB5, 0x011CB6],
+ [0x011D31, 0x011D36],
+ [0x011D3C, 0x011D3D],
+ [0x011D3F, 0x011D45],
+ [0x011D90, 0x011D91],
+ [0x011EF3, 0x011EF4],
+ [0x011F00, 0x011F01],
+ [0x011F36, 0x011F3A],
+ [0x013447, 0x013455],
+ [0x016AF0, 0x016AF4],
+ [0x016B30, 0x016B36],
+ [0x016F8F, 0x016F92],
+ [0x01BC9D, 0x01BC9E],
+ [0x01CF00, 0x01CF2D],
+ [0x01CF30, 0x01CF46],
+ [0x01D167, 0x01D169],
+ [0x01D17B, 0x01D182],
+ [0x01D185, 0x01D18B],
+ [0x01D1AA, 0x01D1AD],
+ [0x01D242, 0x01D244],
+ [0x01DA00, 0x01DA36],
+ [0x01DA3B, 0x01DA6C],
+ [0x01DA9B, 0x01DA9F],
+ [0x01DAA1, 0x01DAAF],
+ [0x01E000, 0x01E006],
+ [0x01E008, 0x01E018],
+ [0x01E01B, 0x01E021],
+ [0x01E023, 0x01E024],
+ [0x01E026, 0x01E02A],
+ [0x01E130, 0x01E136],
+ [0x01E2EC, 0x01E2EF],
+ [0x01E4EC, 0x01E4EF],
+ [0x01E8D0, 0x01E8D6],
+ [0x01E944, 0x01E94A],
+ [0x0E0100, 0x0E01EF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Nonspacing_Mark}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Nonspacing_Mark}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Mn}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Mn}"
+);
+testPropertyEscapes(
+ /^\p{gc=Nonspacing_Mark}+$/u,
+ matchSymbols,
+ "\\p{gc=Nonspacing_Mark}"
+);
+testPropertyEscapes(
+ /^\p{gc=Mn}+$/u,
+ matchSymbols,
+ "\\p{gc=Mn}"
+);
+testPropertyEscapes(
+ /^\p{Nonspacing_Mark}+$/u,
+ matchSymbols,
+ "\\p{Nonspacing_Mark}"
+);
+testPropertyEscapes(
+ /^\p{Mn}+$/u,
+ matchSymbols,
+ "\\p{Mn}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0005BE,
+ 0x0005C0,
+ 0x0005C3,
+ 0x0005C6,
+ 0x0006E9,
+ 0x00081A,
+ 0x000824,
+ 0x000828,
+ 0x0008E2,
+ 0x00093B,
+ 0x000AC6,
+ 0x000B00,
+ 0x000B40,
+ 0x000C3D,
+ 0x000C49,
+ 0x000DD5,
+ 0x000F36,
+ 0x000F38,
+ 0x000F7F,
+ 0x000F85,
+ 0x000F98,
+ 0x001031,
+ 0x001038,
+ 0x0017B6,
+ 0x00180E,
+ 0x001A57,
+ 0x001A5F,
+ 0x001A61,
+ 0x001ABE,
+ 0x001B35,
+ 0x001B3B,
+ 0x001BAA,
+ 0x001BE7,
+ 0x001BEE,
+ 0x001CD3,
+ 0x001CE1,
+ 0x00AAB1,
+ 0x00AAC0,
+ 0x010A04,
+ 0x01112C,
+ 0x011235,
+ 0x011445,
+ 0x0114B9,
+ 0x0114C1,
+ 0x0115BE,
+ 0x01163E,
+ 0x0116AC,
+ 0x0116B6,
+ 0x011726,
+ 0x011838,
+ 0x01193D,
+ 0x011A97,
+ 0x011C37,
+ 0x011C3E,
+ 0x011CB1,
+ 0x011CB4,
+ 0x011D3B,
+ 0x011D3E,
+ 0x011D46,
+ 0x011D96,
+ 0x011F41,
+ 0x01DAA0,
+ 0x01E007,
+ 0x01E022,
+ 0x01E025
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0002FF],
+ [0x000370, 0x000482],
+ [0x000488, 0x000590],
+ [0x0005C8, 0x00060F],
+ [0x00061B, 0x00064A],
+ [0x000660, 0x00066F],
+ [0x000671, 0x0006D5],
+ [0x0006DD, 0x0006DE],
+ [0x0006E5, 0x0006E6],
+ [0x0006EE, 0x000710],
+ [0x000712, 0x00072F],
+ [0x00074B, 0x0007A5],
+ [0x0007B1, 0x0007EA],
+ [0x0007F4, 0x0007FC],
+ [0x0007FE, 0x000815],
+ [0x00082E, 0x000858],
+ [0x00085C, 0x000897],
+ [0x0008A0, 0x0008C9],
+ [0x000903, 0x000939],
+ [0x00093D, 0x000940],
+ [0x000949, 0x00094C],
+ [0x00094E, 0x000950],
+ [0x000958, 0x000961],
+ [0x000964, 0x000980],
+ [0x000982, 0x0009BB],
+ [0x0009BD, 0x0009C0],
+ [0x0009C5, 0x0009CC],
+ [0x0009CE, 0x0009E1],
+ [0x0009E4, 0x0009FD],
+ [0x0009FF, 0x000A00],
+ [0x000A03, 0x000A3B],
+ [0x000A3D, 0x000A40],
+ [0x000A43, 0x000A46],
+ [0x000A49, 0x000A4A],
+ [0x000A4E, 0x000A50],
+ [0x000A52, 0x000A6F],
+ [0x000A72, 0x000A74],
+ [0x000A76, 0x000A80],
+ [0x000A83, 0x000ABB],
+ [0x000ABD, 0x000AC0],
+ [0x000AC9, 0x000ACC],
+ [0x000ACE, 0x000AE1],
+ [0x000AE4, 0x000AF9],
+ [0x000B02, 0x000B3B],
+ [0x000B3D, 0x000B3E],
+ [0x000B45, 0x000B4C],
+ [0x000B4E, 0x000B54],
+ [0x000B57, 0x000B61],
+ [0x000B64, 0x000B81],
+ [0x000B83, 0x000BBF],
+ [0x000BC1, 0x000BCC],
+ [0x000BCE, 0x000BFF],
+ [0x000C01, 0x000C03],
+ [0x000C05, 0x000C3B],
+ [0x000C41, 0x000C45],
+ [0x000C4E, 0x000C54],
+ [0x000C57, 0x000C61],
+ [0x000C64, 0x000C80],
+ [0x000C82, 0x000CBB],
+ [0x000CBD, 0x000CBE],
+ [0x000CC0, 0x000CC5],
+ [0x000CC7, 0x000CCB],
+ [0x000CCE, 0x000CE1],
+ [0x000CE4, 0x000CFF],
+ [0x000D02, 0x000D3A],
+ [0x000D3D, 0x000D40],
+ [0x000D45, 0x000D4C],
+ [0x000D4E, 0x000D61],
+ [0x000D64, 0x000D80],
+ [0x000D82, 0x000DC9],
+ [0x000DCB, 0x000DD1],
+ [0x000DD7, 0x000E30],
+ [0x000E32, 0x000E33],
+ [0x000E3B, 0x000E46],
+ [0x000E4F, 0x000EB0],
+ [0x000EB2, 0x000EB3],
+ [0x000EBD, 0x000EC7],
+ [0x000ECF, 0x000F17],
+ [0x000F1A, 0x000F34],
+ [0x000F3A, 0x000F70],
+ [0x000F88, 0x000F8C],
+ [0x000FBD, 0x000FC5],
+ [0x000FC7, 0x00102C],
+ [0x00103B, 0x00103C],
+ [0x00103F, 0x001057],
+ [0x00105A, 0x00105D],
+ [0x001061, 0x001070],
+ [0x001075, 0x001081],
+ [0x001083, 0x001084],
+ [0x001087, 0x00108C],
+ [0x00108E, 0x00109C],
+ [0x00109E, 0x00135C],
+ [0x001360, 0x001711],
+ [0x001715, 0x001731],
+ [0x001734, 0x001751],
+ [0x001754, 0x001771],
+ [0x001774, 0x0017B3],
+ [0x0017BE, 0x0017C5],
+ [0x0017C7, 0x0017C8],
+ [0x0017D4, 0x0017DC],
+ [0x0017DE, 0x00180A],
+ [0x001810, 0x001884],
+ [0x001887, 0x0018A8],
+ [0x0018AA, 0x00191F],
+ [0x001923, 0x001926],
+ [0x001929, 0x001931],
+ [0x001933, 0x001938],
+ [0x00193C, 0x001A16],
+ [0x001A19, 0x001A1A],
+ [0x001A1C, 0x001A55],
+ [0x001A63, 0x001A64],
+ [0x001A6D, 0x001A72],
+ [0x001A7D, 0x001A7E],
+ [0x001A80, 0x001AAF],
+ [0x001ACF, 0x001AFF],
+ [0x001B04, 0x001B33],
+ [0x001B3D, 0x001B41],
+ [0x001B43, 0x001B6A],
+ [0x001B74, 0x001B7F],
+ [0x001B82, 0x001BA1],
+ [0x001BA6, 0x001BA7],
+ [0x001BAE, 0x001BE5],
+ [0x001BEA, 0x001BEC],
+ [0x001BF2, 0x001C2B],
+ [0x001C34, 0x001C35],
+ [0x001C38, 0x001CCF],
+ [0x001CE9, 0x001CEC],
+ [0x001CEE, 0x001CF3],
+ [0x001CF5, 0x001CF7],
+ [0x001CFA, 0x001DBF],
+ [0x001E00, 0x0020CF],
+ [0x0020DD, 0x0020E0],
+ [0x0020E2, 0x0020E4],
+ [0x0020F1, 0x002CEE],
+ [0x002CF2, 0x002D7E],
+ [0x002D80, 0x002DDF],
+ [0x002E00, 0x003029],
+ [0x00302E, 0x003098],
+ [0x00309B, 0x00A66E],
+ [0x00A670, 0x00A673],
+ [0x00A67E, 0x00A69D],
+ [0x00A6A0, 0x00A6EF],
+ [0x00A6F2, 0x00A801],
+ [0x00A803, 0x00A805],
+ [0x00A807, 0x00A80A],
+ [0x00A80C, 0x00A824],
+ [0x00A827, 0x00A82B],
+ [0x00A82D, 0x00A8C3],
+ [0x00A8C6, 0x00A8DF],
+ [0x00A8F2, 0x00A8FE],
+ [0x00A900, 0x00A925],
+ [0x00A92E, 0x00A946],
+ [0x00A952, 0x00A97F],
+ [0x00A983, 0x00A9B2],
+ [0x00A9B4, 0x00A9B5],
+ [0x00A9BA, 0x00A9BB],
+ [0x00A9BE, 0x00A9E4],
+ [0x00A9E6, 0x00AA28],
+ [0x00AA2F, 0x00AA30],
+ [0x00AA33, 0x00AA34],
+ [0x00AA37, 0x00AA42],
+ [0x00AA44, 0x00AA4B],
+ [0x00AA4D, 0x00AA7B],
+ [0x00AA7D, 0x00AAAF],
+ [0x00AAB5, 0x00AAB6],
+ [0x00AAB9, 0x00AABD],
+ [0x00AAC2, 0x00AAEB],
+ [0x00AAEE, 0x00AAF5],
+ [0x00AAF7, 0x00ABE4],
+ [0x00ABE6, 0x00ABE7],
+ [0x00ABE9, 0x00ABEC],
+ [0x00ABEE, 0x00DBFF],
+ [0x00E000, 0x00FB1D],
+ [0x00FB1F, 0x00FDFF],
+ [0x00FE10, 0x00FE1F],
+ [0x00FE30, 0x0101FC],
+ [0x0101FE, 0x0102DF],
+ [0x0102E1, 0x010375],
+ [0x01037B, 0x010A00],
+ [0x010A07, 0x010A0B],
+ [0x010A10, 0x010A37],
+ [0x010A3B, 0x010A3E],
+ [0x010A40, 0x010AE4],
+ [0x010AE7, 0x010D23],
+ [0x010D28, 0x010EAA],
+ [0x010EAD, 0x010EFC],
+ [0x010F00, 0x010F45],
+ [0x010F51, 0x010F81],
+ [0x010F86, 0x011000],
+ [0x011002, 0x011037],
+ [0x011047, 0x01106F],
+ [0x011071, 0x011072],
+ [0x011075, 0x01107E],
+ [0x011082, 0x0110B2],
+ [0x0110B7, 0x0110B8],
+ [0x0110BB, 0x0110C1],
+ [0x0110C3, 0x0110FF],
+ [0x011103, 0x011126],
+ [0x011135, 0x011172],
+ [0x011174, 0x01117F],
+ [0x011182, 0x0111B5],
+ [0x0111BF, 0x0111C8],
+ [0x0111CD, 0x0111CE],
+ [0x0111D0, 0x01122E],
+ [0x011232, 0x011233],
+ [0x011238, 0x01123D],
+ [0x01123F, 0x011240],
+ [0x011242, 0x0112DE],
+ [0x0112E0, 0x0112E2],
+ [0x0112EB, 0x0112FF],
+ [0x011302, 0x01133A],
+ [0x01133D, 0x01133F],
+ [0x011341, 0x011365],
+ [0x01136D, 0x01136F],
+ [0x011375, 0x011437],
+ [0x011440, 0x011441],
+ [0x011447, 0x01145D],
+ [0x01145F, 0x0114B2],
+ [0x0114BB, 0x0114BE],
+ [0x0114C4, 0x0115B1],
+ [0x0115B6, 0x0115BB],
+ [0x0115C1, 0x0115DB],
+ [0x0115DE, 0x011632],
+ [0x01163B, 0x01163C],
+ [0x011641, 0x0116AA],
+ [0x0116AE, 0x0116AF],
+ [0x0116B8, 0x01171C],
+ [0x011720, 0x011721],
+ [0x01172C, 0x01182E],
+ [0x01183B, 0x01193A],
+ [0x01193F, 0x011942],
+ [0x011944, 0x0119D3],
+ [0x0119D8, 0x0119D9],
+ [0x0119DC, 0x0119DF],
+ [0x0119E1, 0x011A00],
+ [0x011A0B, 0x011A32],
+ [0x011A39, 0x011A3A],
+ [0x011A3F, 0x011A46],
+ [0x011A48, 0x011A50],
+ [0x011A57, 0x011A58],
+ [0x011A5C, 0x011A89],
+ [0x011A9A, 0x011C2F],
+ [0x011C40, 0x011C91],
+ [0x011CA8, 0x011CA9],
+ [0x011CB7, 0x011D30],
+ [0x011D37, 0x011D39],
+ [0x011D48, 0x011D8F],
+ [0x011D92, 0x011D94],
+ [0x011D98, 0x011EF2],
+ [0x011EF5, 0x011EFF],
+ [0x011F02, 0x011F35],
+ [0x011F3B, 0x011F3F],
+ [0x011F43, 0x01343F],
+ [0x013441, 0x013446],
+ [0x013456, 0x016AEF],
+ [0x016AF5, 0x016B2F],
+ [0x016B37, 0x016F4E],
+ [0x016F50, 0x016F8E],
+ [0x016F93, 0x016FE3],
+ [0x016FE5, 0x01BC9C],
+ [0x01BC9F, 0x01CEFF],
+ [0x01CF2E, 0x01CF2F],
+ [0x01CF47, 0x01D166],
+ [0x01D16A, 0x01D17A],
+ [0x01D183, 0x01D184],
+ [0x01D18C, 0x01D1A9],
+ [0x01D1AE, 0x01D241],
+ [0x01D245, 0x01D9FF],
+ [0x01DA37, 0x01DA3A],
+ [0x01DA6D, 0x01DA74],
+ [0x01DA76, 0x01DA83],
+ [0x01DA85, 0x01DA9A],
+ [0x01DAB0, 0x01DFFF],
+ [0x01E019, 0x01E01A],
+ [0x01E02B, 0x01E08E],
+ [0x01E090, 0x01E12F],
+ [0x01E137, 0x01E2AD],
+ [0x01E2AF, 0x01E2EB],
+ [0x01E2F0, 0x01E4EB],
+ [0x01E4F0, 0x01E8CF],
+ [0x01E8D7, 0x01E943],
+ [0x01E94B, 0x0E00FF],
+ [0x0E01F0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Nonspacing_Mark}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Nonspacing_Mark}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Mn}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Mn}"
+);
+testPropertyEscapes(
+ /^\P{gc=Nonspacing_Mark}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Nonspacing_Mark}"
+);
+testPropertyEscapes(
+ /^\P{gc=Mn}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Mn}"
+);
+testPropertyEscapes(
+ /^\P{Nonspacing_Mark}+$/u,
+ nonMatchSymbols,
+ "\\P{Nonspacing_Mark}"
+);
+testPropertyEscapes(
+ /^\P{Mn}+$/u,
+ nonMatchSymbols,
+ "\\P{Mn}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Number.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Number.js
new file mode 100644
index 0000000000..0747f117b1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Number.js
@@ -0,0 +1,367 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Number`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000B9,
+ 0x002070,
+ 0x002CFD,
+ 0x003007,
+ 0x010341,
+ 0x01034A
+ ],
+ ranges: [
+ [0x000030, 0x000039],
+ [0x0000B2, 0x0000B3],
+ [0x0000BC, 0x0000BE],
+ [0x000660, 0x000669],
+ [0x0006F0, 0x0006F9],
+ [0x0007C0, 0x0007C9],
+ [0x000966, 0x00096F],
+ [0x0009E6, 0x0009EF],
+ [0x0009F4, 0x0009F9],
+ [0x000A66, 0x000A6F],
+ [0x000AE6, 0x000AEF],
+ [0x000B66, 0x000B6F],
+ [0x000B72, 0x000B77],
+ [0x000BE6, 0x000BF2],
+ [0x000C66, 0x000C6F],
+ [0x000C78, 0x000C7E],
+ [0x000CE6, 0x000CEF],
+ [0x000D58, 0x000D5E],
+ [0x000D66, 0x000D78],
+ [0x000DE6, 0x000DEF],
+ [0x000E50, 0x000E59],
+ [0x000ED0, 0x000ED9],
+ [0x000F20, 0x000F33],
+ [0x001040, 0x001049],
+ [0x001090, 0x001099],
+ [0x001369, 0x00137C],
+ [0x0016EE, 0x0016F0],
+ [0x0017E0, 0x0017E9],
+ [0x0017F0, 0x0017F9],
+ [0x001810, 0x001819],
+ [0x001946, 0x00194F],
+ [0x0019D0, 0x0019DA],
+ [0x001A80, 0x001A89],
+ [0x001A90, 0x001A99],
+ [0x001B50, 0x001B59],
+ [0x001BB0, 0x001BB9],
+ [0x001C40, 0x001C49],
+ [0x001C50, 0x001C59],
+ [0x002074, 0x002079],
+ [0x002080, 0x002089],
+ [0x002150, 0x002182],
+ [0x002185, 0x002189],
+ [0x002460, 0x00249B],
+ [0x0024EA, 0x0024FF],
+ [0x002776, 0x002793],
+ [0x003021, 0x003029],
+ [0x003038, 0x00303A],
+ [0x003192, 0x003195],
+ [0x003220, 0x003229],
+ [0x003248, 0x00324F],
+ [0x003251, 0x00325F],
+ [0x003280, 0x003289],
+ [0x0032B1, 0x0032BF],
+ [0x00A620, 0x00A629],
+ [0x00A6E6, 0x00A6EF],
+ [0x00A830, 0x00A835],
+ [0x00A8D0, 0x00A8D9],
+ [0x00A900, 0x00A909],
+ [0x00A9D0, 0x00A9D9],
+ [0x00A9F0, 0x00A9F9],
+ [0x00AA50, 0x00AA59],
+ [0x00ABF0, 0x00ABF9],
+ [0x00FF10, 0x00FF19],
+ [0x010107, 0x010133],
+ [0x010140, 0x010178],
+ [0x01018A, 0x01018B],
+ [0x0102E1, 0x0102FB],
+ [0x010320, 0x010323],
+ [0x0103D1, 0x0103D5],
+ [0x0104A0, 0x0104A9],
+ [0x010858, 0x01085F],
+ [0x010879, 0x01087F],
+ [0x0108A7, 0x0108AF],
+ [0x0108FB, 0x0108FF],
+ [0x010916, 0x01091B],
+ [0x0109BC, 0x0109BD],
+ [0x0109C0, 0x0109CF],
+ [0x0109D2, 0x0109FF],
+ [0x010A40, 0x010A48],
+ [0x010A7D, 0x010A7E],
+ [0x010A9D, 0x010A9F],
+ [0x010AEB, 0x010AEF],
+ [0x010B58, 0x010B5F],
+ [0x010B78, 0x010B7F],
+ [0x010BA9, 0x010BAF],
+ [0x010CFA, 0x010CFF],
+ [0x010D30, 0x010D39],
+ [0x010E60, 0x010E7E],
+ [0x010F1D, 0x010F26],
+ [0x010F51, 0x010F54],
+ [0x010FC5, 0x010FCB],
+ [0x011052, 0x01106F],
+ [0x0110F0, 0x0110F9],
+ [0x011136, 0x01113F],
+ [0x0111D0, 0x0111D9],
+ [0x0111E1, 0x0111F4],
+ [0x0112F0, 0x0112F9],
+ [0x011450, 0x011459],
+ [0x0114D0, 0x0114D9],
+ [0x011650, 0x011659],
+ [0x0116C0, 0x0116C9],
+ [0x011730, 0x01173B],
+ [0x0118E0, 0x0118F2],
+ [0x011950, 0x011959],
+ [0x011C50, 0x011C6C],
+ [0x011D50, 0x011D59],
+ [0x011DA0, 0x011DA9],
+ [0x011F50, 0x011F59],
+ [0x011FC0, 0x011FD4],
+ [0x012400, 0x01246E],
+ [0x016A60, 0x016A69],
+ [0x016AC0, 0x016AC9],
+ [0x016B50, 0x016B59],
+ [0x016B5B, 0x016B61],
+ [0x016E80, 0x016E96],
+ [0x01D2C0, 0x01D2D3],
+ [0x01D2E0, 0x01D2F3],
+ [0x01D360, 0x01D378],
+ [0x01D7CE, 0x01D7FF],
+ [0x01E140, 0x01E149],
+ [0x01E2F0, 0x01E2F9],
+ [0x01E4F0, 0x01E4F9],
+ [0x01E8C7, 0x01E8CF],
+ [0x01E950, 0x01E959],
+ [0x01EC71, 0x01ECAB],
+ [0x01ECAD, 0x01ECAF],
+ [0x01ECB1, 0x01ECB4],
+ [0x01ED01, 0x01ED2D],
+ [0x01ED2F, 0x01ED3D],
+ [0x01F100, 0x01F10C],
+ [0x01FBF0, 0x01FBF9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Number}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Number}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=N}+$/u,
+ matchSymbols,
+ "\\p{General_Category=N}"
+);
+testPropertyEscapes(
+ /^\p{gc=Number}+$/u,
+ matchSymbols,
+ "\\p{gc=Number}"
+);
+testPropertyEscapes(
+ /^\p{gc=N}+$/u,
+ matchSymbols,
+ "\\p{gc=N}"
+);
+testPropertyEscapes(
+ /^\p{Number}+$/u,
+ matchSymbols,
+ "\\p{Number}"
+);
+testPropertyEscapes(
+ /^\p{N}+$/u,
+ matchSymbols,
+ "\\p{N}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x003250,
+ 0x016B5A,
+ 0x01ECAC,
+ 0x01ECB0,
+ 0x01ED2E
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00002F],
+ [0x00003A, 0x0000B1],
+ [0x0000B4, 0x0000B8],
+ [0x0000BA, 0x0000BB],
+ [0x0000BF, 0x00065F],
+ [0x00066A, 0x0006EF],
+ [0x0006FA, 0x0007BF],
+ [0x0007CA, 0x000965],
+ [0x000970, 0x0009E5],
+ [0x0009F0, 0x0009F3],
+ [0x0009FA, 0x000A65],
+ [0x000A70, 0x000AE5],
+ [0x000AF0, 0x000B65],
+ [0x000B70, 0x000B71],
+ [0x000B78, 0x000BE5],
+ [0x000BF3, 0x000C65],
+ [0x000C70, 0x000C77],
+ [0x000C7F, 0x000CE5],
+ [0x000CF0, 0x000D57],
+ [0x000D5F, 0x000D65],
+ [0x000D79, 0x000DE5],
+ [0x000DF0, 0x000E4F],
+ [0x000E5A, 0x000ECF],
+ [0x000EDA, 0x000F1F],
+ [0x000F34, 0x00103F],
+ [0x00104A, 0x00108F],
+ [0x00109A, 0x001368],
+ [0x00137D, 0x0016ED],
+ [0x0016F1, 0x0017DF],
+ [0x0017EA, 0x0017EF],
+ [0x0017FA, 0x00180F],
+ [0x00181A, 0x001945],
+ [0x001950, 0x0019CF],
+ [0x0019DB, 0x001A7F],
+ [0x001A8A, 0x001A8F],
+ [0x001A9A, 0x001B4F],
+ [0x001B5A, 0x001BAF],
+ [0x001BBA, 0x001C3F],
+ [0x001C4A, 0x001C4F],
+ [0x001C5A, 0x00206F],
+ [0x002071, 0x002073],
+ [0x00207A, 0x00207F],
+ [0x00208A, 0x00214F],
+ [0x002183, 0x002184],
+ [0x00218A, 0x00245F],
+ [0x00249C, 0x0024E9],
+ [0x002500, 0x002775],
+ [0x002794, 0x002CFC],
+ [0x002CFE, 0x003006],
+ [0x003008, 0x003020],
+ [0x00302A, 0x003037],
+ [0x00303B, 0x003191],
+ [0x003196, 0x00321F],
+ [0x00322A, 0x003247],
+ [0x003260, 0x00327F],
+ [0x00328A, 0x0032B0],
+ [0x0032C0, 0x00A61F],
+ [0x00A62A, 0x00A6E5],
+ [0x00A6F0, 0x00A82F],
+ [0x00A836, 0x00A8CF],
+ [0x00A8DA, 0x00A8FF],
+ [0x00A90A, 0x00A9CF],
+ [0x00A9DA, 0x00A9EF],
+ [0x00A9FA, 0x00AA4F],
+ [0x00AA5A, 0x00ABEF],
+ [0x00ABFA, 0x00DBFF],
+ [0x00E000, 0x00FF0F],
+ [0x00FF1A, 0x010106],
+ [0x010134, 0x01013F],
+ [0x010179, 0x010189],
+ [0x01018C, 0x0102E0],
+ [0x0102FC, 0x01031F],
+ [0x010324, 0x010340],
+ [0x010342, 0x010349],
+ [0x01034B, 0x0103D0],
+ [0x0103D6, 0x01049F],
+ [0x0104AA, 0x010857],
+ [0x010860, 0x010878],
+ [0x010880, 0x0108A6],
+ [0x0108B0, 0x0108FA],
+ [0x010900, 0x010915],
+ [0x01091C, 0x0109BB],
+ [0x0109BE, 0x0109BF],
+ [0x0109D0, 0x0109D1],
+ [0x010A00, 0x010A3F],
+ [0x010A49, 0x010A7C],
+ [0x010A7F, 0x010A9C],
+ [0x010AA0, 0x010AEA],
+ [0x010AF0, 0x010B57],
+ [0x010B60, 0x010B77],
+ [0x010B80, 0x010BA8],
+ [0x010BB0, 0x010CF9],
+ [0x010D00, 0x010D2F],
+ [0x010D3A, 0x010E5F],
+ [0x010E7F, 0x010F1C],
+ [0x010F27, 0x010F50],
+ [0x010F55, 0x010FC4],
+ [0x010FCC, 0x011051],
+ [0x011070, 0x0110EF],
+ [0x0110FA, 0x011135],
+ [0x011140, 0x0111CF],
+ [0x0111DA, 0x0111E0],
+ [0x0111F5, 0x0112EF],
+ [0x0112FA, 0x01144F],
+ [0x01145A, 0x0114CF],
+ [0x0114DA, 0x01164F],
+ [0x01165A, 0x0116BF],
+ [0x0116CA, 0x01172F],
+ [0x01173C, 0x0118DF],
+ [0x0118F3, 0x01194F],
+ [0x01195A, 0x011C4F],
+ [0x011C6D, 0x011D4F],
+ [0x011D5A, 0x011D9F],
+ [0x011DAA, 0x011F4F],
+ [0x011F5A, 0x011FBF],
+ [0x011FD5, 0x0123FF],
+ [0x01246F, 0x016A5F],
+ [0x016A6A, 0x016ABF],
+ [0x016ACA, 0x016B4F],
+ [0x016B62, 0x016E7F],
+ [0x016E97, 0x01D2BF],
+ [0x01D2D4, 0x01D2DF],
+ [0x01D2F4, 0x01D35F],
+ [0x01D379, 0x01D7CD],
+ [0x01D800, 0x01E13F],
+ [0x01E14A, 0x01E2EF],
+ [0x01E2FA, 0x01E4EF],
+ [0x01E4FA, 0x01E8C6],
+ [0x01E8D0, 0x01E94F],
+ [0x01E95A, 0x01EC70],
+ [0x01ECB5, 0x01ED00],
+ [0x01ED3E, 0x01F0FF],
+ [0x01F10D, 0x01FBEF],
+ [0x01FBFA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Number}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Number}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=N}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=N}"
+);
+testPropertyEscapes(
+ /^\P{gc=Number}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Number}"
+);
+testPropertyEscapes(
+ /^\P{gc=N}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=N}"
+);
+testPropertyEscapes(
+ /^\P{Number}+$/u,
+ nonMatchSymbols,
+ "\\P{Number}"
+);
+testPropertyEscapes(
+ /^\P{N}+$/u,
+ nonMatchSymbols,
+ "\\P{N}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Open_Punctuation.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Open_Punctuation.js
new file mode 100644
index 0000000000..6fe55cc1ab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Open_Punctuation.js
@@ -0,0 +1,250 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Open_Punctuation`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000028,
+ 0x00005B,
+ 0x00007B,
+ 0x000F3A,
+ 0x000F3C,
+ 0x00169B,
+ 0x00201A,
+ 0x00201E,
+ 0x002045,
+ 0x00207D,
+ 0x00208D,
+ 0x002308,
+ 0x00230A,
+ 0x002329,
+ 0x002768,
+ 0x00276A,
+ 0x00276C,
+ 0x00276E,
+ 0x002770,
+ 0x002772,
+ 0x002774,
+ 0x0027C5,
+ 0x0027E6,
+ 0x0027E8,
+ 0x0027EA,
+ 0x0027EC,
+ 0x0027EE,
+ 0x002983,
+ 0x002985,
+ 0x002987,
+ 0x002989,
+ 0x00298B,
+ 0x00298D,
+ 0x00298F,
+ 0x002991,
+ 0x002993,
+ 0x002995,
+ 0x002997,
+ 0x0029D8,
+ 0x0029DA,
+ 0x0029FC,
+ 0x002E22,
+ 0x002E24,
+ 0x002E26,
+ 0x002E28,
+ 0x002E42,
+ 0x002E55,
+ 0x002E57,
+ 0x002E59,
+ 0x002E5B,
+ 0x003008,
+ 0x00300A,
+ 0x00300C,
+ 0x00300E,
+ 0x003010,
+ 0x003014,
+ 0x003016,
+ 0x003018,
+ 0x00301A,
+ 0x00301D,
+ 0x00FD3F,
+ 0x00FE17,
+ 0x00FE35,
+ 0x00FE37,
+ 0x00FE39,
+ 0x00FE3B,
+ 0x00FE3D,
+ 0x00FE3F,
+ 0x00FE41,
+ 0x00FE43,
+ 0x00FE47,
+ 0x00FE59,
+ 0x00FE5B,
+ 0x00FE5D,
+ 0x00FF08,
+ 0x00FF3B,
+ 0x00FF5B,
+ 0x00FF5F,
+ 0x00FF62
+ ],
+ ranges: []
+});
+testPropertyEscapes(
+ /^\p{General_Category=Open_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Open_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Ps}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Ps}"
+);
+testPropertyEscapes(
+ /^\p{gc=Open_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{gc=Open_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{gc=Ps}+$/u,
+ matchSymbols,
+ "\\p{gc=Ps}"
+);
+testPropertyEscapes(
+ /^\p{Open_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{Open_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{Ps}+$/u,
+ matchSymbols,
+ "\\p{Ps}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000F3B,
+ 0x002309,
+ 0x002769,
+ 0x00276B,
+ 0x00276D,
+ 0x00276F,
+ 0x002771,
+ 0x002773,
+ 0x0027E7,
+ 0x0027E9,
+ 0x0027EB,
+ 0x0027ED,
+ 0x002984,
+ 0x002986,
+ 0x002988,
+ 0x00298A,
+ 0x00298C,
+ 0x00298E,
+ 0x002990,
+ 0x002992,
+ 0x002994,
+ 0x002996,
+ 0x0029D9,
+ 0x002E23,
+ 0x002E25,
+ 0x002E27,
+ 0x002E56,
+ 0x002E58,
+ 0x002E5A,
+ 0x003009,
+ 0x00300B,
+ 0x00300D,
+ 0x00300F,
+ 0x003015,
+ 0x003017,
+ 0x003019,
+ 0x00FE36,
+ 0x00FE38,
+ 0x00FE3A,
+ 0x00FE3C,
+ 0x00FE3E,
+ 0x00FE40,
+ 0x00FE42,
+ 0x00FE5A,
+ 0x00FE5C
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000027],
+ [0x000029, 0x00005A],
+ [0x00005C, 0x00007A],
+ [0x00007C, 0x000F39],
+ [0x000F3D, 0x00169A],
+ [0x00169C, 0x002019],
+ [0x00201B, 0x00201D],
+ [0x00201F, 0x002044],
+ [0x002046, 0x00207C],
+ [0x00207E, 0x00208C],
+ [0x00208E, 0x002307],
+ [0x00230B, 0x002328],
+ [0x00232A, 0x002767],
+ [0x002775, 0x0027C4],
+ [0x0027C6, 0x0027E5],
+ [0x0027EF, 0x002982],
+ [0x002998, 0x0029D7],
+ [0x0029DB, 0x0029FB],
+ [0x0029FD, 0x002E21],
+ [0x002E29, 0x002E41],
+ [0x002E43, 0x002E54],
+ [0x002E5C, 0x003007],
+ [0x003011, 0x003013],
+ [0x00301B, 0x00301C],
+ [0x00301E, 0x00DBFF],
+ [0x00E000, 0x00FD3E],
+ [0x00FD40, 0x00FE16],
+ [0x00FE18, 0x00FE34],
+ [0x00FE44, 0x00FE46],
+ [0x00FE48, 0x00FE58],
+ [0x00FE5E, 0x00FF07],
+ [0x00FF09, 0x00FF3A],
+ [0x00FF3C, 0x00FF5A],
+ [0x00FF5C, 0x00FF5E],
+ [0x00FF60, 0x00FF61],
+ [0x00FF63, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Open_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Open_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Ps}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Ps}"
+);
+testPropertyEscapes(
+ /^\P{gc=Open_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Open_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{gc=Ps}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Ps}"
+);
+testPropertyEscapes(
+ /^\P{Open_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{Open_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{Ps}+$/u,
+ nonMatchSymbols,
+ "\\P{Ps}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other.js
new file mode 100644
index 0000000000..f55f147910
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other.js
@@ -0,0 +1,1515 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Other`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000AD,
+ 0x00038B,
+ 0x00038D,
+ 0x0003A2,
+ 0x000530,
+ 0x000590,
+ 0x00061C,
+ 0x0006DD,
+ 0x00083F,
+ 0x00085F,
+ 0x0008E2,
+ 0x000984,
+ 0x0009A9,
+ 0x0009B1,
+ 0x0009DE,
+ 0x000A04,
+ 0x000A29,
+ 0x000A31,
+ 0x000A34,
+ 0x000A37,
+ 0x000A3D,
+ 0x000A5D,
+ 0x000A84,
+ 0x000A8E,
+ 0x000A92,
+ 0x000AA9,
+ 0x000AB1,
+ 0x000AB4,
+ 0x000AC6,
+ 0x000ACA,
+ 0x000B00,
+ 0x000B04,
+ 0x000B29,
+ 0x000B31,
+ 0x000B34,
+ 0x000B5E,
+ 0x000B84,
+ 0x000B91,
+ 0x000B9B,
+ 0x000B9D,
+ 0x000BC9,
+ 0x000C0D,
+ 0x000C11,
+ 0x000C29,
+ 0x000C45,
+ 0x000C49,
+ 0x000C57,
+ 0x000C8D,
+ 0x000C91,
+ 0x000CA9,
+ 0x000CB4,
+ 0x000CC5,
+ 0x000CC9,
+ 0x000CDF,
+ 0x000CF0,
+ 0x000D0D,
+ 0x000D11,
+ 0x000D45,
+ 0x000D49,
+ 0x000D80,
+ 0x000D84,
+ 0x000DB2,
+ 0x000DBC,
+ 0x000DD5,
+ 0x000DD7,
+ 0x000E83,
+ 0x000E85,
+ 0x000E8B,
+ 0x000EA4,
+ 0x000EA6,
+ 0x000EC5,
+ 0x000EC7,
+ 0x000ECF,
+ 0x000F48,
+ 0x000F98,
+ 0x000FBD,
+ 0x000FCD,
+ 0x0010C6,
+ 0x001249,
+ 0x001257,
+ 0x001259,
+ 0x001289,
+ 0x0012B1,
+ 0x0012BF,
+ 0x0012C1,
+ 0x0012D7,
+ 0x001311,
+ 0x00176D,
+ 0x001771,
+ 0x00180E,
+ 0x00191F,
+ 0x001A5F,
+ 0x001B7F,
+ 0x001F58,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x001FB5,
+ 0x001FC5,
+ 0x001FDC,
+ 0x001FF5,
+ 0x001FFF,
+ 0x00208F,
+ 0x002B96,
+ 0x002D26,
+ 0x002DA7,
+ 0x002DAF,
+ 0x002DB7,
+ 0x002DBF,
+ 0x002DC7,
+ 0x002DCF,
+ 0x002DD7,
+ 0x002DDF,
+ 0x002E9A,
+ 0x003040,
+ 0x003130,
+ 0x00318F,
+ 0x00321F,
+ 0x00A7D2,
+ 0x00A7D4,
+ 0x00A9CE,
+ 0x00A9FF,
+ 0x00AB27,
+ 0x00AB2F,
+ 0x00FB37,
+ 0x00FB3D,
+ 0x00FB3F,
+ 0x00FB42,
+ 0x00FB45,
+ 0x00FE53,
+ 0x00FE67,
+ 0x00FE75,
+ 0x00FFE7,
+ 0x01000C,
+ 0x010027,
+ 0x01003B,
+ 0x01003E,
+ 0x01018F,
+ 0x01039E,
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x010596,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA,
+ 0x010786,
+ 0x0107B1,
+ 0x010809,
+ 0x010836,
+ 0x010856,
+ 0x0108F3,
+ 0x010A04,
+ 0x010A14,
+ 0x010A18,
+ 0x010E7F,
+ 0x010EAA,
+ 0x0110BD,
+ 0x011135,
+ 0x0111E0,
+ 0x011212,
+ 0x011287,
+ 0x011289,
+ 0x01128E,
+ 0x01129E,
+ 0x011304,
+ 0x011329,
+ 0x011331,
+ 0x011334,
+ 0x01133A,
+ 0x01145C,
+ 0x011914,
+ 0x011917,
+ 0x011936,
+ 0x011C09,
+ 0x011C37,
+ 0x011CA8,
+ 0x011D07,
+ 0x011D0A,
+ 0x011D3B,
+ 0x011D3E,
+ 0x011D66,
+ 0x011D69,
+ 0x011D8F,
+ 0x011D92,
+ 0x011F11,
+ 0x01246F,
+ 0x016A5F,
+ 0x016ABF,
+ 0x016B5A,
+ 0x016B62,
+ 0x01AFF4,
+ 0x01AFFC,
+ 0x01AFFF,
+ 0x01D455,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D506,
+ 0x01D515,
+ 0x01D51D,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545,
+ 0x01D551,
+ 0x01DAA0,
+ 0x01E007,
+ 0x01E022,
+ 0x01E025,
+ 0x01E7E7,
+ 0x01E7EC,
+ 0x01E7EF,
+ 0x01E7FF,
+ 0x01EE04,
+ 0x01EE20,
+ 0x01EE23,
+ 0x01EE28,
+ 0x01EE33,
+ 0x01EE38,
+ 0x01EE3A,
+ 0x01EE48,
+ 0x01EE4A,
+ 0x01EE4C,
+ 0x01EE50,
+ 0x01EE53,
+ 0x01EE58,
+ 0x01EE5A,
+ 0x01EE5C,
+ 0x01EE5E,
+ 0x01EE60,
+ 0x01EE63,
+ 0x01EE6B,
+ 0x01EE73,
+ 0x01EE78,
+ 0x01EE7D,
+ 0x01EE7F,
+ 0x01EE8A,
+ 0x01EEA4,
+ 0x01EEAA,
+ 0x01F0C0,
+ 0x01F0D0,
+ 0x01FABE,
+ 0x01FB93
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00001F],
+ [0x00007F, 0x00009F],
+ [0x000378, 0x000379],
+ [0x000380, 0x000383],
+ [0x000557, 0x000558],
+ [0x00058B, 0x00058C],
+ [0x0005C8, 0x0005CF],
+ [0x0005EB, 0x0005EE],
+ [0x0005F5, 0x000605],
+ [0x00070E, 0x00070F],
+ [0x00074B, 0x00074C],
+ [0x0007B2, 0x0007BF],
+ [0x0007FB, 0x0007FC],
+ [0x00082E, 0x00082F],
+ [0x00085C, 0x00085D],
+ [0x00086B, 0x00086F],
+ [0x00088F, 0x000897],
+ [0x00098D, 0x00098E],
+ [0x000991, 0x000992],
+ [0x0009B3, 0x0009B5],
+ [0x0009BA, 0x0009BB],
+ [0x0009C5, 0x0009C6],
+ [0x0009C9, 0x0009CA],
+ [0x0009CF, 0x0009D6],
+ [0x0009D8, 0x0009DB],
+ [0x0009E4, 0x0009E5],
+ [0x0009FF, 0x000A00],
+ [0x000A0B, 0x000A0E],
+ [0x000A11, 0x000A12],
+ [0x000A3A, 0x000A3B],
+ [0x000A43, 0x000A46],
+ [0x000A49, 0x000A4A],
+ [0x000A4E, 0x000A50],
+ [0x000A52, 0x000A58],
+ [0x000A5F, 0x000A65],
+ [0x000A77, 0x000A80],
+ [0x000ABA, 0x000ABB],
+ [0x000ACE, 0x000ACF],
+ [0x000AD1, 0x000ADF],
+ [0x000AE4, 0x000AE5],
+ [0x000AF2, 0x000AF8],
+ [0x000B0D, 0x000B0E],
+ [0x000B11, 0x000B12],
+ [0x000B3A, 0x000B3B],
+ [0x000B45, 0x000B46],
+ [0x000B49, 0x000B4A],
+ [0x000B4E, 0x000B54],
+ [0x000B58, 0x000B5B],
+ [0x000B64, 0x000B65],
+ [0x000B78, 0x000B81],
+ [0x000B8B, 0x000B8D],
+ [0x000B96, 0x000B98],
+ [0x000BA0, 0x000BA2],
+ [0x000BA5, 0x000BA7],
+ [0x000BAB, 0x000BAD],
+ [0x000BBA, 0x000BBD],
+ [0x000BC3, 0x000BC5],
+ [0x000BCE, 0x000BCF],
+ [0x000BD1, 0x000BD6],
+ [0x000BD8, 0x000BE5],
+ [0x000BFB, 0x000BFF],
+ [0x000C3A, 0x000C3B],
+ [0x000C4E, 0x000C54],
+ [0x000C5B, 0x000C5C],
+ [0x000C5E, 0x000C5F],
+ [0x000C64, 0x000C65],
+ [0x000C70, 0x000C76],
+ [0x000CBA, 0x000CBB],
+ [0x000CCE, 0x000CD4],
+ [0x000CD7, 0x000CDC],
+ [0x000CE4, 0x000CE5],
+ [0x000CF4, 0x000CFF],
+ [0x000D50, 0x000D53],
+ [0x000D64, 0x000D65],
+ [0x000D97, 0x000D99],
+ [0x000DBE, 0x000DBF],
+ [0x000DC7, 0x000DC9],
+ [0x000DCB, 0x000DCE],
+ [0x000DE0, 0x000DE5],
+ [0x000DF0, 0x000DF1],
+ [0x000DF5, 0x000E00],
+ [0x000E3B, 0x000E3E],
+ [0x000E5C, 0x000E80],
+ [0x000EBE, 0x000EBF],
+ [0x000EDA, 0x000EDB],
+ [0x000EE0, 0x000EFF],
+ [0x000F6D, 0x000F70],
+ [0x000FDB, 0x000FFF],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x0010CF],
+ [0x00124E, 0x00124F],
+ [0x00125E, 0x00125F],
+ [0x00128E, 0x00128F],
+ [0x0012B6, 0x0012B7],
+ [0x0012C6, 0x0012C7],
+ [0x001316, 0x001317],
+ [0x00135B, 0x00135C],
+ [0x00137D, 0x00137F],
+ [0x00139A, 0x00139F],
+ [0x0013F6, 0x0013F7],
+ [0x0013FE, 0x0013FF],
+ [0x00169D, 0x00169F],
+ [0x0016F9, 0x0016FF],
+ [0x001716, 0x00171E],
+ [0x001737, 0x00173F],
+ [0x001754, 0x00175F],
+ [0x001774, 0x00177F],
+ [0x0017DE, 0x0017DF],
+ [0x0017EA, 0x0017EF],
+ [0x0017FA, 0x0017FF],
+ [0x00181A, 0x00181F],
+ [0x001879, 0x00187F],
+ [0x0018AB, 0x0018AF],
+ [0x0018F6, 0x0018FF],
+ [0x00192C, 0x00192F],
+ [0x00193C, 0x00193F],
+ [0x001941, 0x001943],
+ [0x00196E, 0x00196F],
+ [0x001975, 0x00197F],
+ [0x0019AC, 0x0019AF],
+ [0x0019CA, 0x0019CF],
+ [0x0019DB, 0x0019DD],
+ [0x001A1C, 0x001A1D],
+ [0x001A7D, 0x001A7E],
+ [0x001A8A, 0x001A8F],
+ [0x001A9A, 0x001A9F],
+ [0x001AAE, 0x001AAF],
+ [0x001ACF, 0x001AFF],
+ [0x001B4D, 0x001B4F],
+ [0x001BF4, 0x001BFB],
+ [0x001C38, 0x001C3A],
+ [0x001C4A, 0x001C4C],
+ [0x001C89, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC8, 0x001CCF],
+ [0x001CFB, 0x001CFF],
+ [0x001F16, 0x001F17],
+ [0x001F1E, 0x001F1F],
+ [0x001F46, 0x001F47],
+ [0x001F4E, 0x001F4F],
+ [0x001F7E, 0x001F7F],
+ [0x001FD4, 0x001FD5],
+ [0x001FF0, 0x001FF1],
+ [0x00200B, 0x00200F],
+ [0x00202A, 0x00202E],
+ [0x002060, 0x00206F],
+ [0x002072, 0x002073],
+ [0x00209D, 0x00209F],
+ [0x0020C1, 0x0020CF],
+ [0x0020F1, 0x0020FF],
+ [0x00218C, 0x00218F],
+ [0x002427, 0x00243F],
+ [0x00244B, 0x00245F],
+ [0x002B74, 0x002B75],
+ [0x002CF4, 0x002CF8],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x002D2F],
+ [0x002D68, 0x002D6E],
+ [0x002D71, 0x002D7E],
+ [0x002D97, 0x002D9F],
+ [0x002E5E, 0x002E7F],
+ [0x002EF4, 0x002EFF],
+ [0x002FD6, 0x002FEF],
+ [0x002FFC, 0x002FFF],
+ [0x003097, 0x003098],
+ [0x003100, 0x003104],
+ [0x0031E4, 0x0031EF],
+ [0x00A48D, 0x00A48F],
+ [0x00A4C7, 0x00A4CF],
+ [0x00A62C, 0x00A63F],
+ [0x00A6F8, 0x00A6FF],
+ [0x00A7CB, 0x00A7CF],
+ [0x00A7DA, 0x00A7F1],
+ [0x00A82D, 0x00A82F],
+ [0x00A83A, 0x00A83F],
+ [0x00A878, 0x00A87F],
+ [0x00A8C6, 0x00A8CD],
+ [0x00A8DA, 0x00A8DF],
+ [0x00A954, 0x00A95E],
+ [0x00A97D, 0x00A97F],
+ [0x00A9DA, 0x00A9DD],
+ [0x00AA37, 0x00AA3F],
+ [0x00AA4E, 0x00AA4F],
+ [0x00AA5A, 0x00AA5B],
+ [0x00AAC3, 0x00AADA],
+ [0x00AAF7, 0x00AB00],
+ [0x00AB07, 0x00AB08],
+ [0x00AB0F, 0x00AB10],
+ [0x00AB17, 0x00AB1F],
+ [0x00AB6C, 0x00AB6F],
+ [0x00ABEE, 0x00ABEF],
+ [0x00ABFA, 0x00ABFF],
+ [0x00D7A4, 0x00D7AF],
+ [0x00D7C7, 0x00D7CA],
+ [0x00D7FC, 0x00DBFF],
+ [0x00E000, 0x00F8FF],
+ [0x00FA6E, 0x00FA6F],
+ [0x00FADA, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FB1C],
+ [0x00FBC3, 0x00FBD2],
+ [0x00FD90, 0x00FD91],
+ [0x00FDC8, 0x00FDCE],
+ [0x00FDD0, 0x00FDEF],
+ [0x00FE1A, 0x00FE1F],
+ [0x00FE6C, 0x00FE6F],
+ [0x00FEFD, 0x00FF00],
+ [0x00FFBF, 0x00FFC1],
+ [0x00FFC8, 0x00FFC9],
+ [0x00FFD0, 0x00FFD1],
+ [0x00FFD8, 0x00FFD9],
+ [0x00FFDD, 0x00FFDF],
+ [0x00FFEF, 0x00FFFB],
+ [0x00FFFE, 0x00FFFF],
+ [0x01004E, 0x01004F],
+ [0x01005E, 0x01007F],
+ [0x0100FB, 0x0100FF],
+ [0x010103, 0x010106],
+ [0x010134, 0x010136],
+ [0x01019D, 0x01019F],
+ [0x0101A1, 0x0101CF],
+ [0x0101FE, 0x01027F],
+ [0x01029D, 0x01029F],
+ [0x0102D1, 0x0102DF],
+ [0x0102FC, 0x0102FF],
+ [0x010324, 0x01032C],
+ [0x01034B, 0x01034F],
+ [0x01037B, 0x01037F],
+ [0x0103C4, 0x0103C7],
+ [0x0103D6, 0x0103FF],
+ [0x01049E, 0x01049F],
+ [0x0104AA, 0x0104AF],
+ [0x0104D4, 0x0104D7],
+ [0x0104FC, 0x0104FF],
+ [0x010528, 0x01052F],
+ [0x010564, 0x01056E],
+ [0x0105BD, 0x0105FF],
+ [0x010737, 0x01073F],
+ [0x010756, 0x01075F],
+ [0x010768, 0x01077F],
+ [0x0107BB, 0x0107FF],
+ [0x010806, 0x010807],
+ [0x010839, 0x01083B],
+ [0x01083D, 0x01083E],
+ [0x01089F, 0x0108A6],
+ [0x0108B0, 0x0108DF],
+ [0x0108F6, 0x0108FA],
+ [0x01091C, 0x01091E],
+ [0x01093A, 0x01093E],
+ [0x010940, 0x01097F],
+ [0x0109B8, 0x0109BB],
+ [0x0109D0, 0x0109D1],
+ [0x010A07, 0x010A0B],
+ [0x010A36, 0x010A37],
+ [0x010A3B, 0x010A3E],
+ [0x010A49, 0x010A4F],
+ [0x010A59, 0x010A5F],
+ [0x010AA0, 0x010ABF],
+ [0x010AE7, 0x010AEA],
+ [0x010AF7, 0x010AFF],
+ [0x010B36, 0x010B38],
+ [0x010B56, 0x010B57],
+ [0x010B73, 0x010B77],
+ [0x010B92, 0x010B98],
+ [0x010B9D, 0x010BA8],
+ [0x010BB0, 0x010BFF],
+ [0x010C49, 0x010C7F],
+ [0x010CB3, 0x010CBF],
+ [0x010CF3, 0x010CF9],
+ [0x010D28, 0x010D2F],
+ [0x010D3A, 0x010E5F],
+ [0x010EAE, 0x010EAF],
+ [0x010EB2, 0x010EFC],
+ [0x010F28, 0x010F2F],
+ [0x010F5A, 0x010F6F],
+ [0x010F8A, 0x010FAF],
+ [0x010FCC, 0x010FDF],
+ [0x010FF7, 0x010FFF],
+ [0x01104E, 0x011051],
+ [0x011076, 0x01107E],
+ [0x0110C3, 0x0110CF],
+ [0x0110E9, 0x0110EF],
+ [0x0110FA, 0x0110FF],
+ [0x011148, 0x01114F],
+ [0x011177, 0x01117F],
+ [0x0111F5, 0x0111FF],
+ [0x011242, 0x01127F],
+ [0x0112AA, 0x0112AF],
+ [0x0112EB, 0x0112EF],
+ [0x0112FA, 0x0112FF],
+ [0x01130D, 0x01130E],
+ [0x011311, 0x011312],
+ [0x011345, 0x011346],
+ [0x011349, 0x01134A],
+ [0x01134E, 0x01134F],
+ [0x011351, 0x011356],
+ [0x011358, 0x01135C],
+ [0x011364, 0x011365],
+ [0x01136D, 0x01136F],
+ [0x011375, 0x0113FF],
+ [0x011462, 0x01147F],
+ [0x0114C8, 0x0114CF],
+ [0x0114DA, 0x01157F],
+ [0x0115B6, 0x0115B7],
+ [0x0115DE, 0x0115FF],
+ [0x011645, 0x01164F],
+ [0x01165A, 0x01165F],
+ [0x01166D, 0x01167F],
+ [0x0116BA, 0x0116BF],
+ [0x0116CA, 0x0116FF],
+ [0x01171B, 0x01171C],
+ [0x01172C, 0x01172F],
+ [0x011747, 0x0117FF],
+ [0x01183C, 0x01189F],
+ [0x0118F3, 0x0118FE],
+ [0x011907, 0x011908],
+ [0x01190A, 0x01190B],
+ [0x011939, 0x01193A],
+ [0x011947, 0x01194F],
+ [0x01195A, 0x01199F],
+ [0x0119A8, 0x0119A9],
+ [0x0119D8, 0x0119D9],
+ [0x0119E5, 0x0119FF],
+ [0x011A48, 0x011A4F],
+ [0x011AA3, 0x011AAF],
+ [0x011AF9, 0x011AFF],
+ [0x011B0A, 0x011BFF],
+ [0x011C46, 0x011C4F],
+ [0x011C6D, 0x011C6F],
+ [0x011C90, 0x011C91],
+ [0x011CB7, 0x011CFF],
+ [0x011D37, 0x011D39],
+ [0x011D48, 0x011D4F],
+ [0x011D5A, 0x011D5F],
+ [0x011D99, 0x011D9F],
+ [0x011DAA, 0x011EDF],
+ [0x011EF9, 0x011EFF],
+ [0x011F3B, 0x011F3D],
+ [0x011F5A, 0x011FAF],
+ [0x011FB1, 0x011FBF],
+ [0x011FF2, 0x011FFE],
+ [0x01239A, 0x0123FF],
+ [0x012475, 0x01247F],
+ [0x012544, 0x012F8F],
+ [0x012FF3, 0x012FFF],
+ [0x013430, 0x01343F],
+ [0x013456, 0x0143FF],
+ [0x014647, 0x0167FF],
+ [0x016A39, 0x016A3F],
+ [0x016A6A, 0x016A6D],
+ [0x016ACA, 0x016ACF],
+ [0x016AEE, 0x016AEF],
+ [0x016AF6, 0x016AFF],
+ [0x016B46, 0x016B4F],
+ [0x016B78, 0x016B7C],
+ [0x016B90, 0x016E3F],
+ [0x016E9B, 0x016EFF],
+ [0x016F4B, 0x016F4E],
+ [0x016F88, 0x016F8E],
+ [0x016FA0, 0x016FDF],
+ [0x016FE5, 0x016FEF],
+ [0x016FF2, 0x016FFF],
+ [0x0187F8, 0x0187FF],
+ [0x018CD6, 0x018CFF],
+ [0x018D09, 0x01AFEF],
+ [0x01B123, 0x01B131],
+ [0x01B133, 0x01B14F],
+ [0x01B153, 0x01B154],
+ [0x01B156, 0x01B163],
+ [0x01B168, 0x01B16F],
+ [0x01B2FC, 0x01BBFF],
+ [0x01BC6B, 0x01BC6F],
+ [0x01BC7D, 0x01BC7F],
+ [0x01BC89, 0x01BC8F],
+ [0x01BC9A, 0x01BC9B],
+ [0x01BCA0, 0x01CEFF],
+ [0x01CF2E, 0x01CF2F],
+ [0x01CF47, 0x01CF4F],
+ [0x01CFC4, 0x01CFFF],
+ [0x01D0F6, 0x01D0FF],
+ [0x01D127, 0x01D128],
+ [0x01D173, 0x01D17A],
+ [0x01D1EB, 0x01D1FF],
+ [0x01D246, 0x01D2BF],
+ [0x01D2D4, 0x01D2DF],
+ [0x01D2F4, 0x01D2FF],
+ [0x01D357, 0x01D35F],
+ [0x01D379, 0x01D3FF],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D50B, 0x01D50C],
+ [0x01D547, 0x01D549],
+ [0x01D6A6, 0x01D6A7],
+ [0x01D7CC, 0x01D7CD],
+ [0x01DA8C, 0x01DA9A],
+ [0x01DAB0, 0x01DEFF],
+ [0x01DF1F, 0x01DF24],
+ [0x01DF2B, 0x01DFFF],
+ [0x01E019, 0x01E01A],
+ [0x01E02B, 0x01E02F],
+ [0x01E06E, 0x01E08E],
+ [0x01E090, 0x01E0FF],
+ [0x01E12D, 0x01E12F],
+ [0x01E13E, 0x01E13F],
+ [0x01E14A, 0x01E14D],
+ [0x01E150, 0x01E28F],
+ [0x01E2AF, 0x01E2BF],
+ [0x01E2FA, 0x01E2FE],
+ [0x01E300, 0x01E4CF],
+ [0x01E4FA, 0x01E7DF],
+ [0x01E8C5, 0x01E8C6],
+ [0x01E8D7, 0x01E8FF],
+ [0x01E94C, 0x01E94F],
+ [0x01E95A, 0x01E95D],
+ [0x01E960, 0x01EC70],
+ [0x01ECB5, 0x01ED00],
+ [0x01ED3E, 0x01EDFF],
+ [0x01EE25, 0x01EE26],
+ [0x01EE3C, 0x01EE41],
+ [0x01EE43, 0x01EE46],
+ [0x01EE55, 0x01EE56],
+ [0x01EE65, 0x01EE66],
+ [0x01EE9C, 0x01EEA0],
+ [0x01EEBC, 0x01EEEF],
+ [0x01EEF2, 0x01EFFF],
+ [0x01F02C, 0x01F02F],
+ [0x01F094, 0x01F09F],
+ [0x01F0AF, 0x01F0B0],
+ [0x01F0F6, 0x01F0FF],
+ [0x01F1AE, 0x01F1E5],
+ [0x01F203, 0x01F20F],
+ [0x01F23C, 0x01F23F],
+ [0x01F249, 0x01F24F],
+ [0x01F252, 0x01F25F],
+ [0x01F266, 0x01F2FF],
+ [0x01F6D8, 0x01F6DB],
+ [0x01F6ED, 0x01F6EF],
+ [0x01F6FD, 0x01F6FF],
+ [0x01F777, 0x01F77A],
+ [0x01F7DA, 0x01F7DF],
+ [0x01F7EC, 0x01F7EF],
+ [0x01F7F1, 0x01F7FF],
+ [0x01F80C, 0x01F80F],
+ [0x01F848, 0x01F84F],
+ [0x01F85A, 0x01F85F],
+ [0x01F888, 0x01F88F],
+ [0x01F8AE, 0x01F8AF],
+ [0x01F8B2, 0x01F8FF],
+ [0x01FA54, 0x01FA5F],
+ [0x01FA6E, 0x01FA6F],
+ [0x01FA7D, 0x01FA7F],
+ [0x01FA89, 0x01FA8F],
+ [0x01FAC6, 0x01FACD],
+ [0x01FADC, 0x01FADF],
+ [0x01FAE9, 0x01FAEF],
+ [0x01FAF9, 0x01FAFF],
+ [0x01FBCB, 0x01FBEF],
+ [0x01FBFA, 0x01FFFF],
+ [0x02A6E0, 0x02A6FF],
+ [0x02B73A, 0x02B73F],
+ [0x02B81E, 0x02B81F],
+ [0x02CEA2, 0x02CEAF],
+ [0x02EBE1, 0x02F7FF],
+ [0x02FA1E, 0x02FFFF],
+ [0x03134B, 0x03134F],
+ [0x0323B0, 0x0E00FF],
+ [0x0E01F0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Other}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Other}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=C}+$/u,
+ matchSymbols,
+ "\\p{General_Category=C}"
+);
+testPropertyEscapes(
+ /^\p{gc=Other}+$/u,
+ matchSymbols,
+ "\\p{gc=Other}"
+);
+testPropertyEscapes(
+ /^\p{gc=C}+$/u,
+ matchSymbols,
+ "\\p{gc=C}"
+);
+testPropertyEscapes(
+ /^\p{Other}+$/u,
+ matchSymbols,
+ "\\p{Other}"
+);
+testPropertyEscapes(
+ /^\p{C}+$/u,
+ matchSymbols,
+ "\\p{C}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00038C,
+ 0x00085E,
+ 0x0009B2,
+ 0x0009D7,
+ 0x000A3C,
+ 0x000A51,
+ 0x000A5E,
+ 0x000AD0,
+ 0x000B9C,
+ 0x000BD0,
+ 0x000BD7,
+ 0x000C5D,
+ 0x000DBD,
+ 0x000DCA,
+ 0x000DD6,
+ 0x000E84,
+ 0x000EA5,
+ 0x000EC6,
+ 0x0010C7,
+ 0x0010CD,
+ 0x001258,
+ 0x0012C0,
+ 0x001940,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x002D27,
+ 0x002D2D,
+ 0x00A7D3,
+ 0x00FB3E,
+ 0x00FDCF,
+ 0x0101A0,
+ 0x010808,
+ 0x01083C,
+ 0x01093F,
+ 0x011288,
+ 0x011350,
+ 0x011357,
+ 0x011909,
+ 0x011D3A,
+ 0x011FB0,
+ 0x01B132,
+ 0x01B155,
+ 0x01D4A2,
+ 0x01D4BB,
+ 0x01D546,
+ 0x01E08F,
+ 0x01E2FF,
+ 0x01EE24,
+ 0x01EE27,
+ 0x01EE39,
+ 0x01EE3B,
+ 0x01EE42,
+ 0x01EE47,
+ 0x01EE49,
+ 0x01EE4B,
+ 0x01EE54,
+ 0x01EE57,
+ 0x01EE59,
+ 0x01EE5B,
+ 0x01EE5D,
+ 0x01EE5F,
+ 0x01EE64,
+ 0x01EE7E,
+ 0x01F7F0
+ ],
+ ranges: [
+ [0x000020, 0x00007E],
+ [0x0000A0, 0x0000AC],
+ [0x0000AE, 0x000377],
+ [0x00037A, 0x00037F],
+ [0x000384, 0x00038A],
+ [0x00038E, 0x0003A1],
+ [0x0003A3, 0x00052F],
+ [0x000531, 0x000556],
+ [0x000559, 0x00058A],
+ [0x00058D, 0x00058F],
+ [0x000591, 0x0005C7],
+ [0x0005D0, 0x0005EA],
+ [0x0005EF, 0x0005F4],
+ [0x000606, 0x00061B],
+ [0x00061D, 0x0006DC],
+ [0x0006DE, 0x00070D],
+ [0x000710, 0x00074A],
+ [0x00074D, 0x0007B1],
+ [0x0007C0, 0x0007FA],
+ [0x0007FD, 0x00082D],
+ [0x000830, 0x00083E],
+ [0x000840, 0x00085B],
+ [0x000860, 0x00086A],
+ [0x000870, 0x00088E],
+ [0x000898, 0x0008E1],
+ [0x0008E3, 0x000983],
+ [0x000985, 0x00098C],
+ [0x00098F, 0x000990],
+ [0x000993, 0x0009A8],
+ [0x0009AA, 0x0009B0],
+ [0x0009B6, 0x0009B9],
+ [0x0009BC, 0x0009C4],
+ [0x0009C7, 0x0009C8],
+ [0x0009CB, 0x0009CE],
+ [0x0009DC, 0x0009DD],
+ [0x0009DF, 0x0009E3],
+ [0x0009E6, 0x0009FE],
+ [0x000A01, 0x000A03],
+ [0x000A05, 0x000A0A],
+ [0x000A0F, 0x000A10],
+ [0x000A13, 0x000A28],
+ [0x000A2A, 0x000A30],
+ [0x000A32, 0x000A33],
+ [0x000A35, 0x000A36],
+ [0x000A38, 0x000A39],
+ [0x000A3E, 0x000A42],
+ [0x000A47, 0x000A48],
+ [0x000A4B, 0x000A4D],
+ [0x000A59, 0x000A5C],
+ [0x000A66, 0x000A76],
+ [0x000A81, 0x000A83],
+ [0x000A85, 0x000A8D],
+ [0x000A8F, 0x000A91],
+ [0x000A93, 0x000AA8],
+ [0x000AAA, 0x000AB0],
+ [0x000AB2, 0x000AB3],
+ [0x000AB5, 0x000AB9],
+ [0x000ABC, 0x000AC5],
+ [0x000AC7, 0x000AC9],
+ [0x000ACB, 0x000ACD],
+ [0x000AE0, 0x000AE3],
+ [0x000AE6, 0x000AF1],
+ [0x000AF9, 0x000AFF],
+ [0x000B01, 0x000B03],
+ [0x000B05, 0x000B0C],
+ [0x000B0F, 0x000B10],
+ [0x000B13, 0x000B28],
+ [0x000B2A, 0x000B30],
+ [0x000B32, 0x000B33],
+ [0x000B35, 0x000B39],
+ [0x000B3C, 0x000B44],
+ [0x000B47, 0x000B48],
+ [0x000B4B, 0x000B4D],
+ [0x000B55, 0x000B57],
+ [0x000B5C, 0x000B5D],
+ [0x000B5F, 0x000B63],
+ [0x000B66, 0x000B77],
+ [0x000B82, 0x000B83],
+ [0x000B85, 0x000B8A],
+ [0x000B8E, 0x000B90],
+ [0x000B92, 0x000B95],
+ [0x000B99, 0x000B9A],
+ [0x000B9E, 0x000B9F],
+ [0x000BA3, 0x000BA4],
+ [0x000BA8, 0x000BAA],
+ [0x000BAE, 0x000BB9],
+ [0x000BBE, 0x000BC2],
+ [0x000BC6, 0x000BC8],
+ [0x000BCA, 0x000BCD],
+ [0x000BE6, 0x000BFA],
+ [0x000C00, 0x000C0C],
+ [0x000C0E, 0x000C10],
+ [0x000C12, 0x000C28],
+ [0x000C2A, 0x000C39],
+ [0x000C3C, 0x000C44],
+ [0x000C46, 0x000C48],
+ [0x000C4A, 0x000C4D],
+ [0x000C55, 0x000C56],
+ [0x000C58, 0x000C5A],
+ [0x000C60, 0x000C63],
+ [0x000C66, 0x000C6F],
+ [0x000C77, 0x000C8C],
+ [0x000C8E, 0x000C90],
+ [0x000C92, 0x000CA8],
+ [0x000CAA, 0x000CB3],
+ [0x000CB5, 0x000CB9],
+ [0x000CBC, 0x000CC4],
+ [0x000CC6, 0x000CC8],
+ [0x000CCA, 0x000CCD],
+ [0x000CD5, 0x000CD6],
+ [0x000CDD, 0x000CDE],
+ [0x000CE0, 0x000CE3],
+ [0x000CE6, 0x000CEF],
+ [0x000CF1, 0x000CF3],
+ [0x000D00, 0x000D0C],
+ [0x000D0E, 0x000D10],
+ [0x000D12, 0x000D44],
+ [0x000D46, 0x000D48],
+ [0x000D4A, 0x000D4F],
+ [0x000D54, 0x000D63],
+ [0x000D66, 0x000D7F],
+ [0x000D81, 0x000D83],
+ [0x000D85, 0x000D96],
+ [0x000D9A, 0x000DB1],
+ [0x000DB3, 0x000DBB],
+ [0x000DC0, 0x000DC6],
+ [0x000DCF, 0x000DD4],
+ [0x000DD8, 0x000DDF],
+ [0x000DE6, 0x000DEF],
+ [0x000DF2, 0x000DF4],
+ [0x000E01, 0x000E3A],
+ [0x000E3F, 0x000E5B],
+ [0x000E81, 0x000E82],
+ [0x000E86, 0x000E8A],
+ [0x000E8C, 0x000EA3],
+ [0x000EA7, 0x000EBD],
+ [0x000EC0, 0x000EC4],
+ [0x000EC8, 0x000ECE],
+ [0x000ED0, 0x000ED9],
+ [0x000EDC, 0x000EDF],
+ [0x000F00, 0x000F47],
+ [0x000F49, 0x000F6C],
+ [0x000F71, 0x000F97],
+ [0x000F99, 0x000FBC],
+ [0x000FBE, 0x000FCC],
+ [0x000FCE, 0x000FDA],
+ [0x001000, 0x0010C5],
+ [0x0010D0, 0x001248],
+ [0x00124A, 0x00124D],
+ [0x001250, 0x001256],
+ [0x00125A, 0x00125D],
+ [0x001260, 0x001288],
+ [0x00128A, 0x00128D],
+ [0x001290, 0x0012B0],
+ [0x0012B2, 0x0012B5],
+ [0x0012B8, 0x0012BE],
+ [0x0012C2, 0x0012C5],
+ [0x0012C8, 0x0012D6],
+ [0x0012D8, 0x001310],
+ [0x001312, 0x001315],
+ [0x001318, 0x00135A],
+ [0x00135D, 0x00137C],
+ [0x001380, 0x001399],
+ [0x0013A0, 0x0013F5],
+ [0x0013F8, 0x0013FD],
+ [0x001400, 0x00169C],
+ [0x0016A0, 0x0016F8],
+ [0x001700, 0x001715],
+ [0x00171F, 0x001736],
+ [0x001740, 0x001753],
+ [0x001760, 0x00176C],
+ [0x00176E, 0x001770],
+ [0x001772, 0x001773],
+ [0x001780, 0x0017DD],
+ [0x0017E0, 0x0017E9],
+ [0x0017F0, 0x0017F9],
+ [0x001800, 0x00180D],
+ [0x00180F, 0x001819],
+ [0x001820, 0x001878],
+ [0x001880, 0x0018AA],
+ [0x0018B0, 0x0018F5],
+ [0x001900, 0x00191E],
+ [0x001920, 0x00192B],
+ [0x001930, 0x00193B],
+ [0x001944, 0x00196D],
+ [0x001970, 0x001974],
+ [0x001980, 0x0019AB],
+ [0x0019B0, 0x0019C9],
+ [0x0019D0, 0x0019DA],
+ [0x0019DE, 0x001A1B],
+ [0x001A1E, 0x001A5E],
+ [0x001A60, 0x001A7C],
+ [0x001A7F, 0x001A89],
+ [0x001A90, 0x001A99],
+ [0x001AA0, 0x001AAD],
+ [0x001AB0, 0x001ACE],
+ [0x001B00, 0x001B4C],
+ [0x001B50, 0x001B7E],
+ [0x001B80, 0x001BF3],
+ [0x001BFC, 0x001C37],
+ [0x001C3B, 0x001C49],
+ [0x001C4D, 0x001C88],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CC7],
+ [0x001CD0, 0x001CFA],
+ [0x001D00, 0x001F15],
+ [0x001F18, 0x001F1D],
+ [0x001F20, 0x001F45],
+ [0x001F48, 0x001F4D],
+ [0x001F50, 0x001F57],
+ [0x001F5F, 0x001F7D],
+ [0x001F80, 0x001FB4],
+ [0x001FB6, 0x001FC4],
+ [0x001FC6, 0x001FD3],
+ [0x001FD6, 0x001FDB],
+ [0x001FDD, 0x001FEF],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FFE],
+ [0x002000, 0x00200A],
+ [0x002010, 0x002029],
+ [0x00202F, 0x00205F],
+ [0x002070, 0x002071],
+ [0x002074, 0x00208E],
+ [0x002090, 0x00209C],
+ [0x0020A0, 0x0020C0],
+ [0x0020D0, 0x0020F0],
+ [0x002100, 0x00218B],
+ [0x002190, 0x002426],
+ [0x002440, 0x00244A],
+ [0x002460, 0x002B73],
+ [0x002B76, 0x002B95],
+ [0x002B97, 0x002CF3],
+ [0x002CF9, 0x002D25],
+ [0x002D30, 0x002D67],
+ [0x002D6F, 0x002D70],
+ [0x002D7F, 0x002D96],
+ [0x002DA0, 0x002DA6],
+ [0x002DA8, 0x002DAE],
+ [0x002DB0, 0x002DB6],
+ [0x002DB8, 0x002DBE],
+ [0x002DC0, 0x002DC6],
+ [0x002DC8, 0x002DCE],
+ [0x002DD0, 0x002DD6],
+ [0x002DD8, 0x002DDE],
+ [0x002DE0, 0x002E5D],
+ [0x002E80, 0x002E99],
+ [0x002E9B, 0x002EF3],
+ [0x002F00, 0x002FD5],
+ [0x002FF0, 0x002FFB],
+ [0x003000, 0x00303F],
+ [0x003041, 0x003096],
+ [0x003099, 0x0030FF],
+ [0x003105, 0x00312F],
+ [0x003131, 0x00318E],
+ [0x003190, 0x0031E3],
+ [0x0031F0, 0x00321E],
+ [0x003220, 0x00A48C],
+ [0x00A490, 0x00A4C6],
+ [0x00A4D0, 0x00A62B],
+ [0x00A640, 0x00A6F7],
+ [0x00A700, 0x00A7CA],
+ [0x00A7D0, 0x00A7D1],
+ [0x00A7D5, 0x00A7D9],
+ [0x00A7F2, 0x00A82C],
+ [0x00A830, 0x00A839],
+ [0x00A840, 0x00A877],
+ [0x00A880, 0x00A8C5],
+ [0x00A8CE, 0x00A8D9],
+ [0x00A8E0, 0x00A953],
+ [0x00A95F, 0x00A97C],
+ [0x00A980, 0x00A9CD],
+ [0x00A9CF, 0x00A9D9],
+ [0x00A9DE, 0x00A9FE],
+ [0x00AA00, 0x00AA36],
+ [0x00AA40, 0x00AA4D],
+ [0x00AA50, 0x00AA59],
+ [0x00AA5C, 0x00AAC2],
+ [0x00AADB, 0x00AAF6],
+ [0x00AB01, 0x00AB06],
+ [0x00AB09, 0x00AB0E],
+ [0x00AB11, 0x00AB16],
+ [0x00AB20, 0x00AB26],
+ [0x00AB28, 0x00AB2E],
+ [0x00AB30, 0x00AB6B],
+ [0x00AB70, 0x00ABED],
+ [0x00ABF0, 0x00ABF9],
+ [0x00AC00, 0x00D7A3],
+ [0x00D7B0, 0x00D7C6],
+ [0x00D7CB, 0x00D7FB],
+ [0x00F900, 0x00FA6D],
+ [0x00FA70, 0x00FAD9],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FB1D, 0x00FB36],
+ [0x00FB38, 0x00FB3C],
+ [0x00FB40, 0x00FB41],
+ [0x00FB43, 0x00FB44],
+ [0x00FB46, 0x00FBC2],
+ [0x00FBD3, 0x00FD8F],
+ [0x00FD92, 0x00FDC7],
+ [0x00FDF0, 0x00FE19],
+ [0x00FE20, 0x00FE52],
+ [0x00FE54, 0x00FE66],
+ [0x00FE68, 0x00FE6B],
+ [0x00FE70, 0x00FE74],
+ [0x00FE76, 0x00FEFC],
+ [0x00FF01, 0x00FFBE],
+ [0x00FFC2, 0x00FFC7],
+ [0x00FFCA, 0x00FFCF],
+ [0x00FFD2, 0x00FFD7],
+ [0x00FFDA, 0x00FFDC],
+ [0x00FFE0, 0x00FFE6],
+ [0x00FFE8, 0x00FFEE],
+ [0x00FFFC, 0x00FFFD],
+ [0x010000, 0x01000B],
+ [0x01000D, 0x010026],
+ [0x010028, 0x01003A],
+ [0x01003C, 0x01003D],
+ [0x01003F, 0x01004D],
+ [0x010050, 0x01005D],
+ [0x010080, 0x0100FA],
+ [0x010100, 0x010102],
+ [0x010107, 0x010133],
+ [0x010137, 0x01018E],
+ [0x010190, 0x01019C],
+ [0x0101D0, 0x0101FD],
+ [0x010280, 0x01029C],
+ [0x0102A0, 0x0102D0],
+ [0x0102E0, 0x0102FB],
+ [0x010300, 0x010323],
+ [0x01032D, 0x01034A],
+ [0x010350, 0x01037A],
+ [0x010380, 0x01039D],
+ [0x01039F, 0x0103C3],
+ [0x0103C8, 0x0103D5],
+ [0x010400, 0x01049D],
+ [0x0104A0, 0x0104A9],
+ [0x0104B0, 0x0104D3],
+ [0x0104D8, 0x0104FB],
+ [0x010500, 0x010527],
+ [0x010530, 0x010563],
+ [0x01056F, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC],
+ [0x010600, 0x010736],
+ [0x010740, 0x010755],
+ [0x010760, 0x010767],
+ [0x010780, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x010800, 0x010805],
+ [0x01080A, 0x010835],
+ [0x010837, 0x010838],
+ [0x01083F, 0x010855],
+ [0x010857, 0x01089E],
+ [0x0108A7, 0x0108AF],
+ [0x0108E0, 0x0108F2],
+ [0x0108F4, 0x0108F5],
+ [0x0108FB, 0x01091B],
+ [0x01091F, 0x010939],
+ [0x010980, 0x0109B7],
+ [0x0109BC, 0x0109CF],
+ [0x0109D2, 0x010A03],
+ [0x010A05, 0x010A06],
+ [0x010A0C, 0x010A13],
+ [0x010A15, 0x010A17],
+ [0x010A19, 0x010A35],
+ [0x010A38, 0x010A3A],
+ [0x010A3F, 0x010A48],
+ [0x010A50, 0x010A58],
+ [0x010A60, 0x010A9F],
+ [0x010AC0, 0x010AE6],
+ [0x010AEB, 0x010AF6],
+ [0x010B00, 0x010B35],
+ [0x010B39, 0x010B55],
+ [0x010B58, 0x010B72],
+ [0x010B78, 0x010B91],
+ [0x010B99, 0x010B9C],
+ [0x010BA9, 0x010BAF],
+ [0x010C00, 0x010C48],
+ [0x010C80, 0x010CB2],
+ [0x010CC0, 0x010CF2],
+ [0x010CFA, 0x010D27],
+ [0x010D30, 0x010D39],
+ [0x010E60, 0x010E7E],
+ [0x010E80, 0x010EA9],
+ [0x010EAB, 0x010EAD],
+ [0x010EB0, 0x010EB1],
+ [0x010EFD, 0x010F27],
+ [0x010F30, 0x010F59],
+ [0x010F70, 0x010F89],
+ [0x010FB0, 0x010FCB],
+ [0x010FE0, 0x010FF6],
+ [0x011000, 0x01104D],
+ [0x011052, 0x011075],
+ [0x01107F, 0x0110BC],
+ [0x0110BE, 0x0110C2],
+ [0x0110D0, 0x0110E8],
+ [0x0110F0, 0x0110F9],
+ [0x011100, 0x011134],
+ [0x011136, 0x011147],
+ [0x011150, 0x011176],
+ [0x011180, 0x0111DF],
+ [0x0111E1, 0x0111F4],
+ [0x011200, 0x011211],
+ [0x011213, 0x011241],
+ [0x011280, 0x011286],
+ [0x01128A, 0x01128D],
+ [0x01128F, 0x01129D],
+ [0x01129F, 0x0112A9],
+ [0x0112B0, 0x0112EA],
+ [0x0112F0, 0x0112F9],
+ [0x011300, 0x011303],
+ [0x011305, 0x01130C],
+ [0x01130F, 0x011310],
+ [0x011313, 0x011328],
+ [0x01132A, 0x011330],
+ [0x011332, 0x011333],
+ [0x011335, 0x011339],
+ [0x01133B, 0x011344],
+ [0x011347, 0x011348],
+ [0x01134B, 0x01134D],
+ [0x01135D, 0x011363],
+ [0x011366, 0x01136C],
+ [0x011370, 0x011374],
+ [0x011400, 0x01145B],
+ [0x01145D, 0x011461],
+ [0x011480, 0x0114C7],
+ [0x0114D0, 0x0114D9],
+ [0x011580, 0x0115B5],
+ [0x0115B8, 0x0115DD],
+ [0x011600, 0x011644],
+ [0x011650, 0x011659],
+ [0x011660, 0x01166C],
+ [0x011680, 0x0116B9],
+ [0x0116C0, 0x0116C9],
+ [0x011700, 0x01171A],
+ [0x01171D, 0x01172B],
+ [0x011730, 0x011746],
+ [0x011800, 0x01183B],
+ [0x0118A0, 0x0118F2],
+ [0x0118FF, 0x011906],
+ [0x01190C, 0x011913],
+ [0x011915, 0x011916],
+ [0x011918, 0x011935],
+ [0x011937, 0x011938],
+ [0x01193B, 0x011946],
+ [0x011950, 0x011959],
+ [0x0119A0, 0x0119A7],
+ [0x0119AA, 0x0119D7],
+ [0x0119DA, 0x0119E4],
+ [0x011A00, 0x011A47],
+ [0x011A50, 0x011AA2],
+ [0x011AB0, 0x011AF8],
+ [0x011B00, 0x011B09],
+ [0x011C00, 0x011C08],
+ [0x011C0A, 0x011C36],
+ [0x011C38, 0x011C45],
+ [0x011C50, 0x011C6C],
+ [0x011C70, 0x011C8F],
+ [0x011C92, 0x011CA7],
+ [0x011CA9, 0x011CB6],
+ [0x011D00, 0x011D06],
+ [0x011D08, 0x011D09],
+ [0x011D0B, 0x011D36],
+ [0x011D3C, 0x011D3D],
+ [0x011D3F, 0x011D47],
+ [0x011D50, 0x011D59],
+ [0x011D60, 0x011D65],
+ [0x011D67, 0x011D68],
+ [0x011D6A, 0x011D8E],
+ [0x011D90, 0x011D91],
+ [0x011D93, 0x011D98],
+ [0x011DA0, 0x011DA9],
+ [0x011EE0, 0x011EF8],
+ [0x011F00, 0x011F10],
+ [0x011F12, 0x011F3A],
+ [0x011F3E, 0x011F59],
+ [0x011FC0, 0x011FF1],
+ [0x011FFF, 0x012399],
+ [0x012400, 0x01246E],
+ [0x012470, 0x012474],
+ [0x012480, 0x012543],
+ [0x012F90, 0x012FF2],
+ [0x013000, 0x01342F],
+ [0x013440, 0x013455],
+ [0x014400, 0x014646],
+ [0x016800, 0x016A38],
+ [0x016A40, 0x016A5E],
+ [0x016A60, 0x016A69],
+ [0x016A6E, 0x016ABE],
+ [0x016AC0, 0x016AC9],
+ [0x016AD0, 0x016AED],
+ [0x016AF0, 0x016AF5],
+ [0x016B00, 0x016B45],
+ [0x016B50, 0x016B59],
+ [0x016B5B, 0x016B61],
+ [0x016B63, 0x016B77],
+ [0x016B7D, 0x016B8F],
+ [0x016E40, 0x016E9A],
+ [0x016F00, 0x016F4A],
+ [0x016F4F, 0x016F87],
+ [0x016F8F, 0x016F9F],
+ [0x016FE0, 0x016FE4],
+ [0x016FF0, 0x016FF1],
+ [0x017000, 0x0187F7],
+ [0x018800, 0x018CD5],
+ [0x018D00, 0x018D08],
+ [0x01AFF0, 0x01AFF3],
+ [0x01AFF5, 0x01AFFB],
+ [0x01AFFD, 0x01AFFE],
+ [0x01B000, 0x01B122],
+ [0x01B150, 0x01B152],
+ [0x01B164, 0x01B167],
+ [0x01B170, 0x01B2FB],
+ [0x01BC00, 0x01BC6A],
+ [0x01BC70, 0x01BC7C],
+ [0x01BC80, 0x01BC88],
+ [0x01BC90, 0x01BC99],
+ [0x01BC9C, 0x01BC9F],
+ [0x01CF00, 0x01CF2D],
+ [0x01CF30, 0x01CF46],
+ [0x01CF50, 0x01CFC3],
+ [0x01D000, 0x01D0F5],
+ [0x01D100, 0x01D126],
+ [0x01D129, 0x01D172],
+ [0x01D17B, 0x01D1EA],
+ [0x01D200, 0x01D245],
+ [0x01D2C0, 0x01D2D3],
+ [0x01D2E0, 0x01D2F3],
+ [0x01D300, 0x01D356],
+ [0x01D360, 0x01D378],
+ [0x01D400, 0x01D454],
+ [0x01D456, 0x01D49C],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D51E, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D552, 0x01D6A5],
+ [0x01D6A8, 0x01D7CB],
+ [0x01D7CE, 0x01DA8B],
+ [0x01DA9B, 0x01DA9F],
+ [0x01DAA1, 0x01DAAF],
+ [0x01DF00, 0x01DF1E],
+ [0x01DF25, 0x01DF2A],
+ [0x01E000, 0x01E006],
+ [0x01E008, 0x01E018],
+ [0x01E01B, 0x01E021],
+ [0x01E023, 0x01E024],
+ [0x01E026, 0x01E02A],
+ [0x01E030, 0x01E06D],
+ [0x01E100, 0x01E12C],
+ [0x01E130, 0x01E13D],
+ [0x01E140, 0x01E149],
+ [0x01E14E, 0x01E14F],
+ [0x01E290, 0x01E2AE],
+ [0x01E2C0, 0x01E2F9],
+ [0x01E4D0, 0x01E4F9],
+ [0x01E7E0, 0x01E7E6],
+ [0x01E7E8, 0x01E7EB],
+ [0x01E7ED, 0x01E7EE],
+ [0x01E7F0, 0x01E7FE],
+ [0x01E800, 0x01E8C4],
+ [0x01E8C7, 0x01E8D6],
+ [0x01E900, 0x01E94B],
+ [0x01E950, 0x01E959],
+ [0x01E95E, 0x01E95F],
+ [0x01EC71, 0x01ECB4],
+ [0x01ED01, 0x01ED3D],
+ [0x01EE00, 0x01EE03],
+ [0x01EE05, 0x01EE1F],
+ [0x01EE21, 0x01EE22],
+ [0x01EE29, 0x01EE32],
+ [0x01EE34, 0x01EE37],
+ [0x01EE4D, 0x01EE4F],
+ [0x01EE51, 0x01EE52],
+ [0x01EE61, 0x01EE62],
+ [0x01EE67, 0x01EE6A],
+ [0x01EE6C, 0x01EE72],
+ [0x01EE74, 0x01EE77],
+ [0x01EE79, 0x01EE7C],
+ [0x01EE80, 0x01EE89],
+ [0x01EE8B, 0x01EE9B],
+ [0x01EEA1, 0x01EEA3],
+ [0x01EEA5, 0x01EEA9],
+ [0x01EEAB, 0x01EEBB],
+ [0x01EEF0, 0x01EEF1],
+ [0x01F000, 0x01F02B],
+ [0x01F030, 0x01F093],
+ [0x01F0A0, 0x01F0AE],
+ [0x01F0B1, 0x01F0BF],
+ [0x01F0C1, 0x01F0CF],
+ [0x01F0D1, 0x01F0F5],
+ [0x01F100, 0x01F1AD],
+ [0x01F1E6, 0x01F202],
+ [0x01F210, 0x01F23B],
+ [0x01F240, 0x01F248],
+ [0x01F250, 0x01F251],
+ [0x01F260, 0x01F265],
+ [0x01F300, 0x01F6D7],
+ [0x01F6DC, 0x01F6EC],
+ [0x01F6F0, 0x01F6FC],
+ [0x01F700, 0x01F776],
+ [0x01F77B, 0x01F7D9],
+ [0x01F7E0, 0x01F7EB],
+ [0x01F800, 0x01F80B],
+ [0x01F810, 0x01F847],
+ [0x01F850, 0x01F859],
+ [0x01F860, 0x01F887],
+ [0x01F890, 0x01F8AD],
+ [0x01F8B0, 0x01F8B1],
+ [0x01F900, 0x01FA53],
+ [0x01FA60, 0x01FA6D],
+ [0x01FA70, 0x01FA7C],
+ [0x01FA80, 0x01FA88],
+ [0x01FA90, 0x01FABD],
+ [0x01FABF, 0x01FAC5],
+ [0x01FACE, 0x01FADB],
+ [0x01FAE0, 0x01FAE8],
+ [0x01FAF0, 0x01FAF8],
+ [0x01FB00, 0x01FB92],
+ [0x01FB94, 0x01FBCA],
+ [0x01FBF0, 0x01FBF9],
+ [0x020000, 0x02A6DF],
+ [0x02A700, 0x02B739],
+ [0x02B740, 0x02B81D],
+ [0x02B820, 0x02CEA1],
+ [0x02CEB0, 0x02EBE0],
+ [0x02F800, 0x02FA1D],
+ [0x030000, 0x03134A],
+ [0x031350, 0x0323AF],
+ [0x0E0100, 0x0E01EF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Other}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Other}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=C}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=C}"
+);
+testPropertyEscapes(
+ /^\P{gc=Other}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Other}"
+);
+testPropertyEscapes(
+ /^\P{gc=C}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=C}"
+);
+testPropertyEscapes(
+ /^\P{Other}+$/u,
+ nonMatchSymbols,
+ "\\P{Other}"
+);
+testPropertyEscapes(
+ /^\P{C}+$/u,
+ nonMatchSymbols,
+ "\\P{C}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Letter.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Letter.js
new file mode 100644
index 0000000000..a9d0f1944c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Letter.js
@@ -0,0 +1,1113 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Other_Letter`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000AA,
+ 0x0000BA,
+ 0x0001BB,
+ 0x000294,
+ 0x0006D5,
+ 0x0006FF,
+ 0x000710,
+ 0x0007B1,
+ 0x00093D,
+ 0x000950,
+ 0x0009B2,
+ 0x0009BD,
+ 0x0009CE,
+ 0x0009FC,
+ 0x000A5E,
+ 0x000ABD,
+ 0x000AD0,
+ 0x000AF9,
+ 0x000B3D,
+ 0x000B71,
+ 0x000B83,
+ 0x000B9C,
+ 0x000BD0,
+ 0x000C3D,
+ 0x000C5D,
+ 0x000C80,
+ 0x000CBD,
+ 0x000D3D,
+ 0x000D4E,
+ 0x000DBD,
+ 0x000E84,
+ 0x000EA5,
+ 0x000EBD,
+ 0x000F00,
+ 0x00103F,
+ 0x001061,
+ 0x00108E,
+ 0x001258,
+ 0x0012C0,
+ 0x0017DC,
+ 0x0018AA,
+ 0x001CFA,
+ 0x003006,
+ 0x00303C,
+ 0x00309F,
+ 0x0030FF,
+ 0x00A66E,
+ 0x00A78F,
+ 0x00A7F7,
+ 0x00A8FB,
+ 0x00AA7A,
+ 0x00AAB1,
+ 0x00AAC0,
+ 0x00AAC2,
+ 0x00AAF2,
+ 0x00FB1D,
+ 0x00FB3E,
+ 0x010808,
+ 0x01083C,
+ 0x010A00,
+ 0x010F27,
+ 0x011075,
+ 0x011144,
+ 0x011147,
+ 0x011176,
+ 0x0111DA,
+ 0x0111DC,
+ 0x011288,
+ 0x01133D,
+ 0x011350,
+ 0x0114C7,
+ 0x011644,
+ 0x0116B8,
+ 0x011909,
+ 0x01193F,
+ 0x011941,
+ 0x0119E1,
+ 0x0119E3,
+ 0x011A00,
+ 0x011A3A,
+ 0x011A50,
+ 0x011A9D,
+ 0x011C40,
+ 0x011D46,
+ 0x011D98,
+ 0x011F02,
+ 0x011FB0,
+ 0x016F50,
+ 0x01B132,
+ 0x01B155,
+ 0x01DF0A,
+ 0x01E14E,
+ 0x01EE24,
+ 0x01EE27,
+ 0x01EE39,
+ 0x01EE3B,
+ 0x01EE42,
+ 0x01EE47,
+ 0x01EE49,
+ 0x01EE4B,
+ 0x01EE54,
+ 0x01EE57,
+ 0x01EE59,
+ 0x01EE5B,
+ 0x01EE5D,
+ 0x01EE5F,
+ 0x01EE64,
+ 0x01EE7E
+ ],
+ ranges: [
+ [0x0001C0, 0x0001C3],
+ [0x0005D0, 0x0005EA],
+ [0x0005EF, 0x0005F2],
+ [0x000620, 0x00063F],
+ [0x000641, 0x00064A],
+ [0x00066E, 0x00066F],
+ [0x000671, 0x0006D3],
+ [0x0006EE, 0x0006EF],
+ [0x0006FA, 0x0006FC],
+ [0x000712, 0x00072F],
+ [0x00074D, 0x0007A5],
+ [0x0007CA, 0x0007EA],
+ [0x000800, 0x000815],
+ [0x000840, 0x000858],
+ [0x000860, 0x00086A],
+ [0x000870, 0x000887],
+ [0x000889, 0x00088E],
+ [0x0008A0, 0x0008C8],
+ [0x000904, 0x000939],
+ [0x000958, 0x000961],
+ [0x000972, 0x000980],
+ [0x000985, 0x00098C],
+ [0x00098F, 0x000990],
+ [0x000993, 0x0009A8],
+ [0x0009AA, 0x0009B0],
+ [0x0009B6, 0x0009B9],
+ [0x0009DC, 0x0009DD],
+ [0x0009DF, 0x0009E1],
+ [0x0009F0, 0x0009F1],
+ [0x000A05, 0x000A0A],
+ [0x000A0F, 0x000A10],
+ [0x000A13, 0x000A28],
+ [0x000A2A, 0x000A30],
+ [0x000A32, 0x000A33],
+ [0x000A35, 0x000A36],
+ [0x000A38, 0x000A39],
+ [0x000A59, 0x000A5C],
+ [0x000A72, 0x000A74],
+ [0x000A85, 0x000A8D],
+ [0x000A8F, 0x000A91],
+ [0x000A93, 0x000AA8],
+ [0x000AAA, 0x000AB0],
+ [0x000AB2, 0x000AB3],
+ [0x000AB5, 0x000AB9],
+ [0x000AE0, 0x000AE1],
+ [0x000B05, 0x000B0C],
+ [0x000B0F, 0x000B10],
+ [0x000B13, 0x000B28],
+ [0x000B2A, 0x000B30],
+ [0x000B32, 0x000B33],
+ [0x000B35, 0x000B39],
+ [0x000B5C, 0x000B5D],
+ [0x000B5F, 0x000B61],
+ [0x000B85, 0x000B8A],
+ [0x000B8E, 0x000B90],
+ [0x000B92, 0x000B95],
+ [0x000B99, 0x000B9A],
+ [0x000B9E, 0x000B9F],
+ [0x000BA3, 0x000BA4],
+ [0x000BA8, 0x000BAA],
+ [0x000BAE, 0x000BB9],
+ [0x000C05, 0x000C0C],
+ [0x000C0E, 0x000C10],
+ [0x000C12, 0x000C28],
+ [0x000C2A, 0x000C39],
+ [0x000C58, 0x000C5A],
+ [0x000C60, 0x000C61],
+ [0x000C85, 0x000C8C],
+ [0x000C8E, 0x000C90],
+ [0x000C92, 0x000CA8],
+ [0x000CAA, 0x000CB3],
+ [0x000CB5, 0x000CB9],
+ [0x000CDD, 0x000CDE],
+ [0x000CE0, 0x000CE1],
+ [0x000CF1, 0x000CF2],
+ [0x000D04, 0x000D0C],
+ [0x000D0E, 0x000D10],
+ [0x000D12, 0x000D3A],
+ [0x000D54, 0x000D56],
+ [0x000D5F, 0x000D61],
+ [0x000D7A, 0x000D7F],
+ [0x000D85, 0x000D96],
+ [0x000D9A, 0x000DB1],
+ [0x000DB3, 0x000DBB],
+ [0x000DC0, 0x000DC6],
+ [0x000E01, 0x000E30],
+ [0x000E32, 0x000E33],
+ [0x000E40, 0x000E45],
+ [0x000E81, 0x000E82],
+ [0x000E86, 0x000E8A],
+ [0x000E8C, 0x000EA3],
+ [0x000EA7, 0x000EB0],
+ [0x000EB2, 0x000EB3],
+ [0x000EC0, 0x000EC4],
+ [0x000EDC, 0x000EDF],
+ [0x000F40, 0x000F47],
+ [0x000F49, 0x000F6C],
+ [0x000F88, 0x000F8C],
+ [0x001000, 0x00102A],
+ [0x001050, 0x001055],
+ [0x00105A, 0x00105D],
+ [0x001065, 0x001066],
+ [0x00106E, 0x001070],
+ [0x001075, 0x001081],
+ [0x001100, 0x001248],
+ [0x00124A, 0x00124D],
+ [0x001250, 0x001256],
+ [0x00125A, 0x00125D],
+ [0x001260, 0x001288],
+ [0x00128A, 0x00128D],
+ [0x001290, 0x0012B0],
+ [0x0012B2, 0x0012B5],
+ [0x0012B8, 0x0012BE],
+ [0x0012C2, 0x0012C5],
+ [0x0012C8, 0x0012D6],
+ [0x0012D8, 0x001310],
+ [0x001312, 0x001315],
+ [0x001318, 0x00135A],
+ [0x001380, 0x00138F],
+ [0x001401, 0x00166C],
+ [0x00166F, 0x00167F],
+ [0x001681, 0x00169A],
+ [0x0016A0, 0x0016EA],
+ [0x0016F1, 0x0016F8],
+ [0x001700, 0x001711],
+ [0x00171F, 0x001731],
+ [0x001740, 0x001751],
+ [0x001760, 0x00176C],
+ [0x00176E, 0x001770],
+ [0x001780, 0x0017B3],
+ [0x001820, 0x001842],
+ [0x001844, 0x001878],
+ [0x001880, 0x001884],
+ [0x001887, 0x0018A8],
+ [0x0018B0, 0x0018F5],
+ [0x001900, 0x00191E],
+ [0x001950, 0x00196D],
+ [0x001970, 0x001974],
+ [0x001980, 0x0019AB],
+ [0x0019B0, 0x0019C9],
+ [0x001A00, 0x001A16],
+ [0x001A20, 0x001A54],
+ [0x001B05, 0x001B33],
+ [0x001B45, 0x001B4C],
+ [0x001B83, 0x001BA0],
+ [0x001BAE, 0x001BAF],
+ [0x001BBA, 0x001BE5],
+ [0x001C00, 0x001C23],
+ [0x001C4D, 0x001C4F],
+ [0x001C5A, 0x001C77],
+ [0x001CE9, 0x001CEC],
+ [0x001CEE, 0x001CF3],
+ [0x001CF5, 0x001CF6],
+ [0x002135, 0x002138],
+ [0x002D30, 0x002D67],
+ [0x002D80, 0x002D96],
+ [0x002DA0, 0x002DA6],
+ [0x002DA8, 0x002DAE],
+ [0x002DB0, 0x002DB6],
+ [0x002DB8, 0x002DBE],
+ [0x002DC0, 0x002DC6],
+ [0x002DC8, 0x002DCE],
+ [0x002DD0, 0x002DD6],
+ [0x002DD8, 0x002DDE],
+ [0x003041, 0x003096],
+ [0x0030A1, 0x0030FA],
+ [0x003105, 0x00312F],
+ [0x003131, 0x00318E],
+ [0x0031A0, 0x0031BF],
+ [0x0031F0, 0x0031FF],
+ [0x003400, 0x004DBF],
+ [0x004E00, 0x00A014],
+ [0x00A016, 0x00A48C],
+ [0x00A4D0, 0x00A4F7],
+ [0x00A500, 0x00A60B],
+ [0x00A610, 0x00A61F],
+ [0x00A62A, 0x00A62B],
+ [0x00A6A0, 0x00A6E5],
+ [0x00A7FB, 0x00A801],
+ [0x00A803, 0x00A805],
+ [0x00A807, 0x00A80A],
+ [0x00A80C, 0x00A822],
+ [0x00A840, 0x00A873],
+ [0x00A882, 0x00A8B3],
+ [0x00A8F2, 0x00A8F7],
+ [0x00A8FD, 0x00A8FE],
+ [0x00A90A, 0x00A925],
+ [0x00A930, 0x00A946],
+ [0x00A960, 0x00A97C],
+ [0x00A984, 0x00A9B2],
+ [0x00A9E0, 0x00A9E4],
+ [0x00A9E7, 0x00A9EF],
+ [0x00A9FA, 0x00A9FE],
+ [0x00AA00, 0x00AA28],
+ [0x00AA40, 0x00AA42],
+ [0x00AA44, 0x00AA4B],
+ [0x00AA60, 0x00AA6F],
+ [0x00AA71, 0x00AA76],
+ [0x00AA7E, 0x00AAAF],
+ [0x00AAB5, 0x00AAB6],
+ [0x00AAB9, 0x00AABD],
+ [0x00AADB, 0x00AADC],
+ [0x00AAE0, 0x00AAEA],
+ [0x00AB01, 0x00AB06],
+ [0x00AB09, 0x00AB0E],
+ [0x00AB11, 0x00AB16],
+ [0x00AB20, 0x00AB26],
+ [0x00AB28, 0x00AB2E],
+ [0x00ABC0, 0x00ABE2],
+ [0x00AC00, 0x00D7A3],
+ [0x00D7B0, 0x00D7C6],
+ [0x00D7CB, 0x00D7FB],
+ [0x00F900, 0x00FA6D],
+ [0x00FA70, 0x00FAD9],
+ [0x00FB1F, 0x00FB28],
+ [0x00FB2A, 0x00FB36],
+ [0x00FB38, 0x00FB3C],
+ [0x00FB40, 0x00FB41],
+ [0x00FB43, 0x00FB44],
+ [0x00FB46, 0x00FBB1],
+ [0x00FBD3, 0x00FD3D],
+ [0x00FD50, 0x00FD8F],
+ [0x00FD92, 0x00FDC7],
+ [0x00FDF0, 0x00FDFB],
+ [0x00FE70, 0x00FE74],
+ [0x00FE76, 0x00FEFC],
+ [0x00FF66, 0x00FF6F],
+ [0x00FF71, 0x00FF9D],
+ [0x00FFA0, 0x00FFBE],
+ [0x00FFC2, 0x00FFC7],
+ [0x00FFCA, 0x00FFCF],
+ [0x00FFD2, 0x00FFD7],
+ [0x00FFDA, 0x00FFDC],
+ [0x010000, 0x01000B],
+ [0x01000D, 0x010026],
+ [0x010028, 0x01003A],
+ [0x01003C, 0x01003D],
+ [0x01003F, 0x01004D],
+ [0x010050, 0x01005D],
+ [0x010080, 0x0100FA],
+ [0x010280, 0x01029C],
+ [0x0102A0, 0x0102D0],
+ [0x010300, 0x01031F],
+ [0x01032D, 0x010340],
+ [0x010342, 0x010349],
+ [0x010350, 0x010375],
+ [0x010380, 0x01039D],
+ [0x0103A0, 0x0103C3],
+ [0x0103C8, 0x0103CF],
+ [0x010450, 0x01049D],
+ [0x010500, 0x010527],
+ [0x010530, 0x010563],
+ [0x010600, 0x010736],
+ [0x010740, 0x010755],
+ [0x010760, 0x010767],
+ [0x010800, 0x010805],
+ [0x01080A, 0x010835],
+ [0x010837, 0x010838],
+ [0x01083F, 0x010855],
+ [0x010860, 0x010876],
+ [0x010880, 0x01089E],
+ [0x0108E0, 0x0108F2],
+ [0x0108F4, 0x0108F5],
+ [0x010900, 0x010915],
+ [0x010920, 0x010939],
+ [0x010980, 0x0109B7],
+ [0x0109BE, 0x0109BF],
+ [0x010A10, 0x010A13],
+ [0x010A15, 0x010A17],
+ [0x010A19, 0x010A35],
+ [0x010A60, 0x010A7C],
+ [0x010A80, 0x010A9C],
+ [0x010AC0, 0x010AC7],
+ [0x010AC9, 0x010AE4],
+ [0x010B00, 0x010B35],
+ [0x010B40, 0x010B55],
+ [0x010B60, 0x010B72],
+ [0x010B80, 0x010B91],
+ [0x010C00, 0x010C48],
+ [0x010D00, 0x010D23],
+ [0x010E80, 0x010EA9],
+ [0x010EB0, 0x010EB1],
+ [0x010F00, 0x010F1C],
+ [0x010F30, 0x010F45],
+ [0x010F70, 0x010F81],
+ [0x010FB0, 0x010FC4],
+ [0x010FE0, 0x010FF6],
+ [0x011003, 0x011037],
+ [0x011071, 0x011072],
+ [0x011083, 0x0110AF],
+ [0x0110D0, 0x0110E8],
+ [0x011103, 0x011126],
+ [0x011150, 0x011172],
+ [0x011183, 0x0111B2],
+ [0x0111C1, 0x0111C4],
+ [0x011200, 0x011211],
+ [0x011213, 0x01122B],
+ [0x01123F, 0x011240],
+ [0x011280, 0x011286],
+ [0x01128A, 0x01128D],
+ [0x01128F, 0x01129D],
+ [0x01129F, 0x0112A8],
+ [0x0112B0, 0x0112DE],
+ [0x011305, 0x01130C],
+ [0x01130F, 0x011310],
+ [0x011313, 0x011328],
+ [0x01132A, 0x011330],
+ [0x011332, 0x011333],
+ [0x011335, 0x011339],
+ [0x01135D, 0x011361],
+ [0x011400, 0x011434],
+ [0x011447, 0x01144A],
+ [0x01145F, 0x011461],
+ [0x011480, 0x0114AF],
+ [0x0114C4, 0x0114C5],
+ [0x011580, 0x0115AE],
+ [0x0115D8, 0x0115DB],
+ [0x011600, 0x01162F],
+ [0x011680, 0x0116AA],
+ [0x011700, 0x01171A],
+ [0x011740, 0x011746],
+ [0x011800, 0x01182B],
+ [0x0118FF, 0x011906],
+ [0x01190C, 0x011913],
+ [0x011915, 0x011916],
+ [0x011918, 0x01192F],
+ [0x0119A0, 0x0119A7],
+ [0x0119AA, 0x0119D0],
+ [0x011A0B, 0x011A32],
+ [0x011A5C, 0x011A89],
+ [0x011AB0, 0x011AF8],
+ [0x011C00, 0x011C08],
+ [0x011C0A, 0x011C2E],
+ [0x011C72, 0x011C8F],
+ [0x011D00, 0x011D06],
+ [0x011D08, 0x011D09],
+ [0x011D0B, 0x011D30],
+ [0x011D60, 0x011D65],
+ [0x011D67, 0x011D68],
+ [0x011D6A, 0x011D89],
+ [0x011EE0, 0x011EF2],
+ [0x011F04, 0x011F10],
+ [0x011F12, 0x011F33],
+ [0x012000, 0x012399],
+ [0x012480, 0x012543],
+ [0x012F90, 0x012FF0],
+ [0x013000, 0x01342F],
+ [0x013441, 0x013446],
+ [0x014400, 0x014646],
+ [0x016800, 0x016A38],
+ [0x016A40, 0x016A5E],
+ [0x016A70, 0x016ABE],
+ [0x016AD0, 0x016AED],
+ [0x016B00, 0x016B2F],
+ [0x016B63, 0x016B77],
+ [0x016B7D, 0x016B8F],
+ [0x016F00, 0x016F4A],
+ [0x017000, 0x0187F7],
+ [0x018800, 0x018CD5],
+ [0x018D00, 0x018D08],
+ [0x01B000, 0x01B122],
+ [0x01B150, 0x01B152],
+ [0x01B164, 0x01B167],
+ [0x01B170, 0x01B2FB],
+ [0x01BC00, 0x01BC6A],
+ [0x01BC70, 0x01BC7C],
+ [0x01BC80, 0x01BC88],
+ [0x01BC90, 0x01BC99],
+ [0x01E100, 0x01E12C],
+ [0x01E290, 0x01E2AD],
+ [0x01E2C0, 0x01E2EB],
+ [0x01E4D0, 0x01E4EA],
+ [0x01E7E0, 0x01E7E6],
+ [0x01E7E8, 0x01E7EB],
+ [0x01E7ED, 0x01E7EE],
+ [0x01E7F0, 0x01E7FE],
+ [0x01E800, 0x01E8C4],
+ [0x01EE00, 0x01EE03],
+ [0x01EE05, 0x01EE1F],
+ [0x01EE21, 0x01EE22],
+ [0x01EE29, 0x01EE32],
+ [0x01EE34, 0x01EE37],
+ [0x01EE4D, 0x01EE4F],
+ [0x01EE51, 0x01EE52],
+ [0x01EE61, 0x01EE62],
+ [0x01EE67, 0x01EE6A],
+ [0x01EE6C, 0x01EE72],
+ [0x01EE74, 0x01EE77],
+ [0x01EE79, 0x01EE7C],
+ [0x01EE80, 0x01EE89],
+ [0x01EE8B, 0x01EE9B],
+ [0x01EEA1, 0x01EEA3],
+ [0x01EEA5, 0x01EEA9],
+ [0x01EEAB, 0x01EEBB],
+ [0x020000, 0x02A6DF],
+ [0x02A700, 0x02B739],
+ [0x02B740, 0x02B81D],
+ [0x02B820, 0x02CEA1],
+ [0x02CEB0, 0x02EBE0],
+ [0x02F800, 0x02FA1D],
+ [0x030000, 0x03134A],
+ [0x031350, 0x0323AF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Other_Letter}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Other_Letter}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Lo}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Lo}"
+);
+testPropertyEscapes(
+ /^\p{gc=Other_Letter}+$/u,
+ matchSymbols,
+ "\\p{gc=Other_Letter}"
+);
+testPropertyEscapes(
+ /^\p{gc=Lo}+$/u,
+ matchSymbols,
+ "\\p{gc=Lo}"
+);
+testPropertyEscapes(
+ /^\p{Other_Letter}+$/u,
+ matchSymbols,
+ "\\p{Other_Letter}"
+);
+testPropertyEscapes(
+ /^\p{Lo}+$/u,
+ matchSymbols,
+ "\\p{Lo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000640,
+ 0x000670,
+ 0x0006D4,
+ 0x000711,
+ 0x000888,
+ 0x0009A9,
+ 0x0009B1,
+ 0x0009DE,
+ 0x000A29,
+ 0x000A31,
+ 0x000A34,
+ 0x000A37,
+ 0x000A5D,
+ 0x000A8E,
+ 0x000A92,
+ 0x000AA9,
+ 0x000AB1,
+ 0x000AB4,
+ 0x000B29,
+ 0x000B31,
+ 0x000B34,
+ 0x000B5E,
+ 0x000B84,
+ 0x000B91,
+ 0x000B9B,
+ 0x000B9D,
+ 0x000C0D,
+ 0x000C11,
+ 0x000C29,
+ 0x000C8D,
+ 0x000C91,
+ 0x000CA9,
+ 0x000CB4,
+ 0x000CDF,
+ 0x000D0D,
+ 0x000D11,
+ 0x000DB2,
+ 0x000DBC,
+ 0x000E31,
+ 0x000E83,
+ 0x000E85,
+ 0x000E8B,
+ 0x000EA4,
+ 0x000EA6,
+ 0x000EB1,
+ 0x000F48,
+ 0x001249,
+ 0x001257,
+ 0x001259,
+ 0x001289,
+ 0x0012B1,
+ 0x0012BF,
+ 0x0012C1,
+ 0x0012D7,
+ 0x001311,
+ 0x001680,
+ 0x00176D,
+ 0x001843,
+ 0x0018A9,
+ 0x001CED,
+ 0x001CF4,
+ 0x002DA7,
+ 0x002DAF,
+ 0x002DB7,
+ 0x002DBF,
+ 0x002DC7,
+ 0x002DCF,
+ 0x002DD7,
+ 0x0030A0,
+ 0x003130,
+ 0x00A015,
+ 0x00A802,
+ 0x00A806,
+ 0x00A80B,
+ 0x00A8FC,
+ 0x00A9FF,
+ 0x00AA43,
+ 0x00AA70,
+ 0x00AAB0,
+ 0x00AAC1,
+ 0x00AB27,
+ 0x00FB1E,
+ 0x00FB29,
+ 0x00FB37,
+ 0x00FB3D,
+ 0x00FB3F,
+ 0x00FB42,
+ 0x00FB45,
+ 0x00FE75,
+ 0x00FF70,
+ 0x01000C,
+ 0x010027,
+ 0x01003B,
+ 0x01003E,
+ 0x010341,
+ 0x010809,
+ 0x010836,
+ 0x0108F3,
+ 0x010A14,
+ 0x010A18,
+ 0x010AC8,
+ 0x0111DB,
+ 0x011212,
+ 0x011287,
+ 0x011289,
+ 0x01128E,
+ 0x01129E,
+ 0x011329,
+ 0x011331,
+ 0x011334,
+ 0x0114C6,
+ 0x011914,
+ 0x011917,
+ 0x011940,
+ 0x0119E2,
+ 0x011C09,
+ 0x011D07,
+ 0x011D0A,
+ 0x011D66,
+ 0x011D69,
+ 0x011F03,
+ 0x011F11,
+ 0x01E7E7,
+ 0x01E7EC,
+ 0x01E7EF,
+ 0x01E7FF,
+ 0x01EE04,
+ 0x01EE20,
+ 0x01EE23,
+ 0x01EE28,
+ 0x01EE33,
+ 0x01EE38,
+ 0x01EE3A,
+ 0x01EE48,
+ 0x01EE4A,
+ 0x01EE4C,
+ 0x01EE50,
+ 0x01EE53,
+ 0x01EE58,
+ 0x01EE5A,
+ 0x01EE5C,
+ 0x01EE5E,
+ 0x01EE60,
+ 0x01EE63,
+ 0x01EE6B,
+ 0x01EE73,
+ 0x01EE78,
+ 0x01EE7D,
+ 0x01EE7F,
+ 0x01EE8A,
+ 0x01EEA4,
+ 0x01EEAA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0000A9],
+ [0x0000AB, 0x0000B9],
+ [0x0000BB, 0x0001BA],
+ [0x0001BC, 0x0001BF],
+ [0x0001C4, 0x000293],
+ [0x000295, 0x0005CF],
+ [0x0005EB, 0x0005EE],
+ [0x0005F3, 0x00061F],
+ [0x00064B, 0x00066D],
+ [0x0006D6, 0x0006ED],
+ [0x0006F0, 0x0006F9],
+ [0x0006FD, 0x0006FE],
+ [0x000700, 0x00070F],
+ [0x000730, 0x00074C],
+ [0x0007A6, 0x0007B0],
+ [0x0007B2, 0x0007C9],
+ [0x0007EB, 0x0007FF],
+ [0x000816, 0x00083F],
+ [0x000859, 0x00085F],
+ [0x00086B, 0x00086F],
+ [0x00088F, 0x00089F],
+ [0x0008C9, 0x000903],
+ [0x00093A, 0x00093C],
+ [0x00093E, 0x00094F],
+ [0x000951, 0x000957],
+ [0x000962, 0x000971],
+ [0x000981, 0x000984],
+ [0x00098D, 0x00098E],
+ [0x000991, 0x000992],
+ [0x0009B3, 0x0009B5],
+ [0x0009BA, 0x0009BC],
+ [0x0009BE, 0x0009CD],
+ [0x0009CF, 0x0009DB],
+ [0x0009E2, 0x0009EF],
+ [0x0009F2, 0x0009FB],
+ [0x0009FD, 0x000A04],
+ [0x000A0B, 0x000A0E],
+ [0x000A11, 0x000A12],
+ [0x000A3A, 0x000A58],
+ [0x000A5F, 0x000A71],
+ [0x000A75, 0x000A84],
+ [0x000ABA, 0x000ABC],
+ [0x000ABE, 0x000ACF],
+ [0x000AD1, 0x000ADF],
+ [0x000AE2, 0x000AF8],
+ [0x000AFA, 0x000B04],
+ [0x000B0D, 0x000B0E],
+ [0x000B11, 0x000B12],
+ [0x000B3A, 0x000B3C],
+ [0x000B3E, 0x000B5B],
+ [0x000B62, 0x000B70],
+ [0x000B72, 0x000B82],
+ [0x000B8B, 0x000B8D],
+ [0x000B96, 0x000B98],
+ [0x000BA0, 0x000BA2],
+ [0x000BA5, 0x000BA7],
+ [0x000BAB, 0x000BAD],
+ [0x000BBA, 0x000BCF],
+ [0x000BD1, 0x000C04],
+ [0x000C3A, 0x000C3C],
+ [0x000C3E, 0x000C57],
+ [0x000C5B, 0x000C5C],
+ [0x000C5E, 0x000C5F],
+ [0x000C62, 0x000C7F],
+ [0x000C81, 0x000C84],
+ [0x000CBA, 0x000CBC],
+ [0x000CBE, 0x000CDC],
+ [0x000CE2, 0x000CF0],
+ [0x000CF3, 0x000D03],
+ [0x000D3B, 0x000D3C],
+ [0x000D3E, 0x000D4D],
+ [0x000D4F, 0x000D53],
+ [0x000D57, 0x000D5E],
+ [0x000D62, 0x000D79],
+ [0x000D80, 0x000D84],
+ [0x000D97, 0x000D99],
+ [0x000DBE, 0x000DBF],
+ [0x000DC7, 0x000E00],
+ [0x000E34, 0x000E3F],
+ [0x000E46, 0x000E80],
+ [0x000EB4, 0x000EBC],
+ [0x000EBE, 0x000EBF],
+ [0x000EC5, 0x000EDB],
+ [0x000EE0, 0x000EFF],
+ [0x000F01, 0x000F3F],
+ [0x000F6D, 0x000F87],
+ [0x000F8D, 0x000FFF],
+ [0x00102B, 0x00103E],
+ [0x001040, 0x00104F],
+ [0x001056, 0x001059],
+ [0x00105E, 0x001060],
+ [0x001062, 0x001064],
+ [0x001067, 0x00106D],
+ [0x001071, 0x001074],
+ [0x001082, 0x00108D],
+ [0x00108F, 0x0010FF],
+ [0x00124E, 0x00124F],
+ [0x00125E, 0x00125F],
+ [0x00128E, 0x00128F],
+ [0x0012B6, 0x0012B7],
+ [0x0012C6, 0x0012C7],
+ [0x001316, 0x001317],
+ [0x00135B, 0x00137F],
+ [0x001390, 0x001400],
+ [0x00166D, 0x00166E],
+ [0x00169B, 0x00169F],
+ [0x0016EB, 0x0016F0],
+ [0x0016F9, 0x0016FF],
+ [0x001712, 0x00171E],
+ [0x001732, 0x00173F],
+ [0x001752, 0x00175F],
+ [0x001771, 0x00177F],
+ [0x0017B4, 0x0017DB],
+ [0x0017DD, 0x00181F],
+ [0x001879, 0x00187F],
+ [0x001885, 0x001886],
+ [0x0018AB, 0x0018AF],
+ [0x0018F6, 0x0018FF],
+ [0x00191F, 0x00194F],
+ [0x00196E, 0x00196F],
+ [0x001975, 0x00197F],
+ [0x0019AC, 0x0019AF],
+ [0x0019CA, 0x0019FF],
+ [0x001A17, 0x001A1F],
+ [0x001A55, 0x001B04],
+ [0x001B34, 0x001B44],
+ [0x001B4D, 0x001B82],
+ [0x001BA1, 0x001BAD],
+ [0x001BB0, 0x001BB9],
+ [0x001BE6, 0x001BFF],
+ [0x001C24, 0x001C4C],
+ [0x001C50, 0x001C59],
+ [0x001C78, 0x001CE8],
+ [0x001CF7, 0x001CF9],
+ [0x001CFB, 0x002134],
+ [0x002139, 0x002D2F],
+ [0x002D68, 0x002D7F],
+ [0x002D97, 0x002D9F],
+ [0x002DDF, 0x003005],
+ [0x003007, 0x00303B],
+ [0x00303D, 0x003040],
+ [0x003097, 0x00309E],
+ [0x0030FB, 0x0030FE],
+ [0x003100, 0x003104],
+ [0x00318F, 0x00319F],
+ [0x0031C0, 0x0031EF],
+ [0x003200, 0x0033FF],
+ [0x004DC0, 0x004DFF],
+ [0x00A48D, 0x00A4CF],
+ [0x00A4F8, 0x00A4FF],
+ [0x00A60C, 0x00A60F],
+ [0x00A620, 0x00A629],
+ [0x00A62C, 0x00A66D],
+ [0x00A66F, 0x00A69F],
+ [0x00A6E6, 0x00A78E],
+ [0x00A790, 0x00A7F6],
+ [0x00A7F8, 0x00A7FA],
+ [0x00A823, 0x00A83F],
+ [0x00A874, 0x00A881],
+ [0x00A8B4, 0x00A8F1],
+ [0x00A8F8, 0x00A8FA],
+ [0x00A8FF, 0x00A909],
+ [0x00A926, 0x00A92F],
+ [0x00A947, 0x00A95F],
+ [0x00A97D, 0x00A983],
+ [0x00A9B3, 0x00A9DF],
+ [0x00A9E5, 0x00A9E6],
+ [0x00A9F0, 0x00A9F9],
+ [0x00AA29, 0x00AA3F],
+ [0x00AA4C, 0x00AA5F],
+ [0x00AA77, 0x00AA79],
+ [0x00AA7B, 0x00AA7D],
+ [0x00AAB2, 0x00AAB4],
+ [0x00AAB7, 0x00AAB8],
+ [0x00AABE, 0x00AABF],
+ [0x00AAC3, 0x00AADA],
+ [0x00AADD, 0x00AADF],
+ [0x00AAEB, 0x00AAF1],
+ [0x00AAF3, 0x00AB00],
+ [0x00AB07, 0x00AB08],
+ [0x00AB0F, 0x00AB10],
+ [0x00AB17, 0x00AB1F],
+ [0x00AB2F, 0x00ABBF],
+ [0x00ABE3, 0x00ABFF],
+ [0x00D7A4, 0x00D7AF],
+ [0x00D7C7, 0x00D7CA],
+ [0x00D7FC, 0x00DBFF],
+ [0x00E000, 0x00F8FF],
+ [0x00FA6E, 0x00FA6F],
+ [0x00FADA, 0x00FB1C],
+ [0x00FBB2, 0x00FBD2],
+ [0x00FD3E, 0x00FD4F],
+ [0x00FD90, 0x00FD91],
+ [0x00FDC8, 0x00FDEF],
+ [0x00FDFC, 0x00FE6F],
+ [0x00FEFD, 0x00FF65],
+ [0x00FF9E, 0x00FF9F],
+ [0x00FFBF, 0x00FFC1],
+ [0x00FFC8, 0x00FFC9],
+ [0x00FFD0, 0x00FFD1],
+ [0x00FFD8, 0x00FFD9],
+ [0x00FFDD, 0x00FFFF],
+ [0x01004E, 0x01004F],
+ [0x01005E, 0x01007F],
+ [0x0100FB, 0x01027F],
+ [0x01029D, 0x01029F],
+ [0x0102D1, 0x0102FF],
+ [0x010320, 0x01032C],
+ [0x01034A, 0x01034F],
+ [0x010376, 0x01037F],
+ [0x01039E, 0x01039F],
+ [0x0103C4, 0x0103C7],
+ [0x0103D0, 0x01044F],
+ [0x01049E, 0x0104FF],
+ [0x010528, 0x01052F],
+ [0x010564, 0x0105FF],
+ [0x010737, 0x01073F],
+ [0x010756, 0x01075F],
+ [0x010768, 0x0107FF],
+ [0x010806, 0x010807],
+ [0x010839, 0x01083B],
+ [0x01083D, 0x01083E],
+ [0x010856, 0x01085F],
+ [0x010877, 0x01087F],
+ [0x01089F, 0x0108DF],
+ [0x0108F6, 0x0108FF],
+ [0x010916, 0x01091F],
+ [0x01093A, 0x01097F],
+ [0x0109B8, 0x0109BD],
+ [0x0109C0, 0x0109FF],
+ [0x010A01, 0x010A0F],
+ [0x010A36, 0x010A5F],
+ [0x010A7D, 0x010A7F],
+ [0x010A9D, 0x010ABF],
+ [0x010AE5, 0x010AFF],
+ [0x010B36, 0x010B3F],
+ [0x010B56, 0x010B5F],
+ [0x010B73, 0x010B7F],
+ [0x010B92, 0x010BFF],
+ [0x010C49, 0x010CFF],
+ [0x010D24, 0x010E7F],
+ [0x010EAA, 0x010EAF],
+ [0x010EB2, 0x010EFF],
+ [0x010F1D, 0x010F26],
+ [0x010F28, 0x010F2F],
+ [0x010F46, 0x010F6F],
+ [0x010F82, 0x010FAF],
+ [0x010FC5, 0x010FDF],
+ [0x010FF7, 0x011002],
+ [0x011038, 0x011070],
+ [0x011073, 0x011074],
+ [0x011076, 0x011082],
+ [0x0110B0, 0x0110CF],
+ [0x0110E9, 0x011102],
+ [0x011127, 0x011143],
+ [0x011145, 0x011146],
+ [0x011148, 0x01114F],
+ [0x011173, 0x011175],
+ [0x011177, 0x011182],
+ [0x0111B3, 0x0111C0],
+ [0x0111C5, 0x0111D9],
+ [0x0111DD, 0x0111FF],
+ [0x01122C, 0x01123E],
+ [0x011241, 0x01127F],
+ [0x0112A9, 0x0112AF],
+ [0x0112DF, 0x011304],
+ [0x01130D, 0x01130E],
+ [0x011311, 0x011312],
+ [0x01133A, 0x01133C],
+ [0x01133E, 0x01134F],
+ [0x011351, 0x01135C],
+ [0x011362, 0x0113FF],
+ [0x011435, 0x011446],
+ [0x01144B, 0x01145E],
+ [0x011462, 0x01147F],
+ [0x0114B0, 0x0114C3],
+ [0x0114C8, 0x01157F],
+ [0x0115AF, 0x0115D7],
+ [0x0115DC, 0x0115FF],
+ [0x011630, 0x011643],
+ [0x011645, 0x01167F],
+ [0x0116AB, 0x0116B7],
+ [0x0116B9, 0x0116FF],
+ [0x01171B, 0x01173F],
+ [0x011747, 0x0117FF],
+ [0x01182C, 0x0118FE],
+ [0x011907, 0x011908],
+ [0x01190A, 0x01190B],
+ [0x011930, 0x01193E],
+ [0x011942, 0x01199F],
+ [0x0119A8, 0x0119A9],
+ [0x0119D1, 0x0119E0],
+ [0x0119E4, 0x0119FF],
+ [0x011A01, 0x011A0A],
+ [0x011A33, 0x011A39],
+ [0x011A3B, 0x011A4F],
+ [0x011A51, 0x011A5B],
+ [0x011A8A, 0x011A9C],
+ [0x011A9E, 0x011AAF],
+ [0x011AF9, 0x011BFF],
+ [0x011C2F, 0x011C3F],
+ [0x011C41, 0x011C71],
+ [0x011C90, 0x011CFF],
+ [0x011D31, 0x011D45],
+ [0x011D47, 0x011D5F],
+ [0x011D8A, 0x011D97],
+ [0x011D99, 0x011EDF],
+ [0x011EF3, 0x011F01],
+ [0x011F34, 0x011FAF],
+ [0x011FB1, 0x011FFF],
+ [0x01239A, 0x01247F],
+ [0x012544, 0x012F8F],
+ [0x012FF1, 0x012FFF],
+ [0x013430, 0x013440],
+ [0x013447, 0x0143FF],
+ [0x014647, 0x0167FF],
+ [0x016A39, 0x016A3F],
+ [0x016A5F, 0x016A6F],
+ [0x016ABF, 0x016ACF],
+ [0x016AEE, 0x016AFF],
+ [0x016B30, 0x016B62],
+ [0x016B78, 0x016B7C],
+ [0x016B90, 0x016EFF],
+ [0x016F4B, 0x016F4F],
+ [0x016F51, 0x016FFF],
+ [0x0187F8, 0x0187FF],
+ [0x018CD6, 0x018CFF],
+ [0x018D09, 0x01AFFF],
+ [0x01B123, 0x01B131],
+ [0x01B133, 0x01B14F],
+ [0x01B153, 0x01B154],
+ [0x01B156, 0x01B163],
+ [0x01B168, 0x01B16F],
+ [0x01B2FC, 0x01BBFF],
+ [0x01BC6B, 0x01BC6F],
+ [0x01BC7D, 0x01BC7F],
+ [0x01BC89, 0x01BC8F],
+ [0x01BC9A, 0x01DF09],
+ [0x01DF0B, 0x01E0FF],
+ [0x01E12D, 0x01E14D],
+ [0x01E14F, 0x01E28F],
+ [0x01E2AE, 0x01E2BF],
+ [0x01E2EC, 0x01E4CF],
+ [0x01E4EB, 0x01E7DF],
+ [0x01E8C5, 0x01EDFF],
+ [0x01EE25, 0x01EE26],
+ [0x01EE3C, 0x01EE41],
+ [0x01EE43, 0x01EE46],
+ [0x01EE55, 0x01EE56],
+ [0x01EE65, 0x01EE66],
+ [0x01EE9C, 0x01EEA0],
+ [0x01EEBC, 0x01FFFF],
+ [0x02A6E0, 0x02A6FF],
+ [0x02B73A, 0x02B73F],
+ [0x02B81E, 0x02B81F],
+ [0x02CEA2, 0x02CEAF],
+ [0x02EBE1, 0x02F7FF],
+ [0x02FA1E, 0x02FFFF],
+ [0x03134B, 0x03134F],
+ [0x0323B0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Other_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Other_Letter}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Lo}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Lo}"
+);
+testPropertyEscapes(
+ /^\P{gc=Other_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Other_Letter}"
+);
+testPropertyEscapes(
+ /^\P{gc=Lo}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Lo}"
+);
+testPropertyEscapes(
+ /^\P{Other_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{Other_Letter}"
+);
+testPropertyEscapes(
+ /^\P{Lo}+$/u,
+ nonMatchSymbols,
+ "\\P{Lo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Number.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Number.js
new file mode 100644
index 0000000000..b83fc97949
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Number.js
@@ -0,0 +1,237 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Other_Number`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000B9,
+ 0x0019DA,
+ 0x002070,
+ 0x002189,
+ 0x002CFD
+ ],
+ ranges: [
+ [0x0000B2, 0x0000B3],
+ [0x0000BC, 0x0000BE],
+ [0x0009F4, 0x0009F9],
+ [0x000B72, 0x000B77],
+ [0x000BF0, 0x000BF2],
+ [0x000C78, 0x000C7E],
+ [0x000D58, 0x000D5E],
+ [0x000D70, 0x000D78],
+ [0x000F2A, 0x000F33],
+ [0x001369, 0x00137C],
+ [0x0017F0, 0x0017F9],
+ [0x002074, 0x002079],
+ [0x002080, 0x002089],
+ [0x002150, 0x00215F],
+ [0x002460, 0x00249B],
+ [0x0024EA, 0x0024FF],
+ [0x002776, 0x002793],
+ [0x003192, 0x003195],
+ [0x003220, 0x003229],
+ [0x003248, 0x00324F],
+ [0x003251, 0x00325F],
+ [0x003280, 0x003289],
+ [0x0032B1, 0x0032BF],
+ [0x00A830, 0x00A835],
+ [0x010107, 0x010133],
+ [0x010175, 0x010178],
+ [0x01018A, 0x01018B],
+ [0x0102E1, 0x0102FB],
+ [0x010320, 0x010323],
+ [0x010858, 0x01085F],
+ [0x010879, 0x01087F],
+ [0x0108A7, 0x0108AF],
+ [0x0108FB, 0x0108FF],
+ [0x010916, 0x01091B],
+ [0x0109BC, 0x0109BD],
+ [0x0109C0, 0x0109CF],
+ [0x0109D2, 0x0109FF],
+ [0x010A40, 0x010A48],
+ [0x010A7D, 0x010A7E],
+ [0x010A9D, 0x010A9F],
+ [0x010AEB, 0x010AEF],
+ [0x010B58, 0x010B5F],
+ [0x010B78, 0x010B7F],
+ [0x010BA9, 0x010BAF],
+ [0x010CFA, 0x010CFF],
+ [0x010E60, 0x010E7E],
+ [0x010F1D, 0x010F26],
+ [0x010F51, 0x010F54],
+ [0x010FC5, 0x010FCB],
+ [0x011052, 0x011065],
+ [0x0111E1, 0x0111F4],
+ [0x01173A, 0x01173B],
+ [0x0118EA, 0x0118F2],
+ [0x011C5A, 0x011C6C],
+ [0x011FC0, 0x011FD4],
+ [0x016B5B, 0x016B61],
+ [0x016E80, 0x016E96],
+ [0x01D2C0, 0x01D2D3],
+ [0x01D2E0, 0x01D2F3],
+ [0x01D360, 0x01D378],
+ [0x01E8C7, 0x01E8CF],
+ [0x01EC71, 0x01ECAB],
+ [0x01ECAD, 0x01ECAF],
+ [0x01ECB1, 0x01ECB4],
+ [0x01ED01, 0x01ED2D],
+ [0x01ED2F, 0x01ED3D],
+ [0x01F100, 0x01F10C]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Other_Number}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Other_Number}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=No}+$/u,
+ matchSymbols,
+ "\\p{General_Category=No}"
+);
+testPropertyEscapes(
+ /^\p{gc=Other_Number}+$/u,
+ matchSymbols,
+ "\\p{gc=Other_Number}"
+);
+testPropertyEscapes(
+ /^\p{gc=No}+$/u,
+ matchSymbols,
+ "\\p{gc=No}"
+);
+testPropertyEscapes(
+ /^\p{Other_Number}+$/u,
+ matchSymbols,
+ "\\p{Other_Number}"
+);
+testPropertyEscapes(
+ /^\p{No}+$/u,
+ matchSymbols,
+ "\\p{No}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x003250,
+ 0x01ECAC,
+ 0x01ECB0,
+ 0x01ED2E
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0000B1],
+ [0x0000B4, 0x0000B8],
+ [0x0000BA, 0x0000BB],
+ [0x0000BF, 0x0009F3],
+ [0x0009FA, 0x000B71],
+ [0x000B78, 0x000BEF],
+ [0x000BF3, 0x000C77],
+ [0x000C7F, 0x000D57],
+ [0x000D5F, 0x000D6F],
+ [0x000D79, 0x000F29],
+ [0x000F34, 0x001368],
+ [0x00137D, 0x0017EF],
+ [0x0017FA, 0x0019D9],
+ [0x0019DB, 0x00206F],
+ [0x002071, 0x002073],
+ [0x00207A, 0x00207F],
+ [0x00208A, 0x00214F],
+ [0x002160, 0x002188],
+ [0x00218A, 0x00245F],
+ [0x00249C, 0x0024E9],
+ [0x002500, 0x002775],
+ [0x002794, 0x002CFC],
+ [0x002CFE, 0x003191],
+ [0x003196, 0x00321F],
+ [0x00322A, 0x003247],
+ [0x003260, 0x00327F],
+ [0x00328A, 0x0032B0],
+ [0x0032C0, 0x00A82F],
+ [0x00A836, 0x00DBFF],
+ [0x00E000, 0x010106],
+ [0x010134, 0x010174],
+ [0x010179, 0x010189],
+ [0x01018C, 0x0102E0],
+ [0x0102FC, 0x01031F],
+ [0x010324, 0x010857],
+ [0x010860, 0x010878],
+ [0x010880, 0x0108A6],
+ [0x0108B0, 0x0108FA],
+ [0x010900, 0x010915],
+ [0x01091C, 0x0109BB],
+ [0x0109BE, 0x0109BF],
+ [0x0109D0, 0x0109D1],
+ [0x010A00, 0x010A3F],
+ [0x010A49, 0x010A7C],
+ [0x010A7F, 0x010A9C],
+ [0x010AA0, 0x010AEA],
+ [0x010AF0, 0x010B57],
+ [0x010B60, 0x010B77],
+ [0x010B80, 0x010BA8],
+ [0x010BB0, 0x010CF9],
+ [0x010D00, 0x010E5F],
+ [0x010E7F, 0x010F1C],
+ [0x010F27, 0x010F50],
+ [0x010F55, 0x010FC4],
+ [0x010FCC, 0x011051],
+ [0x011066, 0x0111E0],
+ [0x0111F5, 0x011739],
+ [0x01173C, 0x0118E9],
+ [0x0118F3, 0x011C59],
+ [0x011C6D, 0x011FBF],
+ [0x011FD5, 0x016B5A],
+ [0x016B62, 0x016E7F],
+ [0x016E97, 0x01D2BF],
+ [0x01D2D4, 0x01D2DF],
+ [0x01D2F4, 0x01D35F],
+ [0x01D379, 0x01E8C6],
+ [0x01E8D0, 0x01EC70],
+ [0x01ECB5, 0x01ED00],
+ [0x01ED3E, 0x01F0FF],
+ [0x01F10D, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Other_Number}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Other_Number}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=No}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=No}"
+);
+testPropertyEscapes(
+ /^\P{gc=Other_Number}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Other_Number}"
+);
+testPropertyEscapes(
+ /^\P{gc=No}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=No}"
+);
+testPropertyEscapes(
+ /^\P{Other_Number}+$/u,
+ nonMatchSymbols,
+ "\\P{Other_Number}"
+);
+testPropertyEscapes(
+ /^\P{No}+$/u,
+ nonMatchSymbols,
+ "\\P{No}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Punctuation.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Punctuation.js
new file mode 100644
index 0000000000..2a11adff1b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Punctuation.js
@@ -0,0 +1,467 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Other_Punctuation`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00002A,
+ 0x00002C,
+ 0x00005C,
+ 0x0000A1,
+ 0x0000A7,
+ 0x0000BF,
+ 0x00037E,
+ 0x000387,
+ 0x000589,
+ 0x0005C0,
+ 0x0005C3,
+ 0x0005C6,
+ 0x00061B,
+ 0x0006D4,
+ 0x00085E,
+ 0x000970,
+ 0x0009FD,
+ 0x000A76,
+ 0x000AF0,
+ 0x000C77,
+ 0x000C84,
+ 0x000DF4,
+ 0x000E4F,
+ 0x000F14,
+ 0x000F85,
+ 0x0010FB,
+ 0x00166E,
+ 0x001CD3,
+ 0x002053,
+ 0x002D70,
+ 0x002E0B,
+ 0x002E1B,
+ 0x002E41,
+ 0x00303D,
+ 0x0030FB,
+ 0x00A673,
+ 0x00A67E,
+ 0x00A8FC,
+ 0x00A95F,
+ 0x00ABEB,
+ 0x00FE19,
+ 0x00FE30,
+ 0x00FE68,
+ 0x00FF0A,
+ 0x00FF0C,
+ 0x00FF3C,
+ 0x00FF61,
+ 0x01039F,
+ 0x0103D0,
+ 0x01056F,
+ 0x010857,
+ 0x01091F,
+ 0x01093F,
+ 0x010A7F,
+ 0x0111CD,
+ 0x0111DB,
+ 0x0112A9,
+ 0x01145D,
+ 0x0114C6,
+ 0x0116B9,
+ 0x01183B,
+ 0x0119E2,
+ 0x011FFF,
+ 0x016AF5,
+ 0x016B44,
+ 0x016FE2,
+ 0x01BC9F
+ ],
+ ranges: [
+ [0x000021, 0x000023],
+ [0x000025, 0x000027],
+ [0x00002E, 0x00002F],
+ [0x00003A, 0x00003B],
+ [0x00003F, 0x000040],
+ [0x0000B6, 0x0000B7],
+ [0x00055A, 0x00055F],
+ [0x0005F3, 0x0005F4],
+ [0x000609, 0x00060A],
+ [0x00060C, 0x00060D],
+ [0x00061D, 0x00061F],
+ [0x00066A, 0x00066D],
+ [0x000700, 0x00070D],
+ [0x0007F7, 0x0007F9],
+ [0x000830, 0x00083E],
+ [0x000964, 0x000965],
+ [0x000E5A, 0x000E5B],
+ [0x000F04, 0x000F12],
+ [0x000FD0, 0x000FD4],
+ [0x000FD9, 0x000FDA],
+ [0x00104A, 0x00104F],
+ [0x001360, 0x001368],
+ [0x0016EB, 0x0016ED],
+ [0x001735, 0x001736],
+ [0x0017D4, 0x0017D6],
+ [0x0017D8, 0x0017DA],
+ [0x001800, 0x001805],
+ [0x001807, 0x00180A],
+ [0x001944, 0x001945],
+ [0x001A1E, 0x001A1F],
+ [0x001AA0, 0x001AA6],
+ [0x001AA8, 0x001AAD],
+ [0x001B5A, 0x001B60],
+ [0x001B7D, 0x001B7E],
+ [0x001BFC, 0x001BFF],
+ [0x001C3B, 0x001C3F],
+ [0x001C7E, 0x001C7F],
+ [0x001CC0, 0x001CC7],
+ [0x002016, 0x002017],
+ [0x002020, 0x002027],
+ [0x002030, 0x002038],
+ [0x00203B, 0x00203E],
+ [0x002041, 0x002043],
+ [0x002047, 0x002051],
+ [0x002055, 0x00205E],
+ [0x002CF9, 0x002CFC],
+ [0x002CFE, 0x002CFF],
+ [0x002E00, 0x002E01],
+ [0x002E06, 0x002E08],
+ [0x002E0E, 0x002E16],
+ [0x002E18, 0x002E19],
+ [0x002E1E, 0x002E1F],
+ [0x002E2A, 0x002E2E],
+ [0x002E30, 0x002E39],
+ [0x002E3C, 0x002E3F],
+ [0x002E43, 0x002E4F],
+ [0x002E52, 0x002E54],
+ [0x003001, 0x003003],
+ [0x00A4FE, 0x00A4FF],
+ [0x00A60D, 0x00A60F],
+ [0x00A6F2, 0x00A6F7],
+ [0x00A874, 0x00A877],
+ [0x00A8CE, 0x00A8CF],
+ [0x00A8F8, 0x00A8FA],
+ [0x00A92E, 0x00A92F],
+ [0x00A9C1, 0x00A9CD],
+ [0x00A9DE, 0x00A9DF],
+ [0x00AA5C, 0x00AA5F],
+ [0x00AADE, 0x00AADF],
+ [0x00AAF0, 0x00AAF1],
+ [0x00FE10, 0x00FE16],
+ [0x00FE45, 0x00FE46],
+ [0x00FE49, 0x00FE4C],
+ [0x00FE50, 0x00FE52],
+ [0x00FE54, 0x00FE57],
+ [0x00FE5F, 0x00FE61],
+ [0x00FE6A, 0x00FE6B],
+ [0x00FF01, 0x00FF03],
+ [0x00FF05, 0x00FF07],
+ [0x00FF0E, 0x00FF0F],
+ [0x00FF1A, 0x00FF1B],
+ [0x00FF1F, 0x00FF20],
+ [0x00FF64, 0x00FF65],
+ [0x010100, 0x010102],
+ [0x010A50, 0x010A58],
+ [0x010AF0, 0x010AF6],
+ [0x010B39, 0x010B3F],
+ [0x010B99, 0x010B9C],
+ [0x010F55, 0x010F59],
+ [0x010F86, 0x010F89],
+ [0x011047, 0x01104D],
+ [0x0110BB, 0x0110BC],
+ [0x0110BE, 0x0110C1],
+ [0x011140, 0x011143],
+ [0x011174, 0x011175],
+ [0x0111C5, 0x0111C8],
+ [0x0111DD, 0x0111DF],
+ [0x011238, 0x01123D],
+ [0x01144B, 0x01144F],
+ [0x01145A, 0x01145B],
+ [0x0115C1, 0x0115D7],
+ [0x011641, 0x011643],
+ [0x011660, 0x01166C],
+ [0x01173C, 0x01173E],
+ [0x011944, 0x011946],
+ [0x011A3F, 0x011A46],
+ [0x011A9A, 0x011A9C],
+ [0x011A9E, 0x011AA2],
+ [0x011B00, 0x011B09],
+ [0x011C41, 0x011C45],
+ [0x011C70, 0x011C71],
+ [0x011EF7, 0x011EF8],
+ [0x011F43, 0x011F4F],
+ [0x012470, 0x012474],
+ [0x012FF1, 0x012FF2],
+ [0x016A6E, 0x016A6F],
+ [0x016B37, 0x016B3B],
+ [0x016E97, 0x016E9A],
+ [0x01DA87, 0x01DA8B],
+ [0x01E95E, 0x01E95F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Other_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Other_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Po}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Po}"
+);
+testPropertyEscapes(
+ /^\p{gc=Other_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{gc=Other_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{gc=Po}+$/u,
+ matchSymbols,
+ "\\p{gc=Po}"
+);
+testPropertyEscapes(
+ /^\p{Other_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{Other_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{Po}+$/u,
+ matchSymbols,
+ "\\p{Po}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000024,
+ 0x00002B,
+ 0x00002D,
+ 0x00060B,
+ 0x00061C,
+ 0x000F13,
+ 0x0017D7,
+ 0x001806,
+ 0x001AA7,
+ 0x002052,
+ 0x002054,
+ 0x002CFD,
+ 0x002E17,
+ 0x002E1A,
+ 0x002E2F,
+ 0x002E40,
+ 0x002E42,
+ 0x00A8FB,
+ 0x00FE53,
+ 0x00FE69,
+ 0x00FF04,
+ 0x00FF0B,
+ 0x00FF0D,
+ 0x0110BD,
+ 0x0111DC,
+ 0x01145C,
+ 0x011A9D
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000020],
+ [0x000028, 0x000029],
+ [0x000030, 0x000039],
+ [0x00003C, 0x00003E],
+ [0x000041, 0x00005B],
+ [0x00005D, 0x0000A0],
+ [0x0000A2, 0x0000A6],
+ [0x0000A8, 0x0000B5],
+ [0x0000B8, 0x0000BE],
+ [0x0000C0, 0x00037D],
+ [0x00037F, 0x000386],
+ [0x000388, 0x000559],
+ [0x000560, 0x000588],
+ [0x00058A, 0x0005BF],
+ [0x0005C1, 0x0005C2],
+ [0x0005C4, 0x0005C5],
+ [0x0005C7, 0x0005F2],
+ [0x0005F5, 0x000608],
+ [0x00060E, 0x00061A],
+ [0x000620, 0x000669],
+ [0x00066E, 0x0006D3],
+ [0x0006D5, 0x0006FF],
+ [0x00070E, 0x0007F6],
+ [0x0007FA, 0x00082F],
+ [0x00083F, 0x00085D],
+ [0x00085F, 0x000963],
+ [0x000966, 0x00096F],
+ [0x000971, 0x0009FC],
+ [0x0009FE, 0x000A75],
+ [0x000A77, 0x000AEF],
+ [0x000AF1, 0x000C76],
+ [0x000C78, 0x000C83],
+ [0x000C85, 0x000DF3],
+ [0x000DF5, 0x000E4E],
+ [0x000E50, 0x000E59],
+ [0x000E5C, 0x000F03],
+ [0x000F15, 0x000F84],
+ [0x000F86, 0x000FCF],
+ [0x000FD5, 0x000FD8],
+ [0x000FDB, 0x001049],
+ [0x001050, 0x0010FA],
+ [0x0010FC, 0x00135F],
+ [0x001369, 0x00166D],
+ [0x00166F, 0x0016EA],
+ [0x0016EE, 0x001734],
+ [0x001737, 0x0017D3],
+ [0x0017DB, 0x0017FF],
+ [0x00180B, 0x001943],
+ [0x001946, 0x001A1D],
+ [0x001A20, 0x001A9F],
+ [0x001AAE, 0x001B59],
+ [0x001B61, 0x001B7C],
+ [0x001B7F, 0x001BFB],
+ [0x001C00, 0x001C3A],
+ [0x001C40, 0x001C7D],
+ [0x001C80, 0x001CBF],
+ [0x001CC8, 0x001CD2],
+ [0x001CD4, 0x002015],
+ [0x002018, 0x00201F],
+ [0x002028, 0x00202F],
+ [0x002039, 0x00203A],
+ [0x00203F, 0x002040],
+ [0x002044, 0x002046],
+ [0x00205F, 0x002CF8],
+ [0x002D00, 0x002D6F],
+ [0x002D71, 0x002DFF],
+ [0x002E02, 0x002E05],
+ [0x002E09, 0x002E0A],
+ [0x002E0C, 0x002E0D],
+ [0x002E1C, 0x002E1D],
+ [0x002E20, 0x002E29],
+ [0x002E3A, 0x002E3B],
+ [0x002E50, 0x002E51],
+ [0x002E55, 0x003000],
+ [0x003004, 0x00303C],
+ [0x00303E, 0x0030FA],
+ [0x0030FC, 0x00A4FD],
+ [0x00A500, 0x00A60C],
+ [0x00A610, 0x00A672],
+ [0x00A674, 0x00A67D],
+ [0x00A67F, 0x00A6F1],
+ [0x00A6F8, 0x00A873],
+ [0x00A878, 0x00A8CD],
+ [0x00A8D0, 0x00A8F7],
+ [0x00A8FD, 0x00A92D],
+ [0x00A930, 0x00A95E],
+ [0x00A960, 0x00A9C0],
+ [0x00A9CE, 0x00A9DD],
+ [0x00A9E0, 0x00AA5B],
+ [0x00AA60, 0x00AADD],
+ [0x00AAE0, 0x00AAEF],
+ [0x00AAF2, 0x00ABEA],
+ [0x00ABEC, 0x00DBFF],
+ [0x00E000, 0x00FE0F],
+ [0x00FE17, 0x00FE18],
+ [0x00FE1A, 0x00FE2F],
+ [0x00FE31, 0x00FE44],
+ [0x00FE47, 0x00FE48],
+ [0x00FE4D, 0x00FE4F],
+ [0x00FE58, 0x00FE5E],
+ [0x00FE62, 0x00FE67],
+ [0x00FE6C, 0x00FF00],
+ [0x00FF08, 0x00FF09],
+ [0x00FF10, 0x00FF19],
+ [0x00FF1C, 0x00FF1E],
+ [0x00FF21, 0x00FF3B],
+ [0x00FF3D, 0x00FF60],
+ [0x00FF62, 0x00FF63],
+ [0x00FF66, 0x0100FF],
+ [0x010103, 0x01039E],
+ [0x0103A0, 0x0103CF],
+ [0x0103D1, 0x01056E],
+ [0x010570, 0x010856],
+ [0x010858, 0x01091E],
+ [0x010920, 0x01093E],
+ [0x010940, 0x010A4F],
+ [0x010A59, 0x010A7E],
+ [0x010A80, 0x010AEF],
+ [0x010AF7, 0x010B38],
+ [0x010B40, 0x010B98],
+ [0x010B9D, 0x010F54],
+ [0x010F5A, 0x010F85],
+ [0x010F8A, 0x011046],
+ [0x01104E, 0x0110BA],
+ [0x0110C2, 0x01113F],
+ [0x011144, 0x011173],
+ [0x011176, 0x0111C4],
+ [0x0111C9, 0x0111CC],
+ [0x0111CE, 0x0111DA],
+ [0x0111E0, 0x011237],
+ [0x01123E, 0x0112A8],
+ [0x0112AA, 0x01144A],
+ [0x011450, 0x011459],
+ [0x01145E, 0x0114C5],
+ [0x0114C7, 0x0115C0],
+ [0x0115D8, 0x011640],
+ [0x011644, 0x01165F],
+ [0x01166D, 0x0116B8],
+ [0x0116BA, 0x01173B],
+ [0x01173F, 0x01183A],
+ [0x01183C, 0x011943],
+ [0x011947, 0x0119E1],
+ [0x0119E3, 0x011A3E],
+ [0x011A47, 0x011A99],
+ [0x011AA3, 0x011AFF],
+ [0x011B0A, 0x011C40],
+ [0x011C46, 0x011C6F],
+ [0x011C72, 0x011EF6],
+ [0x011EF9, 0x011F42],
+ [0x011F50, 0x011FFE],
+ [0x012000, 0x01246F],
+ [0x012475, 0x012FF0],
+ [0x012FF3, 0x016A6D],
+ [0x016A70, 0x016AF4],
+ [0x016AF6, 0x016B36],
+ [0x016B3C, 0x016B43],
+ [0x016B45, 0x016E96],
+ [0x016E9B, 0x016FE1],
+ [0x016FE3, 0x01BC9E],
+ [0x01BCA0, 0x01DA86],
+ [0x01DA8C, 0x01E95D],
+ [0x01E960, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Other_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Other_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Po}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Po}"
+);
+testPropertyEscapes(
+ /^\P{gc=Other_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Other_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{gc=Po}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Po}"
+);
+testPropertyEscapes(
+ /^\P{Other_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{Other_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{Po}+$/u,
+ nonMatchSymbols,
+ "\\P{Po}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Symbol.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Symbol.js
new file mode 100644
index 0000000000..a6b9bf15a2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Symbol.js
@@ -0,0 +1,461 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Other_Symbol`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000A6,
+ 0x0000A9,
+ 0x0000AE,
+ 0x0000B0,
+ 0x000482,
+ 0x0006DE,
+ 0x0006E9,
+ 0x0007F6,
+ 0x0009FA,
+ 0x000B70,
+ 0x000BFA,
+ 0x000C7F,
+ 0x000D4F,
+ 0x000D79,
+ 0x000F13,
+ 0x000F34,
+ 0x000F36,
+ 0x000F38,
+ 0x00166D,
+ 0x001940,
+ 0x002114,
+ 0x002125,
+ 0x002127,
+ 0x002129,
+ 0x00212E,
+ 0x00214A,
+ 0x00214F,
+ 0x0021D3,
+ 0x003004,
+ 0x003020,
+ 0x003250,
+ 0x00A839,
+ 0x00FDCF,
+ 0x00FFE4,
+ 0x00FFE8,
+ 0x0101A0,
+ 0x010AC8,
+ 0x01173F,
+ 0x016B45,
+ 0x01BC9C,
+ 0x01D245,
+ 0x01E14F,
+ 0x01ECAC,
+ 0x01ED2E,
+ 0x01F7F0
+ ],
+ ranges: [
+ [0x00058D, 0x00058E],
+ [0x00060E, 0x00060F],
+ [0x0006FD, 0x0006FE],
+ [0x000BF3, 0x000BF8],
+ [0x000F01, 0x000F03],
+ [0x000F15, 0x000F17],
+ [0x000F1A, 0x000F1F],
+ [0x000FBE, 0x000FC5],
+ [0x000FC7, 0x000FCC],
+ [0x000FCE, 0x000FCF],
+ [0x000FD5, 0x000FD8],
+ [0x00109E, 0x00109F],
+ [0x001390, 0x001399],
+ [0x0019DE, 0x0019FF],
+ [0x001B61, 0x001B6A],
+ [0x001B74, 0x001B7C],
+ [0x002100, 0x002101],
+ [0x002103, 0x002106],
+ [0x002108, 0x002109],
+ [0x002116, 0x002117],
+ [0x00211E, 0x002123],
+ [0x00213A, 0x00213B],
+ [0x00214C, 0x00214D],
+ [0x00218A, 0x00218B],
+ [0x002195, 0x002199],
+ [0x00219C, 0x00219F],
+ [0x0021A1, 0x0021A2],
+ [0x0021A4, 0x0021A5],
+ [0x0021A7, 0x0021AD],
+ [0x0021AF, 0x0021CD],
+ [0x0021D0, 0x0021D1],
+ [0x0021D5, 0x0021F3],
+ [0x002300, 0x002307],
+ [0x00230C, 0x00231F],
+ [0x002322, 0x002328],
+ [0x00232B, 0x00237B],
+ [0x00237D, 0x00239A],
+ [0x0023B4, 0x0023DB],
+ [0x0023E2, 0x002426],
+ [0x002440, 0x00244A],
+ [0x00249C, 0x0024E9],
+ [0x002500, 0x0025B6],
+ [0x0025B8, 0x0025C0],
+ [0x0025C2, 0x0025F7],
+ [0x002600, 0x00266E],
+ [0x002670, 0x002767],
+ [0x002794, 0x0027BF],
+ [0x002800, 0x0028FF],
+ [0x002B00, 0x002B2F],
+ [0x002B45, 0x002B46],
+ [0x002B4D, 0x002B73],
+ [0x002B76, 0x002B95],
+ [0x002B97, 0x002BFF],
+ [0x002CE5, 0x002CEA],
+ [0x002E50, 0x002E51],
+ [0x002E80, 0x002E99],
+ [0x002E9B, 0x002EF3],
+ [0x002F00, 0x002FD5],
+ [0x002FF0, 0x002FFB],
+ [0x003012, 0x003013],
+ [0x003036, 0x003037],
+ [0x00303E, 0x00303F],
+ [0x003190, 0x003191],
+ [0x003196, 0x00319F],
+ [0x0031C0, 0x0031E3],
+ [0x003200, 0x00321E],
+ [0x00322A, 0x003247],
+ [0x003260, 0x00327F],
+ [0x00328A, 0x0032B0],
+ [0x0032C0, 0x0033FF],
+ [0x004DC0, 0x004DFF],
+ [0x00A490, 0x00A4C6],
+ [0x00A828, 0x00A82B],
+ [0x00A836, 0x00A837],
+ [0x00AA77, 0x00AA79],
+ [0x00FD40, 0x00FD4F],
+ [0x00FDFD, 0x00FDFF],
+ [0x00FFED, 0x00FFEE],
+ [0x00FFFC, 0x00FFFD],
+ [0x010137, 0x01013F],
+ [0x010179, 0x010189],
+ [0x01018C, 0x01018E],
+ [0x010190, 0x01019C],
+ [0x0101D0, 0x0101FC],
+ [0x010877, 0x010878],
+ [0x011FD5, 0x011FDC],
+ [0x011FE1, 0x011FF1],
+ [0x016B3C, 0x016B3F],
+ [0x01CF50, 0x01CFC3],
+ [0x01D000, 0x01D0F5],
+ [0x01D100, 0x01D126],
+ [0x01D129, 0x01D164],
+ [0x01D16A, 0x01D16C],
+ [0x01D183, 0x01D184],
+ [0x01D18C, 0x01D1A9],
+ [0x01D1AE, 0x01D1EA],
+ [0x01D200, 0x01D241],
+ [0x01D300, 0x01D356],
+ [0x01D800, 0x01D9FF],
+ [0x01DA37, 0x01DA3A],
+ [0x01DA6D, 0x01DA74],
+ [0x01DA76, 0x01DA83],
+ [0x01DA85, 0x01DA86],
+ [0x01F000, 0x01F02B],
+ [0x01F030, 0x01F093],
+ [0x01F0A0, 0x01F0AE],
+ [0x01F0B1, 0x01F0BF],
+ [0x01F0C1, 0x01F0CF],
+ [0x01F0D1, 0x01F0F5],
+ [0x01F10D, 0x01F1AD],
+ [0x01F1E6, 0x01F202],
+ [0x01F210, 0x01F23B],
+ [0x01F240, 0x01F248],
+ [0x01F250, 0x01F251],
+ [0x01F260, 0x01F265],
+ [0x01F300, 0x01F3FA],
+ [0x01F400, 0x01F6D7],
+ [0x01F6DC, 0x01F6EC],
+ [0x01F6F0, 0x01F6FC],
+ [0x01F700, 0x01F776],
+ [0x01F77B, 0x01F7D9],
+ [0x01F7E0, 0x01F7EB],
+ [0x01F800, 0x01F80B],
+ [0x01F810, 0x01F847],
+ [0x01F850, 0x01F859],
+ [0x01F860, 0x01F887],
+ [0x01F890, 0x01F8AD],
+ [0x01F8B0, 0x01F8B1],
+ [0x01F900, 0x01FA53],
+ [0x01FA60, 0x01FA6D],
+ [0x01FA70, 0x01FA7C],
+ [0x01FA80, 0x01FA88],
+ [0x01FA90, 0x01FABD],
+ [0x01FABF, 0x01FAC5],
+ [0x01FACE, 0x01FADB],
+ [0x01FAE0, 0x01FAE8],
+ [0x01FAF0, 0x01FAF8],
+ [0x01FB00, 0x01FB92],
+ [0x01FB94, 0x01FBCA]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Other_Symbol}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Other_Symbol}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=So}+$/u,
+ matchSymbols,
+ "\\p{General_Category=So}"
+);
+testPropertyEscapes(
+ /^\p{gc=Other_Symbol}+$/u,
+ matchSymbols,
+ "\\p{gc=Other_Symbol}"
+);
+testPropertyEscapes(
+ /^\p{gc=So}+$/u,
+ matchSymbols,
+ "\\p{gc=So}"
+);
+testPropertyEscapes(
+ /^\p{Other_Symbol}+$/u,
+ matchSymbols,
+ "\\p{Other_Symbol}"
+);
+testPropertyEscapes(
+ /^\p{So}+$/u,
+ matchSymbols,
+ "\\p{So}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000AF,
+ 0x000BF9,
+ 0x000F14,
+ 0x000F35,
+ 0x000F37,
+ 0x000FC6,
+ 0x000FCD,
+ 0x002102,
+ 0x002107,
+ 0x002115,
+ 0x002124,
+ 0x002126,
+ 0x002128,
+ 0x00214B,
+ 0x00214E,
+ 0x0021A0,
+ 0x0021A3,
+ 0x0021A6,
+ 0x0021AE,
+ 0x0021D2,
+ 0x0021D4,
+ 0x00237C,
+ 0x0025B7,
+ 0x0025C1,
+ 0x00266F,
+ 0x002B96,
+ 0x002E9A,
+ 0x00A838,
+ 0x01018F,
+ 0x01DA75,
+ 0x01DA84,
+ 0x01F0C0,
+ 0x01F0D0,
+ 0x01FABE,
+ 0x01FB93
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0000A5],
+ [0x0000A7, 0x0000A8],
+ [0x0000AA, 0x0000AD],
+ [0x0000B1, 0x000481],
+ [0x000483, 0x00058C],
+ [0x00058F, 0x00060D],
+ [0x000610, 0x0006DD],
+ [0x0006DF, 0x0006E8],
+ [0x0006EA, 0x0006FC],
+ [0x0006FF, 0x0007F5],
+ [0x0007F7, 0x0009F9],
+ [0x0009FB, 0x000B6F],
+ [0x000B71, 0x000BF2],
+ [0x000BFB, 0x000C7E],
+ [0x000C80, 0x000D4E],
+ [0x000D50, 0x000D78],
+ [0x000D7A, 0x000F00],
+ [0x000F04, 0x000F12],
+ [0x000F18, 0x000F19],
+ [0x000F20, 0x000F33],
+ [0x000F39, 0x000FBD],
+ [0x000FD0, 0x000FD4],
+ [0x000FD9, 0x00109D],
+ [0x0010A0, 0x00138F],
+ [0x00139A, 0x00166C],
+ [0x00166E, 0x00193F],
+ [0x001941, 0x0019DD],
+ [0x001A00, 0x001B60],
+ [0x001B6B, 0x001B73],
+ [0x001B7D, 0x0020FF],
+ [0x00210A, 0x002113],
+ [0x002118, 0x00211D],
+ [0x00212A, 0x00212D],
+ [0x00212F, 0x002139],
+ [0x00213C, 0x002149],
+ [0x002150, 0x002189],
+ [0x00218C, 0x002194],
+ [0x00219A, 0x00219B],
+ [0x0021CE, 0x0021CF],
+ [0x0021F4, 0x0022FF],
+ [0x002308, 0x00230B],
+ [0x002320, 0x002321],
+ [0x002329, 0x00232A],
+ [0x00239B, 0x0023B3],
+ [0x0023DC, 0x0023E1],
+ [0x002427, 0x00243F],
+ [0x00244B, 0x00249B],
+ [0x0024EA, 0x0024FF],
+ [0x0025F8, 0x0025FF],
+ [0x002768, 0x002793],
+ [0x0027C0, 0x0027FF],
+ [0x002900, 0x002AFF],
+ [0x002B30, 0x002B44],
+ [0x002B47, 0x002B4C],
+ [0x002B74, 0x002B75],
+ [0x002C00, 0x002CE4],
+ [0x002CEB, 0x002E4F],
+ [0x002E52, 0x002E7F],
+ [0x002EF4, 0x002EFF],
+ [0x002FD6, 0x002FEF],
+ [0x002FFC, 0x003003],
+ [0x003005, 0x003011],
+ [0x003014, 0x00301F],
+ [0x003021, 0x003035],
+ [0x003038, 0x00303D],
+ [0x003040, 0x00318F],
+ [0x003192, 0x003195],
+ [0x0031A0, 0x0031BF],
+ [0x0031E4, 0x0031FF],
+ [0x00321F, 0x003229],
+ [0x003248, 0x00324F],
+ [0x003251, 0x00325F],
+ [0x003280, 0x003289],
+ [0x0032B1, 0x0032BF],
+ [0x003400, 0x004DBF],
+ [0x004E00, 0x00A48F],
+ [0x00A4C7, 0x00A827],
+ [0x00A82C, 0x00A835],
+ [0x00A83A, 0x00AA76],
+ [0x00AA7A, 0x00DBFF],
+ [0x00E000, 0x00FD3F],
+ [0x00FD50, 0x00FDCE],
+ [0x00FDD0, 0x00FDFC],
+ [0x00FE00, 0x00FFE3],
+ [0x00FFE5, 0x00FFE7],
+ [0x00FFE9, 0x00FFEC],
+ [0x00FFEF, 0x00FFFB],
+ [0x00FFFE, 0x010136],
+ [0x010140, 0x010178],
+ [0x01018A, 0x01018B],
+ [0x01019D, 0x01019F],
+ [0x0101A1, 0x0101CF],
+ [0x0101FD, 0x010876],
+ [0x010879, 0x010AC7],
+ [0x010AC9, 0x01173E],
+ [0x011740, 0x011FD4],
+ [0x011FDD, 0x011FE0],
+ [0x011FF2, 0x016B3B],
+ [0x016B40, 0x016B44],
+ [0x016B46, 0x01BC9B],
+ [0x01BC9D, 0x01CF4F],
+ [0x01CFC4, 0x01CFFF],
+ [0x01D0F6, 0x01D0FF],
+ [0x01D127, 0x01D128],
+ [0x01D165, 0x01D169],
+ [0x01D16D, 0x01D182],
+ [0x01D185, 0x01D18B],
+ [0x01D1AA, 0x01D1AD],
+ [0x01D1EB, 0x01D1FF],
+ [0x01D242, 0x01D244],
+ [0x01D246, 0x01D2FF],
+ [0x01D357, 0x01D7FF],
+ [0x01DA00, 0x01DA36],
+ [0x01DA3B, 0x01DA6C],
+ [0x01DA87, 0x01E14E],
+ [0x01E150, 0x01ECAB],
+ [0x01ECAD, 0x01ED2D],
+ [0x01ED2F, 0x01EFFF],
+ [0x01F02C, 0x01F02F],
+ [0x01F094, 0x01F09F],
+ [0x01F0AF, 0x01F0B0],
+ [0x01F0F6, 0x01F10C],
+ [0x01F1AE, 0x01F1E5],
+ [0x01F203, 0x01F20F],
+ [0x01F23C, 0x01F23F],
+ [0x01F249, 0x01F24F],
+ [0x01F252, 0x01F25F],
+ [0x01F266, 0x01F2FF],
+ [0x01F3FB, 0x01F3FF],
+ [0x01F6D8, 0x01F6DB],
+ [0x01F6ED, 0x01F6EF],
+ [0x01F6FD, 0x01F6FF],
+ [0x01F777, 0x01F77A],
+ [0x01F7DA, 0x01F7DF],
+ [0x01F7EC, 0x01F7EF],
+ [0x01F7F1, 0x01F7FF],
+ [0x01F80C, 0x01F80F],
+ [0x01F848, 0x01F84F],
+ [0x01F85A, 0x01F85F],
+ [0x01F888, 0x01F88F],
+ [0x01F8AE, 0x01F8AF],
+ [0x01F8B2, 0x01F8FF],
+ [0x01FA54, 0x01FA5F],
+ [0x01FA6E, 0x01FA6F],
+ [0x01FA7D, 0x01FA7F],
+ [0x01FA89, 0x01FA8F],
+ [0x01FAC6, 0x01FACD],
+ [0x01FADC, 0x01FADF],
+ [0x01FAE9, 0x01FAEF],
+ [0x01FAF9, 0x01FAFF],
+ [0x01FBCB, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Other_Symbol}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Other_Symbol}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=So}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=So}"
+);
+testPropertyEscapes(
+ /^\P{gc=Other_Symbol}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Other_Symbol}"
+);
+testPropertyEscapes(
+ /^\P{gc=So}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=So}"
+);
+testPropertyEscapes(
+ /^\P{Other_Symbol}+$/u,
+ nonMatchSymbols,
+ "\\P{Other_Symbol}"
+);
+testPropertyEscapes(
+ /^\P{So}+$/u,
+ nonMatchSymbols,
+ "\\P{So}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Paragraph_Separator.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Paragraph_Separator.js
new file mode 100644
index 0000000000..0972be7d5e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Paragraph_Separator.js
@@ -0,0 +1,93 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Paragraph_Separator`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x002029
+ ],
+ ranges: []
+});
+testPropertyEscapes(
+ /^\p{General_Category=Paragraph_Separator}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Paragraph_Separator}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Zp}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Zp}"
+);
+testPropertyEscapes(
+ /^\p{gc=Paragraph_Separator}+$/u,
+ matchSymbols,
+ "\\p{gc=Paragraph_Separator}"
+);
+testPropertyEscapes(
+ /^\p{gc=Zp}+$/u,
+ matchSymbols,
+ "\\p{gc=Zp}"
+);
+testPropertyEscapes(
+ /^\p{Paragraph_Separator}+$/u,
+ matchSymbols,
+ "\\p{Paragraph_Separator}"
+);
+testPropertyEscapes(
+ /^\p{Zp}+$/u,
+ matchSymbols,
+ "\\p{Zp}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x002028],
+ [0x00202A, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Paragraph_Separator}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Paragraph_Separator}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Zp}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Zp}"
+);
+testPropertyEscapes(
+ /^\P{gc=Paragraph_Separator}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Paragraph_Separator}"
+);
+testPropertyEscapes(
+ /^\P{gc=Zp}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Zp}"
+);
+testPropertyEscapes(
+ /^\P{Paragraph_Separator}+$/u,
+ nonMatchSymbols,
+ "\\P{Paragraph_Separator}"
+);
+testPropertyEscapes(
+ /^\P{Zp}+$/u,
+ nonMatchSymbols,
+ "\\P{Zp}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Private_Use.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Private_Use.js
new file mode 100644
index 0000000000..4f798e94fe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Private_Use.js
@@ -0,0 +1,96 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Private_Use`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00E000, 0x00F8FF],
+ [0x0F0000, 0x0FFFFD],
+ [0x100000, 0x10FFFD]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Private_Use}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Private_Use}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Co}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Co}"
+);
+testPropertyEscapes(
+ /^\p{gc=Private_Use}+$/u,
+ matchSymbols,
+ "\\p{gc=Private_Use}"
+);
+testPropertyEscapes(
+ /^\p{gc=Co}+$/u,
+ matchSymbols,
+ "\\p{gc=Co}"
+);
+testPropertyEscapes(
+ /^\p{Private_Use}+$/u,
+ matchSymbols,
+ "\\p{Private_Use}"
+);
+testPropertyEscapes(
+ /^\p{Co}+$/u,
+ matchSymbols,
+ "\\p{Co}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00F900, 0x0EFFFF],
+ [0x0FFFFE, 0x0FFFFF],
+ [0x10FFFE, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Private_Use}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Private_Use}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Co}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Co}"
+);
+testPropertyEscapes(
+ /^\P{gc=Private_Use}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Private_Use}"
+);
+testPropertyEscapes(
+ /^\P{gc=Co}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Co}"
+);
+testPropertyEscapes(
+ /^\P{Private_Use}+$/u,
+ nonMatchSymbols,
+ "\\P{Private_Use}"
+);
+testPropertyEscapes(
+ /^\P{Co}+$/u,
+ nonMatchSymbols,
+ "\\P{Co}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Punctuation.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Punctuation.js
new file mode 100644
index 0000000000..96aee950d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Punctuation.js
@@ -0,0 +1,505 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Punctuation`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00005F,
+ 0x00007B,
+ 0x00007D,
+ 0x0000A1,
+ 0x0000A7,
+ 0x0000AB,
+ 0x0000BB,
+ 0x0000BF,
+ 0x00037E,
+ 0x000387,
+ 0x0005BE,
+ 0x0005C0,
+ 0x0005C3,
+ 0x0005C6,
+ 0x00061B,
+ 0x0006D4,
+ 0x00085E,
+ 0x000970,
+ 0x0009FD,
+ 0x000A76,
+ 0x000AF0,
+ 0x000C77,
+ 0x000C84,
+ 0x000DF4,
+ 0x000E4F,
+ 0x000F14,
+ 0x000F85,
+ 0x0010FB,
+ 0x001400,
+ 0x00166E,
+ 0x001CD3,
+ 0x002D70,
+ 0x003030,
+ 0x00303D,
+ 0x0030A0,
+ 0x0030FB,
+ 0x00A673,
+ 0x00A67E,
+ 0x00A8FC,
+ 0x00A95F,
+ 0x00ABEB,
+ 0x00FE63,
+ 0x00FE68,
+ 0x00FF3F,
+ 0x00FF5B,
+ 0x00FF5D,
+ 0x01039F,
+ 0x0103D0,
+ 0x01056F,
+ 0x010857,
+ 0x01091F,
+ 0x01093F,
+ 0x010A7F,
+ 0x010EAD,
+ 0x0111CD,
+ 0x0111DB,
+ 0x0112A9,
+ 0x01145D,
+ 0x0114C6,
+ 0x0116B9,
+ 0x01183B,
+ 0x0119E2,
+ 0x011FFF,
+ 0x016AF5,
+ 0x016B44,
+ 0x016FE2,
+ 0x01BC9F
+ ],
+ ranges: [
+ [0x000021, 0x000023],
+ [0x000025, 0x00002A],
+ [0x00002C, 0x00002F],
+ [0x00003A, 0x00003B],
+ [0x00003F, 0x000040],
+ [0x00005B, 0x00005D],
+ [0x0000B6, 0x0000B7],
+ [0x00055A, 0x00055F],
+ [0x000589, 0x00058A],
+ [0x0005F3, 0x0005F4],
+ [0x000609, 0x00060A],
+ [0x00060C, 0x00060D],
+ [0x00061D, 0x00061F],
+ [0x00066A, 0x00066D],
+ [0x000700, 0x00070D],
+ [0x0007F7, 0x0007F9],
+ [0x000830, 0x00083E],
+ [0x000964, 0x000965],
+ [0x000E5A, 0x000E5B],
+ [0x000F04, 0x000F12],
+ [0x000F3A, 0x000F3D],
+ [0x000FD0, 0x000FD4],
+ [0x000FD9, 0x000FDA],
+ [0x00104A, 0x00104F],
+ [0x001360, 0x001368],
+ [0x00169B, 0x00169C],
+ [0x0016EB, 0x0016ED],
+ [0x001735, 0x001736],
+ [0x0017D4, 0x0017D6],
+ [0x0017D8, 0x0017DA],
+ [0x001800, 0x00180A],
+ [0x001944, 0x001945],
+ [0x001A1E, 0x001A1F],
+ [0x001AA0, 0x001AA6],
+ [0x001AA8, 0x001AAD],
+ [0x001B5A, 0x001B60],
+ [0x001B7D, 0x001B7E],
+ [0x001BFC, 0x001BFF],
+ [0x001C3B, 0x001C3F],
+ [0x001C7E, 0x001C7F],
+ [0x001CC0, 0x001CC7],
+ [0x002010, 0x002027],
+ [0x002030, 0x002043],
+ [0x002045, 0x002051],
+ [0x002053, 0x00205E],
+ [0x00207D, 0x00207E],
+ [0x00208D, 0x00208E],
+ [0x002308, 0x00230B],
+ [0x002329, 0x00232A],
+ [0x002768, 0x002775],
+ [0x0027C5, 0x0027C6],
+ [0x0027E6, 0x0027EF],
+ [0x002983, 0x002998],
+ [0x0029D8, 0x0029DB],
+ [0x0029FC, 0x0029FD],
+ [0x002CF9, 0x002CFC],
+ [0x002CFE, 0x002CFF],
+ [0x002E00, 0x002E2E],
+ [0x002E30, 0x002E4F],
+ [0x002E52, 0x002E5D],
+ [0x003001, 0x003003],
+ [0x003008, 0x003011],
+ [0x003014, 0x00301F],
+ [0x00A4FE, 0x00A4FF],
+ [0x00A60D, 0x00A60F],
+ [0x00A6F2, 0x00A6F7],
+ [0x00A874, 0x00A877],
+ [0x00A8CE, 0x00A8CF],
+ [0x00A8F8, 0x00A8FA],
+ [0x00A92E, 0x00A92F],
+ [0x00A9C1, 0x00A9CD],
+ [0x00A9DE, 0x00A9DF],
+ [0x00AA5C, 0x00AA5F],
+ [0x00AADE, 0x00AADF],
+ [0x00AAF0, 0x00AAF1],
+ [0x00FD3E, 0x00FD3F],
+ [0x00FE10, 0x00FE19],
+ [0x00FE30, 0x00FE52],
+ [0x00FE54, 0x00FE61],
+ [0x00FE6A, 0x00FE6B],
+ [0x00FF01, 0x00FF03],
+ [0x00FF05, 0x00FF0A],
+ [0x00FF0C, 0x00FF0F],
+ [0x00FF1A, 0x00FF1B],
+ [0x00FF1F, 0x00FF20],
+ [0x00FF3B, 0x00FF3D],
+ [0x00FF5F, 0x00FF65],
+ [0x010100, 0x010102],
+ [0x010A50, 0x010A58],
+ [0x010AF0, 0x010AF6],
+ [0x010B39, 0x010B3F],
+ [0x010B99, 0x010B9C],
+ [0x010F55, 0x010F59],
+ [0x010F86, 0x010F89],
+ [0x011047, 0x01104D],
+ [0x0110BB, 0x0110BC],
+ [0x0110BE, 0x0110C1],
+ [0x011140, 0x011143],
+ [0x011174, 0x011175],
+ [0x0111C5, 0x0111C8],
+ [0x0111DD, 0x0111DF],
+ [0x011238, 0x01123D],
+ [0x01144B, 0x01144F],
+ [0x01145A, 0x01145B],
+ [0x0115C1, 0x0115D7],
+ [0x011641, 0x011643],
+ [0x011660, 0x01166C],
+ [0x01173C, 0x01173E],
+ [0x011944, 0x011946],
+ [0x011A3F, 0x011A46],
+ [0x011A9A, 0x011A9C],
+ [0x011A9E, 0x011AA2],
+ [0x011B00, 0x011B09],
+ [0x011C41, 0x011C45],
+ [0x011C70, 0x011C71],
+ [0x011EF7, 0x011EF8],
+ [0x011F43, 0x011F4F],
+ [0x012470, 0x012474],
+ [0x012FF1, 0x012FF2],
+ [0x016A6E, 0x016A6F],
+ [0x016B37, 0x016B3B],
+ [0x016E97, 0x016E9A],
+ [0x01DA87, 0x01DA8B],
+ [0x01E95E, 0x01E95F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Punctuation}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=P}+$/u,
+ matchSymbols,
+ "\\p{General_Category=P}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=punct}+$/u,
+ matchSymbols,
+ "\\p{General_Category=punct}"
+);
+testPropertyEscapes(
+ /^\p{gc=Punctuation}+$/u,
+ matchSymbols,
+ "\\p{gc=Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{gc=P}+$/u,
+ matchSymbols,
+ "\\p{gc=P}"
+);
+testPropertyEscapes(
+ /^\p{gc=punct}+$/u,
+ matchSymbols,
+ "\\p{gc=punct}"
+);
+testPropertyEscapes(
+ /^\p{Punctuation}+$/u,
+ matchSymbols,
+ "\\p{Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{P}+$/u,
+ matchSymbols,
+ "\\p{P}"
+);
+testPropertyEscapes(
+ /^\p{punct}+$/u,
+ matchSymbols,
+ "\\p{punct}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000024,
+ 0x00002B,
+ 0x00005E,
+ 0x00007C,
+ 0x0005BF,
+ 0x00060B,
+ 0x00061C,
+ 0x000F13,
+ 0x0017D7,
+ 0x001AA7,
+ 0x002044,
+ 0x002052,
+ 0x002CFD,
+ 0x002E2F,
+ 0x00A8FB,
+ 0x00FE53,
+ 0x00FE62,
+ 0x00FE69,
+ 0x00FF04,
+ 0x00FF0B,
+ 0x00FF3E,
+ 0x00FF5C,
+ 0x00FF5E,
+ 0x0110BD,
+ 0x0111DC,
+ 0x01145C,
+ 0x011A9D
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000020],
+ [0x000030, 0x000039],
+ [0x00003C, 0x00003E],
+ [0x000041, 0x00005A],
+ [0x000060, 0x00007A],
+ [0x00007E, 0x0000A0],
+ [0x0000A2, 0x0000A6],
+ [0x0000A8, 0x0000AA],
+ [0x0000AC, 0x0000B5],
+ [0x0000B8, 0x0000BA],
+ [0x0000BC, 0x0000BE],
+ [0x0000C0, 0x00037D],
+ [0x00037F, 0x000386],
+ [0x000388, 0x000559],
+ [0x000560, 0x000588],
+ [0x00058B, 0x0005BD],
+ [0x0005C1, 0x0005C2],
+ [0x0005C4, 0x0005C5],
+ [0x0005C7, 0x0005F2],
+ [0x0005F5, 0x000608],
+ [0x00060E, 0x00061A],
+ [0x000620, 0x000669],
+ [0x00066E, 0x0006D3],
+ [0x0006D5, 0x0006FF],
+ [0x00070E, 0x0007F6],
+ [0x0007FA, 0x00082F],
+ [0x00083F, 0x00085D],
+ [0x00085F, 0x000963],
+ [0x000966, 0x00096F],
+ [0x000971, 0x0009FC],
+ [0x0009FE, 0x000A75],
+ [0x000A77, 0x000AEF],
+ [0x000AF1, 0x000C76],
+ [0x000C78, 0x000C83],
+ [0x000C85, 0x000DF3],
+ [0x000DF5, 0x000E4E],
+ [0x000E50, 0x000E59],
+ [0x000E5C, 0x000F03],
+ [0x000F15, 0x000F39],
+ [0x000F3E, 0x000F84],
+ [0x000F86, 0x000FCF],
+ [0x000FD5, 0x000FD8],
+ [0x000FDB, 0x001049],
+ [0x001050, 0x0010FA],
+ [0x0010FC, 0x00135F],
+ [0x001369, 0x0013FF],
+ [0x001401, 0x00166D],
+ [0x00166F, 0x00169A],
+ [0x00169D, 0x0016EA],
+ [0x0016EE, 0x001734],
+ [0x001737, 0x0017D3],
+ [0x0017DB, 0x0017FF],
+ [0x00180B, 0x001943],
+ [0x001946, 0x001A1D],
+ [0x001A20, 0x001A9F],
+ [0x001AAE, 0x001B59],
+ [0x001B61, 0x001B7C],
+ [0x001B7F, 0x001BFB],
+ [0x001C00, 0x001C3A],
+ [0x001C40, 0x001C7D],
+ [0x001C80, 0x001CBF],
+ [0x001CC8, 0x001CD2],
+ [0x001CD4, 0x00200F],
+ [0x002028, 0x00202F],
+ [0x00205F, 0x00207C],
+ [0x00207F, 0x00208C],
+ [0x00208F, 0x002307],
+ [0x00230C, 0x002328],
+ [0x00232B, 0x002767],
+ [0x002776, 0x0027C4],
+ [0x0027C7, 0x0027E5],
+ [0x0027F0, 0x002982],
+ [0x002999, 0x0029D7],
+ [0x0029DC, 0x0029FB],
+ [0x0029FE, 0x002CF8],
+ [0x002D00, 0x002D6F],
+ [0x002D71, 0x002DFF],
+ [0x002E50, 0x002E51],
+ [0x002E5E, 0x003000],
+ [0x003004, 0x003007],
+ [0x003012, 0x003013],
+ [0x003020, 0x00302F],
+ [0x003031, 0x00303C],
+ [0x00303E, 0x00309F],
+ [0x0030A1, 0x0030FA],
+ [0x0030FC, 0x00A4FD],
+ [0x00A500, 0x00A60C],
+ [0x00A610, 0x00A672],
+ [0x00A674, 0x00A67D],
+ [0x00A67F, 0x00A6F1],
+ [0x00A6F8, 0x00A873],
+ [0x00A878, 0x00A8CD],
+ [0x00A8D0, 0x00A8F7],
+ [0x00A8FD, 0x00A92D],
+ [0x00A930, 0x00A95E],
+ [0x00A960, 0x00A9C0],
+ [0x00A9CE, 0x00A9DD],
+ [0x00A9E0, 0x00AA5B],
+ [0x00AA60, 0x00AADD],
+ [0x00AAE0, 0x00AAEF],
+ [0x00AAF2, 0x00ABEA],
+ [0x00ABEC, 0x00DBFF],
+ [0x00E000, 0x00FD3D],
+ [0x00FD40, 0x00FE0F],
+ [0x00FE1A, 0x00FE2F],
+ [0x00FE64, 0x00FE67],
+ [0x00FE6C, 0x00FF00],
+ [0x00FF10, 0x00FF19],
+ [0x00FF1C, 0x00FF1E],
+ [0x00FF21, 0x00FF3A],
+ [0x00FF40, 0x00FF5A],
+ [0x00FF66, 0x0100FF],
+ [0x010103, 0x01039E],
+ [0x0103A0, 0x0103CF],
+ [0x0103D1, 0x01056E],
+ [0x010570, 0x010856],
+ [0x010858, 0x01091E],
+ [0x010920, 0x01093E],
+ [0x010940, 0x010A4F],
+ [0x010A59, 0x010A7E],
+ [0x010A80, 0x010AEF],
+ [0x010AF7, 0x010B38],
+ [0x010B40, 0x010B98],
+ [0x010B9D, 0x010EAC],
+ [0x010EAE, 0x010F54],
+ [0x010F5A, 0x010F85],
+ [0x010F8A, 0x011046],
+ [0x01104E, 0x0110BA],
+ [0x0110C2, 0x01113F],
+ [0x011144, 0x011173],
+ [0x011176, 0x0111C4],
+ [0x0111C9, 0x0111CC],
+ [0x0111CE, 0x0111DA],
+ [0x0111E0, 0x011237],
+ [0x01123E, 0x0112A8],
+ [0x0112AA, 0x01144A],
+ [0x011450, 0x011459],
+ [0x01145E, 0x0114C5],
+ [0x0114C7, 0x0115C0],
+ [0x0115D8, 0x011640],
+ [0x011644, 0x01165F],
+ [0x01166D, 0x0116B8],
+ [0x0116BA, 0x01173B],
+ [0x01173F, 0x01183A],
+ [0x01183C, 0x011943],
+ [0x011947, 0x0119E1],
+ [0x0119E3, 0x011A3E],
+ [0x011A47, 0x011A99],
+ [0x011AA3, 0x011AFF],
+ [0x011B0A, 0x011C40],
+ [0x011C46, 0x011C6F],
+ [0x011C72, 0x011EF6],
+ [0x011EF9, 0x011F42],
+ [0x011F50, 0x011FFE],
+ [0x012000, 0x01246F],
+ [0x012475, 0x012FF0],
+ [0x012FF3, 0x016A6D],
+ [0x016A70, 0x016AF4],
+ [0x016AF6, 0x016B36],
+ [0x016B3C, 0x016B43],
+ [0x016B45, 0x016E96],
+ [0x016E9B, 0x016FE1],
+ [0x016FE3, 0x01BC9E],
+ [0x01BCA0, 0x01DA86],
+ [0x01DA8C, 0x01E95D],
+ [0x01E960, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=P}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=P}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=punct}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=punct}"
+);
+testPropertyEscapes(
+ /^\P{gc=Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{gc=P}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=P}"
+);
+testPropertyEscapes(
+ /^\P{gc=punct}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=punct}"
+);
+testPropertyEscapes(
+ /^\P{Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{P}+$/u,
+ nonMatchSymbols,
+ "\\P{P}"
+);
+testPropertyEscapes(
+ /^\P{punct}+$/u,
+ nonMatchSymbols,
+ "\\P{punct}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Separator.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Separator.js
new file mode 100644
index 0000000000..757520dba4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Separator.js
@@ -0,0 +1,108 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Separator`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000020,
+ 0x0000A0,
+ 0x001680,
+ 0x00202F,
+ 0x00205F,
+ 0x003000
+ ],
+ ranges: [
+ [0x002000, 0x00200A],
+ [0x002028, 0x002029]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Separator}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Separator}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Z}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Z}"
+);
+testPropertyEscapes(
+ /^\p{gc=Separator}+$/u,
+ matchSymbols,
+ "\\p{gc=Separator}"
+);
+testPropertyEscapes(
+ /^\p{gc=Z}+$/u,
+ matchSymbols,
+ "\\p{gc=Z}"
+);
+testPropertyEscapes(
+ /^\p{Separator}+$/u,
+ matchSymbols,
+ "\\p{Separator}"
+);
+testPropertyEscapes(
+ /^\p{Z}+$/u,
+ matchSymbols,
+ "\\p{Z}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00001F],
+ [0x000021, 0x00009F],
+ [0x0000A1, 0x00167F],
+ [0x001681, 0x001FFF],
+ [0x00200B, 0x002027],
+ [0x00202A, 0x00202E],
+ [0x002030, 0x00205E],
+ [0x002060, 0x002FFF],
+ [0x003001, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Separator}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Separator}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Z}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Z}"
+);
+testPropertyEscapes(
+ /^\P{gc=Separator}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Separator}"
+);
+testPropertyEscapes(
+ /^\P{gc=Z}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Z}"
+);
+testPropertyEscapes(
+ /^\P{Separator}+$/u,
+ nonMatchSymbols,
+ "\\P{Separator}"
+);
+testPropertyEscapes(
+ /^\P{Z}+$/u,
+ nonMatchSymbols,
+ "\\P{Z}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Space_Separator.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Space_Separator.js
new file mode 100644
index 0000000000..a9b15a6ced
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Space_Separator.js
@@ -0,0 +1,106 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Space_Separator`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000020,
+ 0x0000A0,
+ 0x001680,
+ 0x00202F,
+ 0x00205F,
+ 0x003000
+ ],
+ ranges: [
+ [0x002000, 0x00200A]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Space_Separator}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Space_Separator}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Zs}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Zs}"
+);
+testPropertyEscapes(
+ /^\p{gc=Space_Separator}+$/u,
+ matchSymbols,
+ "\\p{gc=Space_Separator}"
+);
+testPropertyEscapes(
+ /^\p{gc=Zs}+$/u,
+ matchSymbols,
+ "\\p{gc=Zs}"
+);
+testPropertyEscapes(
+ /^\p{Space_Separator}+$/u,
+ matchSymbols,
+ "\\p{Space_Separator}"
+);
+testPropertyEscapes(
+ /^\p{Zs}+$/u,
+ matchSymbols,
+ "\\p{Zs}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00001F],
+ [0x000021, 0x00009F],
+ [0x0000A1, 0x00167F],
+ [0x001681, 0x001FFF],
+ [0x00200B, 0x00202E],
+ [0x002030, 0x00205E],
+ [0x002060, 0x002FFF],
+ [0x003001, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Space_Separator}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Space_Separator}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Zs}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Zs}"
+);
+testPropertyEscapes(
+ /^\P{gc=Space_Separator}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Space_Separator}"
+);
+testPropertyEscapes(
+ /^\P{gc=Zs}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Zs}"
+);
+testPropertyEscapes(
+ /^\P{Space_Separator}+$/u,
+ nonMatchSymbols,
+ "\\P{Space_Separator}"
+);
+testPropertyEscapes(
+ /^\P{Zs}+$/u,
+ nonMatchSymbols,
+ "\\P{Zs}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Spacing_Mark.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Spacing_Mark.js
new file mode 100644
index 0000000000..bd8c74b973
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Spacing_Mark.js
@@ -0,0 +1,457 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Spacing_Mark`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000903,
+ 0x00093B,
+ 0x0009D7,
+ 0x000A03,
+ 0x000A83,
+ 0x000AC9,
+ 0x000B3E,
+ 0x000B40,
+ 0x000B57,
+ 0x000BD7,
+ 0x000CBE,
+ 0x000CF3,
+ 0x000D57,
+ 0x000F7F,
+ 0x001031,
+ 0x001038,
+ 0x00108F,
+ 0x001715,
+ 0x001734,
+ 0x0017B6,
+ 0x001A55,
+ 0x001A57,
+ 0x001A61,
+ 0x001B04,
+ 0x001B35,
+ 0x001B3B,
+ 0x001B82,
+ 0x001BA1,
+ 0x001BAA,
+ 0x001BE7,
+ 0x001BEE,
+ 0x001CE1,
+ 0x001CF7,
+ 0x00A827,
+ 0x00A983,
+ 0x00AA4D,
+ 0x00AA7B,
+ 0x00AA7D,
+ 0x00AAEB,
+ 0x00AAF5,
+ 0x00ABEC,
+ 0x011000,
+ 0x011002,
+ 0x011082,
+ 0x01112C,
+ 0x011182,
+ 0x0111CE,
+ 0x011235,
+ 0x011357,
+ 0x011445,
+ 0x0114B9,
+ 0x0114C1,
+ 0x0115BE,
+ 0x01163E,
+ 0x0116AC,
+ 0x0116B6,
+ 0x011726,
+ 0x011838,
+ 0x01193D,
+ 0x011940,
+ 0x011942,
+ 0x0119E4,
+ 0x011A39,
+ 0x011A97,
+ 0x011C2F,
+ 0x011C3E,
+ 0x011CA9,
+ 0x011CB1,
+ 0x011CB4,
+ 0x011D96,
+ 0x011F03,
+ 0x011F41
+ ],
+ ranges: [
+ [0x00093E, 0x000940],
+ [0x000949, 0x00094C],
+ [0x00094E, 0x00094F],
+ [0x000982, 0x000983],
+ [0x0009BE, 0x0009C0],
+ [0x0009C7, 0x0009C8],
+ [0x0009CB, 0x0009CC],
+ [0x000A3E, 0x000A40],
+ [0x000ABE, 0x000AC0],
+ [0x000ACB, 0x000ACC],
+ [0x000B02, 0x000B03],
+ [0x000B47, 0x000B48],
+ [0x000B4B, 0x000B4C],
+ [0x000BBE, 0x000BBF],
+ [0x000BC1, 0x000BC2],
+ [0x000BC6, 0x000BC8],
+ [0x000BCA, 0x000BCC],
+ [0x000C01, 0x000C03],
+ [0x000C41, 0x000C44],
+ [0x000C82, 0x000C83],
+ [0x000CC0, 0x000CC4],
+ [0x000CC7, 0x000CC8],
+ [0x000CCA, 0x000CCB],
+ [0x000CD5, 0x000CD6],
+ [0x000D02, 0x000D03],
+ [0x000D3E, 0x000D40],
+ [0x000D46, 0x000D48],
+ [0x000D4A, 0x000D4C],
+ [0x000D82, 0x000D83],
+ [0x000DCF, 0x000DD1],
+ [0x000DD8, 0x000DDF],
+ [0x000DF2, 0x000DF3],
+ [0x000F3E, 0x000F3F],
+ [0x00102B, 0x00102C],
+ [0x00103B, 0x00103C],
+ [0x001056, 0x001057],
+ [0x001062, 0x001064],
+ [0x001067, 0x00106D],
+ [0x001083, 0x001084],
+ [0x001087, 0x00108C],
+ [0x00109A, 0x00109C],
+ [0x0017BE, 0x0017C5],
+ [0x0017C7, 0x0017C8],
+ [0x001923, 0x001926],
+ [0x001929, 0x00192B],
+ [0x001930, 0x001931],
+ [0x001933, 0x001938],
+ [0x001A19, 0x001A1A],
+ [0x001A63, 0x001A64],
+ [0x001A6D, 0x001A72],
+ [0x001B3D, 0x001B41],
+ [0x001B43, 0x001B44],
+ [0x001BA6, 0x001BA7],
+ [0x001BEA, 0x001BEC],
+ [0x001BF2, 0x001BF3],
+ [0x001C24, 0x001C2B],
+ [0x001C34, 0x001C35],
+ [0x00302E, 0x00302F],
+ [0x00A823, 0x00A824],
+ [0x00A880, 0x00A881],
+ [0x00A8B4, 0x00A8C3],
+ [0x00A952, 0x00A953],
+ [0x00A9B4, 0x00A9B5],
+ [0x00A9BA, 0x00A9BB],
+ [0x00A9BE, 0x00A9C0],
+ [0x00AA2F, 0x00AA30],
+ [0x00AA33, 0x00AA34],
+ [0x00AAEE, 0x00AAEF],
+ [0x00ABE3, 0x00ABE4],
+ [0x00ABE6, 0x00ABE7],
+ [0x00ABE9, 0x00ABEA],
+ [0x0110B0, 0x0110B2],
+ [0x0110B7, 0x0110B8],
+ [0x011145, 0x011146],
+ [0x0111B3, 0x0111B5],
+ [0x0111BF, 0x0111C0],
+ [0x01122C, 0x01122E],
+ [0x011232, 0x011233],
+ [0x0112E0, 0x0112E2],
+ [0x011302, 0x011303],
+ [0x01133E, 0x01133F],
+ [0x011341, 0x011344],
+ [0x011347, 0x011348],
+ [0x01134B, 0x01134D],
+ [0x011362, 0x011363],
+ [0x011435, 0x011437],
+ [0x011440, 0x011441],
+ [0x0114B0, 0x0114B2],
+ [0x0114BB, 0x0114BE],
+ [0x0115AF, 0x0115B1],
+ [0x0115B8, 0x0115BB],
+ [0x011630, 0x011632],
+ [0x01163B, 0x01163C],
+ [0x0116AE, 0x0116AF],
+ [0x011720, 0x011721],
+ [0x01182C, 0x01182E],
+ [0x011930, 0x011935],
+ [0x011937, 0x011938],
+ [0x0119D1, 0x0119D3],
+ [0x0119DC, 0x0119DF],
+ [0x011A57, 0x011A58],
+ [0x011D8A, 0x011D8E],
+ [0x011D93, 0x011D94],
+ [0x011EF5, 0x011EF6],
+ [0x011F34, 0x011F35],
+ [0x011F3E, 0x011F3F],
+ [0x016F51, 0x016F87],
+ [0x016FF0, 0x016FF1],
+ [0x01D165, 0x01D166],
+ [0x01D16D, 0x01D172]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Spacing_Mark}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Spacing_Mark}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Mc}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Mc}"
+);
+testPropertyEscapes(
+ /^\p{gc=Spacing_Mark}+$/u,
+ matchSymbols,
+ "\\p{gc=Spacing_Mark}"
+);
+testPropertyEscapes(
+ /^\p{gc=Mc}+$/u,
+ matchSymbols,
+ "\\p{gc=Mc}"
+);
+testPropertyEscapes(
+ /^\p{Spacing_Mark}+$/u,
+ matchSymbols,
+ "\\p{Spacing_Mark}"
+);
+testPropertyEscapes(
+ /^\p{Mc}+$/u,
+ matchSymbols,
+ "\\p{Mc}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00094D,
+ 0x000ACA,
+ 0x000B3F,
+ 0x000BC0,
+ 0x000BC9,
+ 0x000CBF,
+ 0x000CC9,
+ 0x000D49,
+ 0x0017C6,
+ 0x001932,
+ 0x001A56,
+ 0x001A62,
+ 0x001B3C,
+ 0x001B42,
+ 0x001BED,
+ 0x00AA7C,
+ 0x00ABE5,
+ 0x00ABE8,
+ 0x00ABEB,
+ 0x011001,
+ 0x011234,
+ 0x011340,
+ 0x0114BA,
+ 0x01163D,
+ 0x0116AD,
+ 0x011936,
+ 0x011941,
+ 0x011D95,
+ 0x011F40
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000902],
+ [0x000904, 0x00093A],
+ [0x00093C, 0x00093D],
+ [0x000941, 0x000948],
+ [0x000950, 0x000981],
+ [0x000984, 0x0009BD],
+ [0x0009C1, 0x0009C6],
+ [0x0009C9, 0x0009CA],
+ [0x0009CD, 0x0009D6],
+ [0x0009D8, 0x000A02],
+ [0x000A04, 0x000A3D],
+ [0x000A41, 0x000A82],
+ [0x000A84, 0x000ABD],
+ [0x000AC1, 0x000AC8],
+ [0x000ACD, 0x000B01],
+ [0x000B04, 0x000B3D],
+ [0x000B41, 0x000B46],
+ [0x000B49, 0x000B4A],
+ [0x000B4D, 0x000B56],
+ [0x000B58, 0x000BBD],
+ [0x000BC3, 0x000BC5],
+ [0x000BCD, 0x000BD6],
+ [0x000BD8, 0x000C00],
+ [0x000C04, 0x000C40],
+ [0x000C45, 0x000C81],
+ [0x000C84, 0x000CBD],
+ [0x000CC5, 0x000CC6],
+ [0x000CCC, 0x000CD4],
+ [0x000CD7, 0x000CF2],
+ [0x000CF4, 0x000D01],
+ [0x000D04, 0x000D3D],
+ [0x000D41, 0x000D45],
+ [0x000D4D, 0x000D56],
+ [0x000D58, 0x000D81],
+ [0x000D84, 0x000DCE],
+ [0x000DD2, 0x000DD7],
+ [0x000DE0, 0x000DF1],
+ [0x000DF4, 0x000F3D],
+ [0x000F40, 0x000F7E],
+ [0x000F80, 0x00102A],
+ [0x00102D, 0x001030],
+ [0x001032, 0x001037],
+ [0x001039, 0x00103A],
+ [0x00103D, 0x001055],
+ [0x001058, 0x001061],
+ [0x001065, 0x001066],
+ [0x00106E, 0x001082],
+ [0x001085, 0x001086],
+ [0x00108D, 0x00108E],
+ [0x001090, 0x001099],
+ [0x00109D, 0x001714],
+ [0x001716, 0x001733],
+ [0x001735, 0x0017B5],
+ [0x0017B7, 0x0017BD],
+ [0x0017C9, 0x001922],
+ [0x001927, 0x001928],
+ [0x00192C, 0x00192F],
+ [0x001939, 0x001A18],
+ [0x001A1B, 0x001A54],
+ [0x001A58, 0x001A60],
+ [0x001A65, 0x001A6C],
+ [0x001A73, 0x001B03],
+ [0x001B05, 0x001B34],
+ [0x001B36, 0x001B3A],
+ [0x001B45, 0x001B81],
+ [0x001B83, 0x001BA0],
+ [0x001BA2, 0x001BA5],
+ [0x001BA8, 0x001BA9],
+ [0x001BAB, 0x001BE6],
+ [0x001BE8, 0x001BE9],
+ [0x001BEF, 0x001BF1],
+ [0x001BF4, 0x001C23],
+ [0x001C2C, 0x001C33],
+ [0x001C36, 0x001CE0],
+ [0x001CE2, 0x001CF6],
+ [0x001CF8, 0x00302D],
+ [0x003030, 0x00A822],
+ [0x00A825, 0x00A826],
+ [0x00A828, 0x00A87F],
+ [0x00A882, 0x00A8B3],
+ [0x00A8C4, 0x00A951],
+ [0x00A954, 0x00A982],
+ [0x00A984, 0x00A9B3],
+ [0x00A9B6, 0x00A9B9],
+ [0x00A9BC, 0x00A9BD],
+ [0x00A9C1, 0x00AA2E],
+ [0x00AA31, 0x00AA32],
+ [0x00AA35, 0x00AA4C],
+ [0x00AA4E, 0x00AA7A],
+ [0x00AA7E, 0x00AAEA],
+ [0x00AAEC, 0x00AAED],
+ [0x00AAF0, 0x00AAF4],
+ [0x00AAF6, 0x00ABE2],
+ [0x00ABED, 0x00DBFF],
+ [0x00E000, 0x010FFF],
+ [0x011003, 0x011081],
+ [0x011083, 0x0110AF],
+ [0x0110B3, 0x0110B6],
+ [0x0110B9, 0x01112B],
+ [0x01112D, 0x011144],
+ [0x011147, 0x011181],
+ [0x011183, 0x0111B2],
+ [0x0111B6, 0x0111BE],
+ [0x0111C1, 0x0111CD],
+ [0x0111CF, 0x01122B],
+ [0x01122F, 0x011231],
+ [0x011236, 0x0112DF],
+ [0x0112E3, 0x011301],
+ [0x011304, 0x01133D],
+ [0x011345, 0x011346],
+ [0x011349, 0x01134A],
+ [0x01134E, 0x011356],
+ [0x011358, 0x011361],
+ [0x011364, 0x011434],
+ [0x011438, 0x01143F],
+ [0x011442, 0x011444],
+ [0x011446, 0x0114AF],
+ [0x0114B3, 0x0114B8],
+ [0x0114BF, 0x0114C0],
+ [0x0114C2, 0x0115AE],
+ [0x0115B2, 0x0115B7],
+ [0x0115BC, 0x0115BD],
+ [0x0115BF, 0x01162F],
+ [0x011633, 0x01163A],
+ [0x01163F, 0x0116AB],
+ [0x0116B0, 0x0116B5],
+ [0x0116B7, 0x01171F],
+ [0x011722, 0x011725],
+ [0x011727, 0x01182B],
+ [0x01182F, 0x011837],
+ [0x011839, 0x01192F],
+ [0x011939, 0x01193C],
+ [0x01193E, 0x01193F],
+ [0x011943, 0x0119D0],
+ [0x0119D4, 0x0119DB],
+ [0x0119E0, 0x0119E3],
+ [0x0119E5, 0x011A38],
+ [0x011A3A, 0x011A56],
+ [0x011A59, 0x011A96],
+ [0x011A98, 0x011C2E],
+ [0x011C30, 0x011C3D],
+ [0x011C3F, 0x011CA8],
+ [0x011CAA, 0x011CB0],
+ [0x011CB2, 0x011CB3],
+ [0x011CB5, 0x011D89],
+ [0x011D8F, 0x011D92],
+ [0x011D97, 0x011EF4],
+ [0x011EF7, 0x011F02],
+ [0x011F04, 0x011F33],
+ [0x011F36, 0x011F3D],
+ [0x011F42, 0x016F50],
+ [0x016F88, 0x016FEF],
+ [0x016FF2, 0x01D164],
+ [0x01D167, 0x01D16C],
+ [0x01D173, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Spacing_Mark}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Spacing_Mark}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Mc}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Mc}"
+);
+testPropertyEscapes(
+ /^\P{gc=Spacing_Mark}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Spacing_Mark}"
+);
+testPropertyEscapes(
+ /^\P{gc=Mc}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Mc}"
+);
+testPropertyEscapes(
+ /^\P{Spacing_Mark}+$/u,
+ nonMatchSymbols,
+ "\\P{Spacing_Mark}"
+);
+testPropertyEscapes(
+ /^\P{Mc}+$/u,
+ nonMatchSymbols,
+ "\\P{Mc}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Surrogate.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Surrogate.js
new file mode 100644
index 0000000000..4228824da2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Surrogate.js
@@ -0,0 +1,92 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Surrogate`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x00D800, 0x00DBFF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Surrogate}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Surrogate}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Cs}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Cs}"
+);
+testPropertyEscapes(
+ /^\p{gc=Surrogate}+$/u,
+ matchSymbols,
+ "\\p{gc=Surrogate}"
+);
+testPropertyEscapes(
+ /^\p{gc=Cs}+$/u,
+ matchSymbols,
+ "\\p{gc=Cs}"
+);
+testPropertyEscapes(
+ /^\p{Surrogate}+$/u,
+ matchSymbols,
+ "\\p{Surrogate}"
+);
+testPropertyEscapes(
+ /^\p{Cs}+$/u,
+ matchSymbols,
+ "\\p{Cs}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000000, 0x00D7FF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Surrogate}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Surrogate}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Cs}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Cs}"
+);
+testPropertyEscapes(
+ /^\P{gc=Surrogate}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Surrogate}"
+);
+testPropertyEscapes(
+ /^\P{gc=Cs}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Cs}"
+);
+testPropertyEscapes(
+ /^\P{Surrogate}+$/u,
+ nonMatchSymbols,
+ "\\P{Surrogate}"
+);
+testPropertyEscapes(
+ /^\P{Cs}+$/u,
+ nonMatchSymbols,
+ "\\P{Cs}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Symbol.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Symbol.js
new file mode 100644
index 0000000000..a95fa50957
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Symbol.js
@@ -0,0 +1,557 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Symbol`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000024,
+ 0x00002B,
+ 0x00005E,
+ 0x000060,
+ 0x00007C,
+ 0x00007E,
+ 0x0000AC,
+ 0x0000B4,
+ 0x0000B8,
+ 0x0000D7,
+ 0x0000F7,
+ 0x0002ED,
+ 0x000375,
+ 0x0003F6,
+ 0x000482,
+ 0x00060B,
+ 0x0006DE,
+ 0x0006E9,
+ 0x0007F6,
+ 0x000888,
+ 0x000AF1,
+ 0x000B70,
+ 0x000C7F,
+ 0x000D4F,
+ 0x000D79,
+ 0x000E3F,
+ 0x000F13,
+ 0x000F34,
+ 0x000F36,
+ 0x000F38,
+ 0x00166D,
+ 0x0017DB,
+ 0x001940,
+ 0x001FBD,
+ 0x002044,
+ 0x002052,
+ 0x002114,
+ 0x002125,
+ 0x002127,
+ 0x002129,
+ 0x00212E,
+ 0x00214F,
+ 0x003004,
+ 0x003020,
+ 0x003250,
+ 0x00AB5B,
+ 0x00FB29,
+ 0x00FDCF,
+ 0x00FE62,
+ 0x00FE69,
+ 0x00FF04,
+ 0x00FF0B,
+ 0x00FF3E,
+ 0x00FF40,
+ 0x00FF5C,
+ 0x00FF5E,
+ 0x0101A0,
+ 0x010AC8,
+ 0x01173F,
+ 0x016B45,
+ 0x01BC9C,
+ 0x01D245,
+ 0x01D6C1,
+ 0x01D6DB,
+ 0x01D6FB,
+ 0x01D715,
+ 0x01D735,
+ 0x01D74F,
+ 0x01D76F,
+ 0x01D789,
+ 0x01D7A9,
+ 0x01D7C3,
+ 0x01E14F,
+ 0x01E2FF,
+ 0x01ECAC,
+ 0x01ECB0,
+ 0x01ED2E,
+ 0x01F7F0
+ ],
+ ranges: [
+ [0x00003C, 0x00003E],
+ [0x0000A2, 0x0000A6],
+ [0x0000A8, 0x0000A9],
+ [0x0000AE, 0x0000B1],
+ [0x0002C2, 0x0002C5],
+ [0x0002D2, 0x0002DF],
+ [0x0002E5, 0x0002EB],
+ [0x0002EF, 0x0002FF],
+ [0x000384, 0x000385],
+ [0x00058D, 0x00058F],
+ [0x000606, 0x000608],
+ [0x00060E, 0x00060F],
+ [0x0006FD, 0x0006FE],
+ [0x0007FE, 0x0007FF],
+ [0x0009F2, 0x0009F3],
+ [0x0009FA, 0x0009FB],
+ [0x000BF3, 0x000BFA],
+ [0x000F01, 0x000F03],
+ [0x000F15, 0x000F17],
+ [0x000F1A, 0x000F1F],
+ [0x000FBE, 0x000FC5],
+ [0x000FC7, 0x000FCC],
+ [0x000FCE, 0x000FCF],
+ [0x000FD5, 0x000FD8],
+ [0x00109E, 0x00109F],
+ [0x001390, 0x001399],
+ [0x0019DE, 0x0019FF],
+ [0x001B61, 0x001B6A],
+ [0x001B74, 0x001B7C],
+ [0x001FBF, 0x001FC1],
+ [0x001FCD, 0x001FCF],
+ [0x001FDD, 0x001FDF],
+ [0x001FED, 0x001FEF],
+ [0x001FFD, 0x001FFE],
+ [0x00207A, 0x00207C],
+ [0x00208A, 0x00208C],
+ [0x0020A0, 0x0020C0],
+ [0x002100, 0x002101],
+ [0x002103, 0x002106],
+ [0x002108, 0x002109],
+ [0x002116, 0x002118],
+ [0x00211E, 0x002123],
+ [0x00213A, 0x00213B],
+ [0x002140, 0x002144],
+ [0x00214A, 0x00214D],
+ [0x00218A, 0x00218B],
+ [0x002190, 0x002307],
+ [0x00230C, 0x002328],
+ [0x00232B, 0x002426],
+ [0x002440, 0x00244A],
+ [0x00249C, 0x0024E9],
+ [0x002500, 0x002767],
+ [0x002794, 0x0027C4],
+ [0x0027C7, 0x0027E5],
+ [0x0027F0, 0x002982],
+ [0x002999, 0x0029D7],
+ [0x0029DC, 0x0029FB],
+ [0x0029FE, 0x002B73],
+ [0x002B76, 0x002B95],
+ [0x002B97, 0x002BFF],
+ [0x002CE5, 0x002CEA],
+ [0x002E50, 0x002E51],
+ [0x002E80, 0x002E99],
+ [0x002E9B, 0x002EF3],
+ [0x002F00, 0x002FD5],
+ [0x002FF0, 0x002FFB],
+ [0x003012, 0x003013],
+ [0x003036, 0x003037],
+ [0x00303E, 0x00303F],
+ [0x00309B, 0x00309C],
+ [0x003190, 0x003191],
+ [0x003196, 0x00319F],
+ [0x0031C0, 0x0031E3],
+ [0x003200, 0x00321E],
+ [0x00322A, 0x003247],
+ [0x003260, 0x00327F],
+ [0x00328A, 0x0032B0],
+ [0x0032C0, 0x0033FF],
+ [0x004DC0, 0x004DFF],
+ [0x00A490, 0x00A4C6],
+ [0x00A700, 0x00A716],
+ [0x00A720, 0x00A721],
+ [0x00A789, 0x00A78A],
+ [0x00A828, 0x00A82B],
+ [0x00A836, 0x00A839],
+ [0x00AA77, 0x00AA79],
+ [0x00AB6A, 0x00AB6B],
+ [0x00FBB2, 0x00FBC2],
+ [0x00FD40, 0x00FD4F],
+ [0x00FDFC, 0x00FDFF],
+ [0x00FE64, 0x00FE66],
+ [0x00FF1C, 0x00FF1E],
+ [0x00FFE0, 0x00FFE6],
+ [0x00FFE8, 0x00FFEE],
+ [0x00FFFC, 0x00FFFD],
+ [0x010137, 0x01013F],
+ [0x010179, 0x010189],
+ [0x01018C, 0x01018E],
+ [0x010190, 0x01019C],
+ [0x0101D0, 0x0101FC],
+ [0x010877, 0x010878],
+ [0x011FD5, 0x011FF1],
+ [0x016B3C, 0x016B3F],
+ [0x01CF50, 0x01CFC3],
+ [0x01D000, 0x01D0F5],
+ [0x01D100, 0x01D126],
+ [0x01D129, 0x01D164],
+ [0x01D16A, 0x01D16C],
+ [0x01D183, 0x01D184],
+ [0x01D18C, 0x01D1A9],
+ [0x01D1AE, 0x01D1EA],
+ [0x01D200, 0x01D241],
+ [0x01D300, 0x01D356],
+ [0x01D800, 0x01D9FF],
+ [0x01DA37, 0x01DA3A],
+ [0x01DA6D, 0x01DA74],
+ [0x01DA76, 0x01DA83],
+ [0x01DA85, 0x01DA86],
+ [0x01EEF0, 0x01EEF1],
+ [0x01F000, 0x01F02B],
+ [0x01F030, 0x01F093],
+ [0x01F0A0, 0x01F0AE],
+ [0x01F0B1, 0x01F0BF],
+ [0x01F0C1, 0x01F0CF],
+ [0x01F0D1, 0x01F0F5],
+ [0x01F10D, 0x01F1AD],
+ [0x01F1E6, 0x01F202],
+ [0x01F210, 0x01F23B],
+ [0x01F240, 0x01F248],
+ [0x01F250, 0x01F251],
+ [0x01F260, 0x01F265],
+ [0x01F300, 0x01F6D7],
+ [0x01F6DC, 0x01F6EC],
+ [0x01F6F0, 0x01F6FC],
+ [0x01F700, 0x01F776],
+ [0x01F77B, 0x01F7D9],
+ [0x01F7E0, 0x01F7EB],
+ [0x01F800, 0x01F80B],
+ [0x01F810, 0x01F847],
+ [0x01F850, 0x01F859],
+ [0x01F860, 0x01F887],
+ [0x01F890, 0x01F8AD],
+ [0x01F8B0, 0x01F8B1],
+ [0x01F900, 0x01FA53],
+ [0x01FA60, 0x01FA6D],
+ [0x01FA70, 0x01FA7C],
+ [0x01FA80, 0x01FA88],
+ [0x01FA90, 0x01FABD],
+ [0x01FABF, 0x01FAC5],
+ [0x01FACE, 0x01FADB],
+ [0x01FAE0, 0x01FAE8],
+ [0x01FAF0, 0x01FAF8],
+ [0x01FB00, 0x01FB92],
+ [0x01FB94, 0x01FBCA]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Symbol}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Symbol}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=S}+$/u,
+ matchSymbols,
+ "\\p{General_Category=S}"
+);
+testPropertyEscapes(
+ /^\p{gc=Symbol}+$/u,
+ matchSymbols,
+ "\\p{gc=Symbol}"
+);
+testPropertyEscapes(
+ /^\p{gc=S}+$/u,
+ matchSymbols,
+ "\\p{gc=S}"
+);
+testPropertyEscapes(
+ /^\p{Symbol}+$/u,
+ matchSymbols,
+ "\\p{Symbol}"
+);
+testPropertyEscapes(
+ /^\p{S}+$/u,
+ matchSymbols,
+ "\\p{S}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00005F,
+ 0x00007D,
+ 0x0000A7,
+ 0x0000AD,
+ 0x0002EC,
+ 0x0002EE,
+ 0x000F14,
+ 0x000F35,
+ 0x000F37,
+ 0x000FC6,
+ 0x000FCD,
+ 0x001FBE,
+ 0x002102,
+ 0x002107,
+ 0x002115,
+ 0x002124,
+ 0x002126,
+ 0x002128,
+ 0x00214E,
+ 0x002B96,
+ 0x002E9A,
+ 0x00FE63,
+ 0x00FF3F,
+ 0x00FF5D,
+ 0x00FFE7,
+ 0x01018F,
+ 0x01DA75,
+ 0x01DA84,
+ 0x01F0C0,
+ 0x01F0D0,
+ 0x01FABE,
+ 0x01FB93
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000023],
+ [0x000025, 0x00002A],
+ [0x00002C, 0x00003B],
+ [0x00003F, 0x00005D],
+ [0x000061, 0x00007B],
+ [0x00007F, 0x0000A1],
+ [0x0000AA, 0x0000AB],
+ [0x0000B2, 0x0000B3],
+ [0x0000B5, 0x0000B7],
+ [0x0000B9, 0x0000D6],
+ [0x0000D8, 0x0000F6],
+ [0x0000F8, 0x0002C1],
+ [0x0002C6, 0x0002D1],
+ [0x0002E0, 0x0002E4],
+ [0x000300, 0x000374],
+ [0x000376, 0x000383],
+ [0x000386, 0x0003F5],
+ [0x0003F7, 0x000481],
+ [0x000483, 0x00058C],
+ [0x000590, 0x000605],
+ [0x000609, 0x00060A],
+ [0x00060C, 0x00060D],
+ [0x000610, 0x0006DD],
+ [0x0006DF, 0x0006E8],
+ [0x0006EA, 0x0006FC],
+ [0x0006FF, 0x0007F5],
+ [0x0007F7, 0x0007FD],
+ [0x000800, 0x000887],
+ [0x000889, 0x0009F1],
+ [0x0009F4, 0x0009F9],
+ [0x0009FC, 0x000AF0],
+ [0x000AF2, 0x000B6F],
+ [0x000B71, 0x000BF2],
+ [0x000BFB, 0x000C7E],
+ [0x000C80, 0x000D4E],
+ [0x000D50, 0x000D78],
+ [0x000D7A, 0x000E3E],
+ [0x000E40, 0x000F00],
+ [0x000F04, 0x000F12],
+ [0x000F18, 0x000F19],
+ [0x000F20, 0x000F33],
+ [0x000F39, 0x000FBD],
+ [0x000FD0, 0x000FD4],
+ [0x000FD9, 0x00109D],
+ [0x0010A0, 0x00138F],
+ [0x00139A, 0x00166C],
+ [0x00166E, 0x0017DA],
+ [0x0017DC, 0x00193F],
+ [0x001941, 0x0019DD],
+ [0x001A00, 0x001B60],
+ [0x001B6B, 0x001B73],
+ [0x001B7D, 0x001FBC],
+ [0x001FC2, 0x001FCC],
+ [0x001FD0, 0x001FDC],
+ [0x001FE0, 0x001FEC],
+ [0x001FF0, 0x001FFC],
+ [0x001FFF, 0x002043],
+ [0x002045, 0x002051],
+ [0x002053, 0x002079],
+ [0x00207D, 0x002089],
+ [0x00208D, 0x00209F],
+ [0x0020C1, 0x0020FF],
+ [0x00210A, 0x002113],
+ [0x002119, 0x00211D],
+ [0x00212A, 0x00212D],
+ [0x00212F, 0x002139],
+ [0x00213C, 0x00213F],
+ [0x002145, 0x002149],
+ [0x002150, 0x002189],
+ [0x00218C, 0x00218F],
+ [0x002308, 0x00230B],
+ [0x002329, 0x00232A],
+ [0x002427, 0x00243F],
+ [0x00244B, 0x00249B],
+ [0x0024EA, 0x0024FF],
+ [0x002768, 0x002793],
+ [0x0027C5, 0x0027C6],
+ [0x0027E6, 0x0027EF],
+ [0x002983, 0x002998],
+ [0x0029D8, 0x0029DB],
+ [0x0029FC, 0x0029FD],
+ [0x002B74, 0x002B75],
+ [0x002C00, 0x002CE4],
+ [0x002CEB, 0x002E4F],
+ [0x002E52, 0x002E7F],
+ [0x002EF4, 0x002EFF],
+ [0x002FD6, 0x002FEF],
+ [0x002FFC, 0x003003],
+ [0x003005, 0x003011],
+ [0x003014, 0x00301F],
+ [0x003021, 0x003035],
+ [0x003038, 0x00303D],
+ [0x003040, 0x00309A],
+ [0x00309D, 0x00318F],
+ [0x003192, 0x003195],
+ [0x0031A0, 0x0031BF],
+ [0x0031E4, 0x0031FF],
+ [0x00321F, 0x003229],
+ [0x003248, 0x00324F],
+ [0x003251, 0x00325F],
+ [0x003280, 0x003289],
+ [0x0032B1, 0x0032BF],
+ [0x003400, 0x004DBF],
+ [0x004E00, 0x00A48F],
+ [0x00A4C7, 0x00A6FF],
+ [0x00A717, 0x00A71F],
+ [0x00A722, 0x00A788],
+ [0x00A78B, 0x00A827],
+ [0x00A82C, 0x00A835],
+ [0x00A83A, 0x00AA76],
+ [0x00AA7A, 0x00AB5A],
+ [0x00AB5C, 0x00AB69],
+ [0x00AB6C, 0x00DBFF],
+ [0x00E000, 0x00FB28],
+ [0x00FB2A, 0x00FBB1],
+ [0x00FBC3, 0x00FD3F],
+ [0x00FD50, 0x00FDCE],
+ [0x00FDD0, 0x00FDFB],
+ [0x00FE00, 0x00FE61],
+ [0x00FE67, 0x00FE68],
+ [0x00FE6A, 0x00FF03],
+ [0x00FF05, 0x00FF0A],
+ [0x00FF0C, 0x00FF1B],
+ [0x00FF1F, 0x00FF3D],
+ [0x00FF41, 0x00FF5B],
+ [0x00FF5F, 0x00FFDF],
+ [0x00FFEF, 0x00FFFB],
+ [0x00FFFE, 0x010136],
+ [0x010140, 0x010178],
+ [0x01018A, 0x01018B],
+ [0x01019D, 0x01019F],
+ [0x0101A1, 0x0101CF],
+ [0x0101FD, 0x010876],
+ [0x010879, 0x010AC7],
+ [0x010AC9, 0x01173E],
+ [0x011740, 0x011FD4],
+ [0x011FF2, 0x016B3B],
+ [0x016B40, 0x016B44],
+ [0x016B46, 0x01BC9B],
+ [0x01BC9D, 0x01CF4F],
+ [0x01CFC4, 0x01CFFF],
+ [0x01D0F6, 0x01D0FF],
+ [0x01D127, 0x01D128],
+ [0x01D165, 0x01D169],
+ [0x01D16D, 0x01D182],
+ [0x01D185, 0x01D18B],
+ [0x01D1AA, 0x01D1AD],
+ [0x01D1EB, 0x01D1FF],
+ [0x01D242, 0x01D244],
+ [0x01D246, 0x01D2FF],
+ [0x01D357, 0x01D6C0],
+ [0x01D6C2, 0x01D6DA],
+ [0x01D6DC, 0x01D6FA],
+ [0x01D6FC, 0x01D714],
+ [0x01D716, 0x01D734],
+ [0x01D736, 0x01D74E],
+ [0x01D750, 0x01D76E],
+ [0x01D770, 0x01D788],
+ [0x01D78A, 0x01D7A8],
+ [0x01D7AA, 0x01D7C2],
+ [0x01D7C4, 0x01D7FF],
+ [0x01DA00, 0x01DA36],
+ [0x01DA3B, 0x01DA6C],
+ [0x01DA87, 0x01E14E],
+ [0x01E150, 0x01E2FE],
+ [0x01E300, 0x01ECAB],
+ [0x01ECAD, 0x01ECAF],
+ [0x01ECB1, 0x01ED2D],
+ [0x01ED2F, 0x01EEEF],
+ [0x01EEF2, 0x01EFFF],
+ [0x01F02C, 0x01F02F],
+ [0x01F094, 0x01F09F],
+ [0x01F0AF, 0x01F0B0],
+ [0x01F0F6, 0x01F10C],
+ [0x01F1AE, 0x01F1E5],
+ [0x01F203, 0x01F20F],
+ [0x01F23C, 0x01F23F],
+ [0x01F249, 0x01F24F],
+ [0x01F252, 0x01F25F],
+ [0x01F266, 0x01F2FF],
+ [0x01F6D8, 0x01F6DB],
+ [0x01F6ED, 0x01F6EF],
+ [0x01F6FD, 0x01F6FF],
+ [0x01F777, 0x01F77A],
+ [0x01F7DA, 0x01F7DF],
+ [0x01F7EC, 0x01F7EF],
+ [0x01F7F1, 0x01F7FF],
+ [0x01F80C, 0x01F80F],
+ [0x01F848, 0x01F84F],
+ [0x01F85A, 0x01F85F],
+ [0x01F888, 0x01F88F],
+ [0x01F8AE, 0x01F8AF],
+ [0x01F8B2, 0x01F8FF],
+ [0x01FA54, 0x01FA5F],
+ [0x01FA6E, 0x01FA6F],
+ [0x01FA7D, 0x01FA7F],
+ [0x01FA89, 0x01FA8F],
+ [0x01FAC6, 0x01FACD],
+ [0x01FADC, 0x01FADF],
+ [0x01FAE9, 0x01FAEF],
+ [0x01FAF9, 0x01FAFF],
+ [0x01FBCB, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Symbol}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Symbol}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=S}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=S}"
+);
+testPropertyEscapes(
+ /^\P{gc=Symbol}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Symbol}"
+);
+testPropertyEscapes(
+ /^\P{gc=S}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=S}"
+);
+testPropertyEscapes(
+ /^\P{Symbol}+$/u,
+ nonMatchSymbols,
+ "\\P{Symbol}"
+);
+testPropertyEscapes(
+ /^\P{S}+$/u,
+ nonMatchSymbols,
+ "\\P{S}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Titlecase_Letter.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Titlecase_Letter.js
new file mode 100644
index 0000000000..bf5c339fbe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Titlecase_Letter.js
@@ -0,0 +1,112 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Titlecase_Letter`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0001C5,
+ 0x0001C8,
+ 0x0001CB,
+ 0x0001F2,
+ 0x001FBC,
+ 0x001FCC,
+ 0x001FFC
+ ],
+ ranges: [
+ [0x001F88, 0x001F8F],
+ [0x001F98, 0x001F9F],
+ [0x001FA8, 0x001FAF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Titlecase_Letter}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Titlecase_Letter}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Lt}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Lt}"
+);
+testPropertyEscapes(
+ /^\p{gc=Titlecase_Letter}+$/u,
+ matchSymbols,
+ "\\p{gc=Titlecase_Letter}"
+);
+testPropertyEscapes(
+ /^\p{gc=Lt}+$/u,
+ matchSymbols,
+ "\\p{gc=Lt}"
+);
+testPropertyEscapes(
+ /^\p{Titlecase_Letter}+$/u,
+ matchSymbols,
+ "\\p{Titlecase_Letter}"
+);
+testPropertyEscapes(
+ /^\p{Lt}+$/u,
+ matchSymbols,
+ "\\p{Lt}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0001C4],
+ [0x0001C6, 0x0001C7],
+ [0x0001C9, 0x0001CA],
+ [0x0001CC, 0x0001F1],
+ [0x0001F3, 0x001F87],
+ [0x001F90, 0x001F97],
+ [0x001FA0, 0x001FA7],
+ [0x001FB0, 0x001FBB],
+ [0x001FBD, 0x001FCB],
+ [0x001FCD, 0x001FFB],
+ [0x001FFD, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Titlecase_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Titlecase_Letter}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Lt}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Lt}"
+);
+testPropertyEscapes(
+ /^\P{gc=Titlecase_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Titlecase_Letter}"
+);
+testPropertyEscapes(
+ /^\P{gc=Lt}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Lt}"
+);
+testPropertyEscapes(
+ /^\P{Titlecase_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{Titlecase_Letter}"
+);
+testPropertyEscapes(
+ /^\P{Lt}+$/u,
+ nonMatchSymbols,
+ "\\P{Lt}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Unassigned.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Unassigned.js
new file mode 100644
index 0000000000..ebf245235f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Unassigned.js
@@ -0,0 +1,1506 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Unassigned`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00038B,
+ 0x00038D,
+ 0x0003A2,
+ 0x000530,
+ 0x000590,
+ 0x00070E,
+ 0x00083F,
+ 0x00085F,
+ 0x00088F,
+ 0x000984,
+ 0x0009A9,
+ 0x0009B1,
+ 0x0009DE,
+ 0x000A04,
+ 0x000A29,
+ 0x000A31,
+ 0x000A34,
+ 0x000A37,
+ 0x000A3D,
+ 0x000A5D,
+ 0x000A84,
+ 0x000A8E,
+ 0x000A92,
+ 0x000AA9,
+ 0x000AB1,
+ 0x000AB4,
+ 0x000AC6,
+ 0x000ACA,
+ 0x000B00,
+ 0x000B04,
+ 0x000B29,
+ 0x000B31,
+ 0x000B34,
+ 0x000B5E,
+ 0x000B84,
+ 0x000B91,
+ 0x000B9B,
+ 0x000B9D,
+ 0x000BC9,
+ 0x000C0D,
+ 0x000C11,
+ 0x000C29,
+ 0x000C45,
+ 0x000C49,
+ 0x000C57,
+ 0x000C8D,
+ 0x000C91,
+ 0x000CA9,
+ 0x000CB4,
+ 0x000CC5,
+ 0x000CC9,
+ 0x000CDF,
+ 0x000CF0,
+ 0x000D0D,
+ 0x000D11,
+ 0x000D45,
+ 0x000D49,
+ 0x000D80,
+ 0x000D84,
+ 0x000DB2,
+ 0x000DBC,
+ 0x000DD5,
+ 0x000DD7,
+ 0x000E83,
+ 0x000E85,
+ 0x000E8B,
+ 0x000EA4,
+ 0x000EA6,
+ 0x000EC5,
+ 0x000EC7,
+ 0x000ECF,
+ 0x000F48,
+ 0x000F98,
+ 0x000FBD,
+ 0x000FCD,
+ 0x0010C6,
+ 0x001249,
+ 0x001257,
+ 0x001259,
+ 0x001289,
+ 0x0012B1,
+ 0x0012BF,
+ 0x0012C1,
+ 0x0012D7,
+ 0x001311,
+ 0x00176D,
+ 0x001771,
+ 0x00191F,
+ 0x001A5F,
+ 0x001B7F,
+ 0x001F58,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x001FB5,
+ 0x001FC5,
+ 0x001FDC,
+ 0x001FF5,
+ 0x001FFF,
+ 0x002065,
+ 0x00208F,
+ 0x002B96,
+ 0x002D26,
+ 0x002DA7,
+ 0x002DAF,
+ 0x002DB7,
+ 0x002DBF,
+ 0x002DC7,
+ 0x002DCF,
+ 0x002DD7,
+ 0x002DDF,
+ 0x002E9A,
+ 0x003040,
+ 0x003130,
+ 0x00318F,
+ 0x00321F,
+ 0x00A7D2,
+ 0x00A7D4,
+ 0x00A9CE,
+ 0x00A9FF,
+ 0x00AB27,
+ 0x00AB2F,
+ 0x00FB37,
+ 0x00FB3D,
+ 0x00FB3F,
+ 0x00FB42,
+ 0x00FB45,
+ 0x00FE53,
+ 0x00FE67,
+ 0x00FE75,
+ 0x00FF00,
+ 0x00FFE7,
+ 0x01000C,
+ 0x010027,
+ 0x01003B,
+ 0x01003E,
+ 0x01018F,
+ 0x01039E,
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x010596,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA,
+ 0x010786,
+ 0x0107B1,
+ 0x010809,
+ 0x010836,
+ 0x010856,
+ 0x0108F3,
+ 0x010A04,
+ 0x010A14,
+ 0x010A18,
+ 0x010E7F,
+ 0x010EAA,
+ 0x011135,
+ 0x0111E0,
+ 0x011212,
+ 0x011287,
+ 0x011289,
+ 0x01128E,
+ 0x01129E,
+ 0x011304,
+ 0x011329,
+ 0x011331,
+ 0x011334,
+ 0x01133A,
+ 0x01145C,
+ 0x011914,
+ 0x011917,
+ 0x011936,
+ 0x011C09,
+ 0x011C37,
+ 0x011CA8,
+ 0x011D07,
+ 0x011D0A,
+ 0x011D3B,
+ 0x011D3E,
+ 0x011D66,
+ 0x011D69,
+ 0x011D8F,
+ 0x011D92,
+ 0x011F11,
+ 0x01246F,
+ 0x016A5F,
+ 0x016ABF,
+ 0x016B5A,
+ 0x016B62,
+ 0x01AFF4,
+ 0x01AFFC,
+ 0x01AFFF,
+ 0x01D455,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D506,
+ 0x01D515,
+ 0x01D51D,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545,
+ 0x01D551,
+ 0x01DAA0,
+ 0x01E007,
+ 0x01E022,
+ 0x01E025,
+ 0x01E7E7,
+ 0x01E7EC,
+ 0x01E7EF,
+ 0x01E7FF,
+ 0x01EE04,
+ 0x01EE20,
+ 0x01EE23,
+ 0x01EE28,
+ 0x01EE33,
+ 0x01EE38,
+ 0x01EE3A,
+ 0x01EE48,
+ 0x01EE4A,
+ 0x01EE4C,
+ 0x01EE50,
+ 0x01EE53,
+ 0x01EE58,
+ 0x01EE5A,
+ 0x01EE5C,
+ 0x01EE5E,
+ 0x01EE60,
+ 0x01EE63,
+ 0x01EE6B,
+ 0x01EE73,
+ 0x01EE78,
+ 0x01EE7D,
+ 0x01EE7F,
+ 0x01EE8A,
+ 0x01EEA4,
+ 0x01EEAA,
+ 0x01F0C0,
+ 0x01F0D0,
+ 0x01FABE,
+ 0x01FB93
+ ],
+ ranges: [
+ [0x000378, 0x000379],
+ [0x000380, 0x000383],
+ [0x000557, 0x000558],
+ [0x00058B, 0x00058C],
+ [0x0005C8, 0x0005CF],
+ [0x0005EB, 0x0005EE],
+ [0x0005F5, 0x0005FF],
+ [0x00074B, 0x00074C],
+ [0x0007B2, 0x0007BF],
+ [0x0007FB, 0x0007FC],
+ [0x00082E, 0x00082F],
+ [0x00085C, 0x00085D],
+ [0x00086B, 0x00086F],
+ [0x000892, 0x000897],
+ [0x00098D, 0x00098E],
+ [0x000991, 0x000992],
+ [0x0009B3, 0x0009B5],
+ [0x0009BA, 0x0009BB],
+ [0x0009C5, 0x0009C6],
+ [0x0009C9, 0x0009CA],
+ [0x0009CF, 0x0009D6],
+ [0x0009D8, 0x0009DB],
+ [0x0009E4, 0x0009E5],
+ [0x0009FF, 0x000A00],
+ [0x000A0B, 0x000A0E],
+ [0x000A11, 0x000A12],
+ [0x000A3A, 0x000A3B],
+ [0x000A43, 0x000A46],
+ [0x000A49, 0x000A4A],
+ [0x000A4E, 0x000A50],
+ [0x000A52, 0x000A58],
+ [0x000A5F, 0x000A65],
+ [0x000A77, 0x000A80],
+ [0x000ABA, 0x000ABB],
+ [0x000ACE, 0x000ACF],
+ [0x000AD1, 0x000ADF],
+ [0x000AE4, 0x000AE5],
+ [0x000AF2, 0x000AF8],
+ [0x000B0D, 0x000B0E],
+ [0x000B11, 0x000B12],
+ [0x000B3A, 0x000B3B],
+ [0x000B45, 0x000B46],
+ [0x000B49, 0x000B4A],
+ [0x000B4E, 0x000B54],
+ [0x000B58, 0x000B5B],
+ [0x000B64, 0x000B65],
+ [0x000B78, 0x000B81],
+ [0x000B8B, 0x000B8D],
+ [0x000B96, 0x000B98],
+ [0x000BA0, 0x000BA2],
+ [0x000BA5, 0x000BA7],
+ [0x000BAB, 0x000BAD],
+ [0x000BBA, 0x000BBD],
+ [0x000BC3, 0x000BC5],
+ [0x000BCE, 0x000BCF],
+ [0x000BD1, 0x000BD6],
+ [0x000BD8, 0x000BE5],
+ [0x000BFB, 0x000BFF],
+ [0x000C3A, 0x000C3B],
+ [0x000C4E, 0x000C54],
+ [0x000C5B, 0x000C5C],
+ [0x000C5E, 0x000C5F],
+ [0x000C64, 0x000C65],
+ [0x000C70, 0x000C76],
+ [0x000CBA, 0x000CBB],
+ [0x000CCE, 0x000CD4],
+ [0x000CD7, 0x000CDC],
+ [0x000CE4, 0x000CE5],
+ [0x000CF4, 0x000CFF],
+ [0x000D50, 0x000D53],
+ [0x000D64, 0x000D65],
+ [0x000D97, 0x000D99],
+ [0x000DBE, 0x000DBF],
+ [0x000DC7, 0x000DC9],
+ [0x000DCB, 0x000DCE],
+ [0x000DE0, 0x000DE5],
+ [0x000DF0, 0x000DF1],
+ [0x000DF5, 0x000E00],
+ [0x000E3B, 0x000E3E],
+ [0x000E5C, 0x000E80],
+ [0x000EBE, 0x000EBF],
+ [0x000EDA, 0x000EDB],
+ [0x000EE0, 0x000EFF],
+ [0x000F6D, 0x000F70],
+ [0x000FDB, 0x000FFF],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x0010CF],
+ [0x00124E, 0x00124F],
+ [0x00125E, 0x00125F],
+ [0x00128E, 0x00128F],
+ [0x0012B6, 0x0012B7],
+ [0x0012C6, 0x0012C7],
+ [0x001316, 0x001317],
+ [0x00135B, 0x00135C],
+ [0x00137D, 0x00137F],
+ [0x00139A, 0x00139F],
+ [0x0013F6, 0x0013F7],
+ [0x0013FE, 0x0013FF],
+ [0x00169D, 0x00169F],
+ [0x0016F9, 0x0016FF],
+ [0x001716, 0x00171E],
+ [0x001737, 0x00173F],
+ [0x001754, 0x00175F],
+ [0x001774, 0x00177F],
+ [0x0017DE, 0x0017DF],
+ [0x0017EA, 0x0017EF],
+ [0x0017FA, 0x0017FF],
+ [0x00181A, 0x00181F],
+ [0x001879, 0x00187F],
+ [0x0018AB, 0x0018AF],
+ [0x0018F6, 0x0018FF],
+ [0x00192C, 0x00192F],
+ [0x00193C, 0x00193F],
+ [0x001941, 0x001943],
+ [0x00196E, 0x00196F],
+ [0x001975, 0x00197F],
+ [0x0019AC, 0x0019AF],
+ [0x0019CA, 0x0019CF],
+ [0x0019DB, 0x0019DD],
+ [0x001A1C, 0x001A1D],
+ [0x001A7D, 0x001A7E],
+ [0x001A8A, 0x001A8F],
+ [0x001A9A, 0x001A9F],
+ [0x001AAE, 0x001AAF],
+ [0x001ACF, 0x001AFF],
+ [0x001B4D, 0x001B4F],
+ [0x001BF4, 0x001BFB],
+ [0x001C38, 0x001C3A],
+ [0x001C4A, 0x001C4C],
+ [0x001C89, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC8, 0x001CCF],
+ [0x001CFB, 0x001CFF],
+ [0x001F16, 0x001F17],
+ [0x001F1E, 0x001F1F],
+ [0x001F46, 0x001F47],
+ [0x001F4E, 0x001F4F],
+ [0x001F7E, 0x001F7F],
+ [0x001FD4, 0x001FD5],
+ [0x001FF0, 0x001FF1],
+ [0x002072, 0x002073],
+ [0x00209D, 0x00209F],
+ [0x0020C1, 0x0020CF],
+ [0x0020F1, 0x0020FF],
+ [0x00218C, 0x00218F],
+ [0x002427, 0x00243F],
+ [0x00244B, 0x00245F],
+ [0x002B74, 0x002B75],
+ [0x002CF4, 0x002CF8],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x002D2F],
+ [0x002D68, 0x002D6E],
+ [0x002D71, 0x002D7E],
+ [0x002D97, 0x002D9F],
+ [0x002E5E, 0x002E7F],
+ [0x002EF4, 0x002EFF],
+ [0x002FD6, 0x002FEF],
+ [0x002FFC, 0x002FFF],
+ [0x003097, 0x003098],
+ [0x003100, 0x003104],
+ [0x0031E4, 0x0031EF],
+ [0x00A48D, 0x00A48F],
+ [0x00A4C7, 0x00A4CF],
+ [0x00A62C, 0x00A63F],
+ [0x00A6F8, 0x00A6FF],
+ [0x00A7CB, 0x00A7CF],
+ [0x00A7DA, 0x00A7F1],
+ [0x00A82D, 0x00A82F],
+ [0x00A83A, 0x00A83F],
+ [0x00A878, 0x00A87F],
+ [0x00A8C6, 0x00A8CD],
+ [0x00A8DA, 0x00A8DF],
+ [0x00A954, 0x00A95E],
+ [0x00A97D, 0x00A97F],
+ [0x00A9DA, 0x00A9DD],
+ [0x00AA37, 0x00AA3F],
+ [0x00AA4E, 0x00AA4F],
+ [0x00AA5A, 0x00AA5B],
+ [0x00AAC3, 0x00AADA],
+ [0x00AAF7, 0x00AB00],
+ [0x00AB07, 0x00AB08],
+ [0x00AB0F, 0x00AB10],
+ [0x00AB17, 0x00AB1F],
+ [0x00AB6C, 0x00AB6F],
+ [0x00ABEE, 0x00ABEF],
+ [0x00ABFA, 0x00ABFF],
+ [0x00D7A4, 0x00D7AF],
+ [0x00D7C7, 0x00D7CA],
+ [0x00D7FC, 0x00D7FF],
+ [0x00FA6E, 0x00FA6F],
+ [0x00FADA, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FB1C],
+ [0x00FBC3, 0x00FBD2],
+ [0x00FD90, 0x00FD91],
+ [0x00FDC8, 0x00FDCE],
+ [0x00FDD0, 0x00FDEF],
+ [0x00FE1A, 0x00FE1F],
+ [0x00FE6C, 0x00FE6F],
+ [0x00FEFD, 0x00FEFE],
+ [0x00FFBF, 0x00FFC1],
+ [0x00FFC8, 0x00FFC9],
+ [0x00FFD0, 0x00FFD1],
+ [0x00FFD8, 0x00FFD9],
+ [0x00FFDD, 0x00FFDF],
+ [0x00FFEF, 0x00FFF8],
+ [0x00FFFE, 0x00FFFF],
+ [0x01004E, 0x01004F],
+ [0x01005E, 0x01007F],
+ [0x0100FB, 0x0100FF],
+ [0x010103, 0x010106],
+ [0x010134, 0x010136],
+ [0x01019D, 0x01019F],
+ [0x0101A1, 0x0101CF],
+ [0x0101FE, 0x01027F],
+ [0x01029D, 0x01029F],
+ [0x0102D1, 0x0102DF],
+ [0x0102FC, 0x0102FF],
+ [0x010324, 0x01032C],
+ [0x01034B, 0x01034F],
+ [0x01037B, 0x01037F],
+ [0x0103C4, 0x0103C7],
+ [0x0103D6, 0x0103FF],
+ [0x01049E, 0x01049F],
+ [0x0104AA, 0x0104AF],
+ [0x0104D4, 0x0104D7],
+ [0x0104FC, 0x0104FF],
+ [0x010528, 0x01052F],
+ [0x010564, 0x01056E],
+ [0x0105BD, 0x0105FF],
+ [0x010737, 0x01073F],
+ [0x010756, 0x01075F],
+ [0x010768, 0x01077F],
+ [0x0107BB, 0x0107FF],
+ [0x010806, 0x010807],
+ [0x010839, 0x01083B],
+ [0x01083D, 0x01083E],
+ [0x01089F, 0x0108A6],
+ [0x0108B0, 0x0108DF],
+ [0x0108F6, 0x0108FA],
+ [0x01091C, 0x01091E],
+ [0x01093A, 0x01093E],
+ [0x010940, 0x01097F],
+ [0x0109B8, 0x0109BB],
+ [0x0109D0, 0x0109D1],
+ [0x010A07, 0x010A0B],
+ [0x010A36, 0x010A37],
+ [0x010A3B, 0x010A3E],
+ [0x010A49, 0x010A4F],
+ [0x010A59, 0x010A5F],
+ [0x010AA0, 0x010ABF],
+ [0x010AE7, 0x010AEA],
+ [0x010AF7, 0x010AFF],
+ [0x010B36, 0x010B38],
+ [0x010B56, 0x010B57],
+ [0x010B73, 0x010B77],
+ [0x010B92, 0x010B98],
+ [0x010B9D, 0x010BA8],
+ [0x010BB0, 0x010BFF],
+ [0x010C49, 0x010C7F],
+ [0x010CB3, 0x010CBF],
+ [0x010CF3, 0x010CF9],
+ [0x010D28, 0x010D2F],
+ [0x010D3A, 0x010E5F],
+ [0x010EAE, 0x010EAF],
+ [0x010EB2, 0x010EFC],
+ [0x010F28, 0x010F2F],
+ [0x010F5A, 0x010F6F],
+ [0x010F8A, 0x010FAF],
+ [0x010FCC, 0x010FDF],
+ [0x010FF7, 0x010FFF],
+ [0x01104E, 0x011051],
+ [0x011076, 0x01107E],
+ [0x0110C3, 0x0110CC],
+ [0x0110CE, 0x0110CF],
+ [0x0110E9, 0x0110EF],
+ [0x0110FA, 0x0110FF],
+ [0x011148, 0x01114F],
+ [0x011177, 0x01117F],
+ [0x0111F5, 0x0111FF],
+ [0x011242, 0x01127F],
+ [0x0112AA, 0x0112AF],
+ [0x0112EB, 0x0112EF],
+ [0x0112FA, 0x0112FF],
+ [0x01130D, 0x01130E],
+ [0x011311, 0x011312],
+ [0x011345, 0x011346],
+ [0x011349, 0x01134A],
+ [0x01134E, 0x01134F],
+ [0x011351, 0x011356],
+ [0x011358, 0x01135C],
+ [0x011364, 0x011365],
+ [0x01136D, 0x01136F],
+ [0x011375, 0x0113FF],
+ [0x011462, 0x01147F],
+ [0x0114C8, 0x0114CF],
+ [0x0114DA, 0x01157F],
+ [0x0115B6, 0x0115B7],
+ [0x0115DE, 0x0115FF],
+ [0x011645, 0x01164F],
+ [0x01165A, 0x01165F],
+ [0x01166D, 0x01167F],
+ [0x0116BA, 0x0116BF],
+ [0x0116CA, 0x0116FF],
+ [0x01171B, 0x01171C],
+ [0x01172C, 0x01172F],
+ [0x011747, 0x0117FF],
+ [0x01183C, 0x01189F],
+ [0x0118F3, 0x0118FE],
+ [0x011907, 0x011908],
+ [0x01190A, 0x01190B],
+ [0x011939, 0x01193A],
+ [0x011947, 0x01194F],
+ [0x01195A, 0x01199F],
+ [0x0119A8, 0x0119A9],
+ [0x0119D8, 0x0119D9],
+ [0x0119E5, 0x0119FF],
+ [0x011A48, 0x011A4F],
+ [0x011AA3, 0x011AAF],
+ [0x011AF9, 0x011AFF],
+ [0x011B0A, 0x011BFF],
+ [0x011C46, 0x011C4F],
+ [0x011C6D, 0x011C6F],
+ [0x011C90, 0x011C91],
+ [0x011CB7, 0x011CFF],
+ [0x011D37, 0x011D39],
+ [0x011D48, 0x011D4F],
+ [0x011D5A, 0x011D5F],
+ [0x011D99, 0x011D9F],
+ [0x011DAA, 0x011EDF],
+ [0x011EF9, 0x011EFF],
+ [0x011F3B, 0x011F3D],
+ [0x011F5A, 0x011FAF],
+ [0x011FB1, 0x011FBF],
+ [0x011FF2, 0x011FFE],
+ [0x01239A, 0x0123FF],
+ [0x012475, 0x01247F],
+ [0x012544, 0x012F8F],
+ [0x012FF3, 0x012FFF],
+ [0x013456, 0x0143FF],
+ [0x014647, 0x0167FF],
+ [0x016A39, 0x016A3F],
+ [0x016A6A, 0x016A6D],
+ [0x016ACA, 0x016ACF],
+ [0x016AEE, 0x016AEF],
+ [0x016AF6, 0x016AFF],
+ [0x016B46, 0x016B4F],
+ [0x016B78, 0x016B7C],
+ [0x016B90, 0x016E3F],
+ [0x016E9B, 0x016EFF],
+ [0x016F4B, 0x016F4E],
+ [0x016F88, 0x016F8E],
+ [0x016FA0, 0x016FDF],
+ [0x016FE5, 0x016FEF],
+ [0x016FF2, 0x016FFF],
+ [0x0187F8, 0x0187FF],
+ [0x018CD6, 0x018CFF],
+ [0x018D09, 0x01AFEF],
+ [0x01B123, 0x01B131],
+ [0x01B133, 0x01B14F],
+ [0x01B153, 0x01B154],
+ [0x01B156, 0x01B163],
+ [0x01B168, 0x01B16F],
+ [0x01B2FC, 0x01BBFF],
+ [0x01BC6B, 0x01BC6F],
+ [0x01BC7D, 0x01BC7F],
+ [0x01BC89, 0x01BC8F],
+ [0x01BC9A, 0x01BC9B],
+ [0x01BCA4, 0x01CEFF],
+ [0x01CF2E, 0x01CF2F],
+ [0x01CF47, 0x01CF4F],
+ [0x01CFC4, 0x01CFFF],
+ [0x01D0F6, 0x01D0FF],
+ [0x01D127, 0x01D128],
+ [0x01D1EB, 0x01D1FF],
+ [0x01D246, 0x01D2BF],
+ [0x01D2D4, 0x01D2DF],
+ [0x01D2F4, 0x01D2FF],
+ [0x01D357, 0x01D35F],
+ [0x01D379, 0x01D3FF],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D50B, 0x01D50C],
+ [0x01D547, 0x01D549],
+ [0x01D6A6, 0x01D6A7],
+ [0x01D7CC, 0x01D7CD],
+ [0x01DA8C, 0x01DA9A],
+ [0x01DAB0, 0x01DEFF],
+ [0x01DF1F, 0x01DF24],
+ [0x01DF2B, 0x01DFFF],
+ [0x01E019, 0x01E01A],
+ [0x01E02B, 0x01E02F],
+ [0x01E06E, 0x01E08E],
+ [0x01E090, 0x01E0FF],
+ [0x01E12D, 0x01E12F],
+ [0x01E13E, 0x01E13F],
+ [0x01E14A, 0x01E14D],
+ [0x01E150, 0x01E28F],
+ [0x01E2AF, 0x01E2BF],
+ [0x01E2FA, 0x01E2FE],
+ [0x01E300, 0x01E4CF],
+ [0x01E4FA, 0x01E7DF],
+ [0x01E8C5, 0x01E8C6],
+ [0x01E8D7, 0x01E8FF],
+ [0x01E94C, 0x01E94F],
+ [0x01E95A, 0x01E95D],
+ [0x01E960, 0x01EC70],
+ [0x01ECB5, 0x01ED00],
+ [0x01ED3E, 0x01EDFF],
+ [0x01EE25, 0x01EE26],
+ [0x01EE3C, 0x01EE41],
+ [0x01EE43, 0x01EE46],
+ [0x01EE55, 0x01EE56],
+ [0x01EE65, 0x01EE66],
+ [0x01EE9C, 0x01EEA0],
+ [0x01EEBC, 0x01EEEF],
+ [0x01EEF2, 0x01EFFF],
+ [0x01F02C, 0x01F02F],
+ [0x01F094, 0x01F09F],
+ [0x01F0AF, 0x01F0B0],
+ [0x01F0F6, 0x01F0FF],
+ [0x01F1AE, 0x01F1E5],
+ [0x01F203, 0x01F20F],
+ [0x01F23C, 0x01F23F],
+ [0x01F249, 0x01F24F],
+ [0x01F252, 0x01F25F],
+ [0x01F266, 0x01F2FF],
+ [0x01F6D8, 0x01F6DB],
+ [0x01F6ED, 0x01F6EF],
+ [0x01F6FD, 0x01F6FF],
+ [0x01F777, 0x01F77A],
+ [0x01F7DA, 0x01F7DF],
+ [0x01F7EC, 0x01F7EF],
+ [0x01F7F1, 0x01F7FF],
+ [0x01F80C, 0x01F80F],
+ [0x01F848, 0x01F84F],
+ [0x01F85A, 0x01F85F],
+ [0x01F888, 0x01F88F],
+ [0x01F8AE, 0x01F8AF],
+ [0x01F8B2, 0x01F8FF],
+ [0x01FA54, 0x01FA5F],
+ [0x01FA6E, 0x01FA6F],
+ [0x01FA7D, 0x01FA7F],
+ [0x01FA89, 0x01FA8F],
+ [0x01FAC6, 0x01FACD],
+ [0x01FADC, 0x01FADF],
+ [0x01FAE9, 0x01FAEF],
+ [0x01FAF9, 0x01FAFF],
+ [0x01FBCB, 0x01FBEF],
+ [0x01FBFA, 0x01FFFF],
+ [0x02A6E0, 0x02A6FF],
+ [0x02B73A, 0x02B73F],
+ [0x02B81E, 0x02B81F],
+ [0x02CEA2, 0x02CEAF],
+ [0x02EBE1, 0x02F7FF],
+ [0x02FA1E, 0x02FFFF],
+ [0x03134B, 0x03134F],
+ [0x0323B0, 0x0E0000],
+ [0x0E0002, 0x0E001F],
+ [0x0E0080, 0x0E00FF],
+ [0x0E01F0, 0x0EFFFF],
+ [0x0FFFFE, 0x0FFFFF],
+ [0x10FFFE, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Unassigned}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Unassigned}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Cn}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Cn}"
+);
+testPropertyEscapes(
+ /^\p{gc=Unassigned}+$/u,
+ matchSymbols,
+ "\\p{gc=Unassigned}"
+);
+testPropertyEscapes(
+ /^\p{gc=Cn}+$/u,
+ matchSymbols,
+ "\\p{gc=Cn}"
+);
+testPropertyEscapes(
+ /^\p{Unassigned}+$/u,
+ matchSymbols,
+ "\\p{Unassigned}"
+);
+testPropertyEscapes(
+ /^\p{Cn}+$/u,
+ matchSymbols,
+ "\\p{Cn}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00038C,
+ 0x00085E,
+ 0x0009B2,
+ 0x0009D7,
+ 0x000A3C,
+ 0x000A51,
+ 0x000A5E,
+ 0x000AD0,
+ 0x000B9C,
+ 0x000BD0,
+ 0x000BD7,
+ 0x000C5D,
+ 0x000DBD,
+ 0x000DCA,
+ 0x000DD6,
+ 0x000E84,
+ 0x000EA5,
+ 0x000EC6,
+ 0x0010C7,
+ 0x0010CD,
+ 0x001258,
+ 0x0012C0,
+ 0x001940,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x002D27,
+ 0x002D2D,
+ 0x00A7D3,
+ 0x00FB3E,
+ 0x00FDCF,
+ 0x00FEFF,
+ 0x0101A0,
+ 0x010808,
+ 0x01083C,
+ 0x01093F,
+ 0x0110CD,
+ 0x011288,
+ 0x011350,
+ 0x011357,
+ 0x011909,
+ 0x011D3A,
+ 0x011FB0,
+ 0x01B132,
+ 0x01B155,
+ 0x01D4A2,
+ 0x01D4BB,
+ 0x01D546,
+ 0x01E08F,
+ 0x01E2FF,
+ 0x01EE24,
+ 0x01EE27,
+ 0x01EE39,
+ 0x01EE3B,
+ 0x01EE42,
+ 0x01EE47,
+ 0x01EE49,
+ 0x01EE4B,
+ 0x01EE54,
+ 0x01EE57,
+ 0x01EE59,
+ 0x01EE5B,
+ 0x01EE5D,
+ 0x01EE5F,
+ 0x01EE64,
+ 0x01EE7E,
+ 0x01F7F0,
+ 0x0E0001
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000377],
+ [0x00037A, 0x00037F],
+ [0x000384, 0x00038A],
+ [0x00038E, 0x0003A1],
+ [0x0003A3, 0x00052F],
+ [0x000531, 0x000556],
+ [0x000559, 0x00058A],
+ [0x00058D, 0x00058F],
+ [0x000591, 0x0005C7],
+ [0x0005D0, 0x0005EA],
+ [0x0005EF, 0x0005F4],
+ [0x000600, 0x00070D],
+ [0x00070F, 0x00074A],
+ [0x00074D, 0x0007B1],
+ [0x0007C0, 0x0007FA],
+ [0x0007FD, 0x00082D],
+ [0x000830, 0x00083E],
+ [0x000840, 0x00085B],
+ [0x000860, 0x00086A],
+ [0x000870, 0x00088E],
+ [0x000890, 0x000891],
+ [0x000898, 0x000983],
+ [0x000985, 0x00098C],
+ [0x00098F, 0x000990],
+ [0x000993, 0x0009A8],
+ [0x0009AA, 0x0009B0],
+ [0x0009B6, 0x0009B9],
+ [0x0009BC, 0x0009C4],
+ [0x0009C7, 0x0009C8],
+ [0x0009CB, 0x0009CE],
+ [0x0009DC, 0x0009DD],
+ [0x0009DF, 0x0009E3],
+ [0x0009E6, 0x0009FE],
+ [0x000A01, 0x000A03],
+ [0x000A05, 0x000A0A],
+ [0x000A0F, 0x000A10],
+ [0x000A13, 0x000A28],
+ [0x000A2A, 0x000A30],
+ [0x000A32, 0x000A33],
+ [0x000A35, 0x000A36],
+ [0x000A38, 0x000A39],
+ [0x000A3E, 0x000A42],
+ [0x000A47, 0x000A48],
+ [0x000A4B, 0x000A4D],
+ [0x000A59, 0x000A5C],
+ [0x000A66, 0x000A76],
+ [0x000A81, 0x000A83],
+ [0x000A85, 0x000A8D],
+ [0x000A8F, 0x000A91],
+ [0x000A93, 0x000AA8],
+ [0x000AAA, 0x000AB0],
+ [0x000AB2, 0x000AB3],
+ [0x000AB5, 0x000AB9],
+ [0x000ABC, 0x000AC5],
+ [0x000AC7, 0x000AC9],
+ [0x000ACB, 0x000ACD],
+ [0x000AE0, 0x000AE3],
+ [0x000AE6, 0x000AF1],
+ [0x000AF9, 0x000AFF],
+ [0x000B01, 0x000B03],
+ [0x000B05, 0x000B0C],
+ [0x000B0F, 0x000B10],
+ [0x000B13, 0x000B28],
+ [0x000B2A, 0x000B30],
+ [0x000B32, 0x000B33],
+ [0x000B35, 0x000B39],
+ [0x000B3C, 0x000B44],
+ [0x000B47, 0x000B48],
+ [0x000B4B, 0x000B4D],
+ [0x000B55, 0x000B57],
+ [0x000B5C, 0x000B5D],
+ [0x000B5F, 0x000B63],
+ [0x000B66, 0x000B77],
+ [0x000B82, 0x000B83],
+ [0x000B85, 0x000B8A],
+ [0x000B8E, 0x000B90],
+ [0x000B92, 0x000B95],
+ [0x000B99, 0x000B9A],
+ [0x000B9E, 0x000B9F],
+ [0x000BA3, 0x000BA4],
+ [0x000BA8, 0x000BAA],
+ [0x000BAE, 0x000BB9],
+ [0x000BBE, 0x000BC2],
+ [0x000BC6, 0x000BC8],
+ [0x000BCA, 0x000BCD],
+ [0x000BE6, 0x000BFA],
+ [0x000C00, 0x000C0C],
+ [0x000C0E, 0x000C10],
+ [0x000C12, 0x000C28],
+ [0x000C2A, 0x000C39],
+ [0x000C3C, 0x000C44],
+ [0x000C46, 0x000C48],
+ [0x000C4A, 0x000C4D],
+ [0x000C55, 0x000C56],
+ [0x000C58, 0x000C5A],
+ [0x000C60, 0x000C63],
+ [0x000C66, 0x000C6F],
+ [0x000C77, 0x000C8C],
+ [0x000C8E, 0x000C90],
+ [0x000C92, 0x000CA8],
+ [0x000CAA, 0x000CB3],
+ [0x000CB5, 0x000CB9],
+ [0x000CBC, 0x000CC4],
+ [0x000CC6, 0x000CC8],
+ [0x000CCA, 0x000CCD],
+ [0x000CD5, 0x000CD6],
+ [0x000CDD, 0x000CDE],
+ [0x000CE0, 0x000CE3],
+ [0x000CE6, 0x000CEF],
+ [0x000CF1, 0x000CF3],
+ [0x000D00, 0x000D0C],
+ [0x000D0E, 0x000D10],
+ [0x000D12, 0x000D44],
+ [0x000D46, 0x000D48],
+ [0x000D4A, 0x000D4F],
+ [0x000D54, 0x000D63],
+ [0x000D66, 0x000D7F],
+ [0x000D81, 0x000D83],
+ [0x000D85, 0x000D96],
+ [0x000D9A, 0x000DB1],
+ [0x000DB3, 0x000DBB],
+ [0x000DC0, 0x000DC6],
+ [0x000DCF, 0x000DD4],
+ [0x000DD8, 0x000DDF],
+ [0x000DE6, 0x000DEF],
+ [0x000DF2, 0x000DF4],
+ [0x000E01, 0x000E3A],
+ [0x000E3F, 0x000E5B],
+ [0x000E81, 0x000E82],
+ [0x000E86, 0x000E8A],
+ [0x000E8C, 0x000EA3],
+ [0x000EA7, 0x000EBD],
+ [0x000EC0, 0x000EC4],
+ [0x000EC8, 0x000ECE],
+ [0x000ED0, 0x000ED9],
+ [0x000EDC, 0x000EDF],
+ [0x000F00, 0x000F47],
+ [0x000F49, 0x000F6C],
+ [0x000F71, 0x000F97],
+ [0x000F99, 0x000FBC],
+ [0x000FBE, 0x000FCC],
+ [0x000FCE, 0x000FDA],
+ [0x001000, 0x0010C5],
+ [0x0010D0, 0x001248],
+ [0x00124A, 0x00124D],
+ [0x001250, 0x001256],
+ [0x00125A, 0x00125D],
+ [0x001260, 0x001288],
+ [0x00128A, 0x00128D],
+ [0x001290, 0x0012B0],
+ [0x0012B2, 0x0012B5],
+ [0x0012B8, 0x0012BE],
+ [0x0012C2, 0x0012C5],
+ [0x0012C8, 0x0012D6],
+ [0x0012D8, 0x001310],
+ [0x001312, 0x001315],
+ [0x001318, 0x00135A],
+ [0x00135D, 0x00137C],
+ [0x001380, 0x001399],
+ [0x0013A0, 0x0013F5],
+ [0x0013F8, 0x0013FD],
+ [0x001400, 0x00169C],
+ [0x0016A0, 0x0016F8],
+ [0x001700, 0x001715],
+ [0x00171F, 0x001736],
+ [0x001740, 0x001753],
+ [0x001760, 0x00176C],
+ [0x00176E, 0x001770],
+ [0x001772, 0x001773],
+ [0x001780, 0x0017DD],
+ [0x0017E0, 0x0017E9],
+ [0x0017F0, 0x0017F9],
+ [0x001800, 0x001819],
+ [0x001820, 0x001878],
+ [0x001880, 0x0018AA],
+ [0x0018B0, 0x0018F5],
+ [0x001900, 0x00191E],
+ [0x001920, 0x00192B],
+ [0x001930, 0x00193B],
+ [0x001944, 0x00196D],
+ [0x001970, 0x001974],
+ [0x001980, 0x0019AB],
+ [0x0019B0, 0x0019C9],
+ [0x0019D0, 0x0019DA],
+ [0x0019DE, 0x001A1B],
+ [0x001A1E, 0x001A5E],
+ [0x001A60, 0x001A7C],
+ [0x001A7F, 0x001A89],
+ [0x001A90, 0x001A99],
+ [0x001AA0, 0x001AAD],
+ [0x001AB0, 0x001ACE],
+ [0x001B00, 0x001B4C],
+ [0x001B50, 0x001B7E],
+ [0x001B80, 0x001BF3],
+ [0x001BFC, 0x001C37],
+ [0x001C3B, 0x001C49],
+ [0x001C4D, 0x001C88],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CC7],
+ [0x001CD0, 0x001CFA],
+ [0x001D00, 0x001F15],
+ [0x001F18, 0x001F1D],
+ [0x001F20, 0x001F45],
+ [0x001F48, 0x001F4D],
+ [0x001F50, 0x001F57],
+ [0x001F5F, 0x001F7D],
+ [0x001F80, 0x001FB4],
+ [0x001FB6, 0x001FC4],
+ [0x001FC6, 0x001FD3],
+ [0x001FD6, 0x001FDB],
+ [0x001FDD, 0x001FEF],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FFE],
+ [0x002000, 0x002064],
+ [0x002066, 0x002071],
+ [0x002074, 0x00208E],
+ [0x002090, 0x00209C],
+ [0x0020A0, 0x0020C0],
+ [0x0020D0, 0x0020F0],
+ [0x002100, 0x00218B],
+ [0x002190, 0x002426],
+ [0x002440, 0x00244A],
+ [0x002460, 0x002B73],
+ [0x002B76, 0x002B95],
+ [0x002B97, 0x002CF3],
+ [0x002CF9, 0x002D25],
+ [0x002D30, 0x002D67],
+ [0x002D6F, 0x002D70],
+ [0x002D7F, 0x002D96],
+ [0x002DA0, 0x002DA6],
+ [0x002DA8, 0x002DAE],
+ [0x002DB0, 0x002DB6],
+ [0x002DB8, 0x002DBE],
+ [0x002DC0, 0x002DC6],
+ [0x002DC8, 0x002DCE],
+ [0x002DD0, 0x002DD6],
+ [0x002DD8, 0x002DDE],
+ [0x002DE0, 0x002E5D],
+ [0x002E80, 0x002E99],
+ [0x002E9B, 0x002EF3],
+ [0x002F00, 0x002FD5],
+ [0x002FF0, 0x002FFB],
+ [0x003000, 0x00303F],
+ [0x003041, 0x003096],
+ [0x003099, 0x0030FF],
+ [0x003105, 0x00312F],
+ [0x003131, 0x00318E],
+ [0x003190, 0x0031E3],
+ [0x0031F0, 0x00321E],
+ [0x003220, 0x00A48C],
+ [0x00A490, 0x00A4C6],
+ [0x00A4D0, 0x00A62B],
+ [0x00A640, 0x00A6F7],
+ [0x00A700, 0x00A7CA],
+ [0x00A7D0, 0x00A7D1],
+ [0x00A7D5, 0x00A7D9],
+ [0x00A7F2, 0x00A82C],
+ [0x00A830, 0x00A839],
+ [0x00A840, 0x00A877],
+ [0x00A880, 0x00A8C5],
+ [0x00A8CE, 0x00A8D9],
+ [0x00A8E0, 0x00A953],
+ [0x00A95F, 0x00A97C],
+ [0x00A980, 0x00A9CD],
+ [0x00A9CF, 0x00A9D9],
+ [0x00A9DE, 0x00A9FE],
+ [0x00AA00, 0x00AA36],
+ [0x00AA40, 0x00AA4D],
+ [0x00AA50, 0x00AA59],
+ [0x00AA5C, 0x00AAC2],
+ [0x00AADB, 0x00AAF6],
+ [0x00AB01, 0x00AB06],
+ [0x00AB09, 0x00AB0E],
+ [0x00AB11, 0x00AB16],
+ [0x00AB20, 0x00AB26],
+ [0x00AB28, 0x00AB2E],
+ [0x00AB30, 0x00AB6B],
+ [0x00AB70, 0x00ABED],
+ [0x00ABF0, 0x00ABF9],
+ [0x00AC00, 0x00D7A3],
+ [0x00D7B0, 0x00D7C6],
+ [0x00D7CB, 0x00D7FB],
+ [0x00D800, 0x00DBFF],
+ [0x00E000, 0x00FA6D],
+ [0x00FA70, 0x00FAD9],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FB1D, 0x00FB36],
+ [0x00FB38, 0x00FB3C],
+ [0x00FB40, 0x00FB41],
+ [0x00FB43, 0x00FB44],
+ [0x00FB46, 0x00FBC2],
+ [0x00FBD3, 0x00FD8F],
+ [0x00FD92, 0x00FDC7],
+ [0x00FDF0, 0x00FE19],
+ [0x00FE20, 0x00FE52],
+ [0x00FE54, 0x00FE66],
+ [0x00FE68, 0x00FE6B],
+ [0x00FE70, 0x00FE74],
+ [0x00FE76, 0x00FEFC],
+ [0x00FF01, 0x00FFBE],
+ [0x00FFC2, 0x00FFC7],
+ [0x00FFCA, 0x00FFCF],
+ [0x00FFD2, 0x00FFD7],
+ [0x00FFDA, 0x00FFDC],
+ [0x00FFE0, 0x00FFE6],
+ [0x00FFE8, 0x00FFEE],
+ [0x00FFF9, 0x00FFFD],
+ [0x010000, 0x01000B],
+ [0x01000D, 0x010026],
+ [0x010028, 0x01003A],
+ [0x01003C, 0x01003D],
+ [0x01003F, 0x01004D],
+ [0x010050, 0x01005D],
+ [0x010080, 0x0100FA],
+ [0x010100, 0x010102],
+ [0x010107, 0x010133],
+ [0x010137, 0x01018E],
+ [0x010190, 0x01019C],
+ [0x0101D0, 0x0101FD],
+ [0x010280, 0x01029C],
+ [0x0102A0, 0x0102D0],
+ [0x0102E0, 0x0102FB],
+ [0x010300, 0x010323],
+ [0x01032D, 0x01034A],
+ [0x010350, 0x01037A],
+ [0x010380, 0x01039D],
+ [0x01039F, 0x0103C3],
+ [0x0103C8, 0x0103D5],
+ [0x010400, 0x01049D],
+ [0x0104A0, 0x0104A9],
+ [0x0104B0, 0x0104D3],
+ [0x0104D8, 0x0104FB],
+ [0x010500, 0x010527],
+ [0x010530, 0x010563],
+ [0x01056F, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC],
+ [0x010600, 0x010736],
+ [0x010740, 0x010755],
+ [0x010760, 0x010767],
+ [0x010780, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x010800, 0x010805],
+ [0x01080A, 0x010835],
+ [0x010837, 0x010838],
+ [0x01083F, 0x010855],
+ [0x010857, 0x01089E],
+ [0x0108A7, 0x0108AF],
+ [0x0108E0, 0x0108F2],
+ [0x0108F4, 0x0108F5],
+ [0x0108FB, 0x01091B],
+ [0x01091F, 0x010939],
+ [0x010980, 0x0109B7],
+ [0x0109BC, 0x0109CF],
+ [0x0109D2, 0x010A03],
+ [0x010A05, 0x010A06],
+ [0x010A0C, 0x010A13],
+ [0x010A15, 0x010A17],
+ [0x010A19, 0x010A35],
+ [0x010A38, 0x010A3A],
+ [0x010A3F, 0x010A48],
+ [0x010A50, 0x010A58],
+ [0x010A60, 0x010A9F],
+ [0x010AC0, 0x010AE6],
+ [0x010AEB, 0x010AF6],
+ [0x010B00, 0x010B35],
+ [0x010B39, 0x010B55],
+ [0x010B58, 0x010B72],
+ [0x010B78, 0x010B91],
+ [0x010B99, 0x010B9C],
+ [0x010BA9, 0x010BAF],
+ [0x010C00, 0x010C48],
+ [0x010C80, 0x010CB2],
+ [0x010CC0, 0x010CF2],
+ [0x010CFA, 0x010D27],
+ [0x010D30, 0x010D39],
+ [0x010E60, 0x010E7E],
+ [0x010E80, 0x010EA9],
+ [0x010EAB, 0x010EAD],
+ [0x010EB0, 0x010EB1],
+ [0x010EFD, 0x010F27],
+ [0x010F30, 0x010F59],
+ [0x010F70, 0x010F89],
+ [0x010FB0, 0x010FCB],
+ [0x010FE0, 0x010FF6],
+ [0x011000, 0x01104D],
+ [0x011052, 0x011075],
+ [0x01107F, 0x0110C2],
+ [0x0110D0, 0x0110E8],
+ [0x0110F0, 0x0110F9],
+ [0x011100, 0x011134],
+ [0x011136, 0x011147],
+ [0x011150, 0x011176],
+ [0x011180, 0x0111DF],
+ [0x0111E1, 0x0111F4],
+ [0x011200, 0x011211],
+ [0x011213, 0x011241],
+ [0x011280, 0x011286],
+ [0x01128A, 0x01128D],
+ [0x01128F, 0x01129D],
+ [0x01129F, 0x0112A9],
+ [0x0112B0, 0x0112EA],
+ [0x0112F0, 0x0112F9],
+ [0x011300, 0x011303],
+ [0x011305, 0x01130C],
+ [0x01130F, 0x011310],
+ [0x011313, 0x011328],
+ [0x01132A, 0x011330],
+ [0x011332, 0x011333],
+ [0x011335, 0x011339],
+ [0x01133B, 0x011344],
+ [0x011347, 0x011348],
+ [0x01134B, 0x01134D],
+ [0x01135D, 0x011363],
+ [0x011366, 0x01136C],
+ [0x011370, 0x011374],
+ [0x011400, 0x01145B],
+ [0x01145D, 0x011461],
+ [0x011480, 0x0114C7],
+ [0x0114D0, 0x0114D9],
+ [0x011580, 0x0115B5],
+ [0x0115B8, 0x0115DD],
+ [0x011600, 0x011644],
+ [0x011650, 0x011659],
+ [0x011660, 0x01166C],
+ [0x011680, 0x0116B9],
+ [0x0116C0, 0x0116C9],
+ [0x011700, 0x01171A],
+ [0x01171D, 0x01172B],
+ [0x011730, 0x011746],
+ [0x011800, 0x01183B],
+ [0x0118A0, 0x0118F2],
+ [0x0118FF, 0x011906],
+ [0x01190C, 0x011913],
+ [0x011915, 0x011916],
+ [0x011918, 0x011935],
+ [0x011937, 0x011938],
+ [0x01193B, 0x011946],
+ [0x011950, 0x011959],
+ [0x0119A0, 0x0119A7],
+ [0x0119AA, 0x0119D7],
+ [0x0119DA, 0x0119E4],
+ [0x011A00, 0x011A47],
+ [0x011A50, 0x011AA2],
+ [0x011AB0, 0x011AF8],
+ [0x011B00, 0x011B09],
+ [0x011C00, 0x011C08],
+ [0x011C0A, 0x011C36],
+ [0x011C38, 0x011C45],
+ [0x011C50, 0x011C6C],
+ [0x011C70, 0x011C8F],
+ [0x011C92, 0x011CA7],
+ [0x011CA9, 0x011CB6],
+ [0x011D00, 0x011D06],
+ [0x011D08, 0x011D09],
+ [0x011D0B, 0x011D36],
+ [0x011D3C, 0x011D3D],
+ [0x011D3F, 0x011D47],
+ [0x011D50, 0x011D59],
+ [0x011D60, 0x011D65],
+ [0x011D67, 0x011D68],
+ [0x011D6A, 0x011D8E],
+ [0x011D90, 0x011D91],
+ [0x011D93, 0x011D98],
+ [0x011DA0, 0x011DA9],
+ [0x011EE0, 0x011EF8],
+ [0x011F00, 0x011F10],
+ [0x011F12, 0x011F3A],
+ [0x011F3E, 0x011F59],
+ [0x011FC0, 0x011FF1],
+ [0x011FFF, 0x012399],
+ [0x012400, 0x01246E],
+ [0x012470, 0x012474],
+ [0x012480, 0x012543],
+ [0x012F90, 0x012FF2],
+ [0x013000, 0x013455],
+ [0x014400, 0x014646],
+ [0x016800, 0x016A38],
+ [0x016A40, 0x016A5E],
+ [0x016A60, 0x016A69],
+ [0x016A6E, 0x016ABE],
+ [0x016AC0, 0x016AC9],
+ [0x016AD0, 0x016AED],
+ [0x016AF0, 0x016AF5],
+ [0x016B00, 0x016B45],
+ [0x016B50, 0x016B59],
+ [0x016B5B, 0x016B61],
+ [0x016B63, 0x016B77],
+ [0x016B7D, 0x016B8F],
+ [0x016E40, 0x016E9A],
+ [0x016F00, 0x016F4A],
+ [0x016F4F, 0x016F87],
+ [0x016F8F, 0x016F9F],
+ [0x016FE0, 0x016FE4],
+ [0x016FF0, 0x016FF1],
+ [0x017000, 0x0187F7],
+ [0x018800, 0x018CD5],
+ [0x018D00, 0x018D08],
+ [0x01AFF0, 0x01AFF3],
+ [0x01AFF5, 0x01AFFB],
+ [0x01AFFD, 0x01AFFE],
+ [0x01B000, 0x01B122],
+ [0x01B150, 0x01B152],
+ [0x01B164, 0x01B167],
+ [0x01B170, 0x01B2FB],
+ [0x01BC00, 0x01BC6A],
+ [0x01BC70, 0x01BC7C],
+ [0x01BC80, 0x01BC88],
+ [0x01BC90, 0x01BC99],
+ [0x01BC9C, 0x01BCA3],
+ [0x01CF00, 0x01CF2D],
+ [0x01CF30, 0x01CF46],
+ [0x01CF50, 0x01CFC3],
+ [0x01D000, 0x01D0F5],
+ [0x01D100, 0x01D126],
+ [0x01D129, 0x01D1EA],
+ [0x01D200, 0x01D245],
+ [0x01D2C0, 0x01D2D3],
+ [0x01D2E0, 0x01D2F3],
+ [0x01D300, 0x01D356],
+ [0x01D360, 0x01D378],
+ [0x01D400, 0x01D454],
+ [0x01D456, 0x01D49C],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D51E, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D552, 0x01D6A5],
+ [0x01D6A8, 0x01D7CB],
+ [0x01D7CE, 0x01DA8B],
+ [0x01DA9B, 0x01DA9F],
+ [0x01DAA1, 0x01DAAF],
+ [0x01DF00, 0x01DF1E],
+ [0x01DF25, 0x01DF2A],
+ [0x01E000, 0x01E006],
+ [0x01E008, 0x01E018],
+ [0x01E01B, 0x01E021],
+ [0x01E023, 0x01E024],
+ [0x01E026, 0x01E02A],
+ [0x01E030, 0x01E06D],
+ [0x01E100, 0x01E12C],
+ [0x01E130, 0x01E13D],
+ [0x01E140, 0x01E149],
+ [0x01E14E, 0x01E14F],
+ [0x01E290, 0x01E2AE],
+ [0x01E2C0, 0x01E2F9],
+ [0x01E4D0, 0x01E4F9],
+ [0x01E7E0, 0x01E7E6],
+ [0x01E7E8, 0x01E7EB],
+ [0x01E7ED, 0x01E7EE],
+ [0x01E7F0, 0x01E7FE],
+ [0x01E800, 0x01E8C4],
+ [0x01E8C7, 0x01E8D6],
+ [0x01E900, 0x01E94B],
+ [0x01E950, 0x01E959],
+ [0x01E95E, 0x01E95F],
+ [0x01EC71, 0x01ECB4],
+ [0x01ED01, 0x01ED3D],
+ [0x01EE00, 0x01EE03],
+ [0x01EE05, 0x01EE1F],
+ [0x01EE21, 0x01EE22],
+ [0x01EE29, 0x01EE32],
+ [0x01EE34, 0x01EE37],
+ [0x01EE4D, 0x01EE4F],
+ [0x01EE51, 0x01EE52],
+ [0x01EE61, 0x01EE62],
+ [0x01EE67, 0x01EE6A],
+ [0x01EE6C, 0x01EE72],
+ [0x01EE74, 0x01EE77],
+ [0x01EE79, 0x01EE7C],
+ [0x01EE80, 0x01EE89],
+ [0x01EE8B, 0x01EE9B],
+ [0x01EEA1, 0x01EEA3],
+ [0x01EEA5, 0x01EEA9],
+ [0x01EEAB, 0x01EEBB],
+ [0x01EEF0, 0x01EEF1],
+ [0x01F000, 0x01F02B],
+ [0x01F030, 0x01F093],
+ [0x01F0A0, 0x01F0AE],
+ [0x01F0B1, 0x01F0BF],
+ [0x01F0C1, 0x01F0CF],
+ [0x01F0D1, 0x01F0F5],
+ [0x01F100, 0x01F1AD],
+ [0x01F1E6, 0x01F202],
+ [0x01F210, 0x01F23B],
+ [0x01F240, 0x01F248],
+ [0x01F250, 0x01F251],
+ [0x01F260, 0x01F265],
+ [0x01F300, 0x01F6D7],
+ [0x01F6DC, 0x01F6EC],
+ [0x01F6F0, 0x01F6FC],
+ [0x01F700, 0x01F776],
+ [0x01F77B, 0x01F7D9],
+ [0x01F7E0, 0x01F7EB],
+ [0x01F800, 0x01F80B],
+ [0x01F810, 0x01F847],
+ [0x01F850, 0x01F859],
+ [0x01F860, 0x01F887],
+ [0x01F890, 0x01F8AD],
+ [0x01F8B0, 0x01F8B1],
+ [0x01F900, 0x01FA53],
+ [0x01FA60, 0x01FA6D],
+ [0x01FA70, 0x01FA7C],
+ [0x01FA80, 0x01FA88],
+ [0x01FA90, 0x01FABD],
+ [0x01FABF, 0x01FAC5],
+ [0x01FACE, 0x01FADB],
+ [0x01FAE0, 0x01FAE8],
+ [0x01FAF0, 0x01FAF8],
+ [0x01FB00, 0x01FB92],
+ [0x01FB94, 0x01FBCA],
+ [0x01FBF0, 0x01FBF9],
+ [0x020000, 0x02A6DF],
+ [0x02A700, 0x02B739],
+ [0x02B740, 0x02B81D],
+ [0x02B820, 0x02CEA1],
+ [0x02CEB0, 0x02EBE0],
+ [0x02F800, 0x02FA1D],
+ [0x030000, 0x03134A],
+ [0x031350, 0x0323AF],
+ [0x0E0020, 0x0E007F],
+ [0x0E0100, 0x0E01EF],
+ [0x0F0000, 0x0FFFFD],
+ [0x100000, 0x10FFFD]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Unassigned}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Unassigned}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Cn}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Cn}"
+);
+testPropertyEscapes(
+ /^\P{gc=Unassigned}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Unassigned}"
+);
+testPropertyEscapes(
+ /^\P{gc=Cn}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Cn}"
+);
+testPropertyEscapes(
+ /^\P{Unassigned}+$/u,
+ nonMatchSymbols,
+ "\\P{Unassigned}"
+);
+testPropertyEscapes(
+ /^\P{Cn}+$/u,
+ nonMatchSymbols,
+ "\\P{Cn}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Uppercase_Letter.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Uppercase_Letter.js
new file mode 100644
index 0000000000..d3204204e4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/General_Category_-_Uppercase_Letter.js
@@ -0,0 +1,1385 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `General_Category=Uppercase_Letter`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000100,
+ 0x000102,
+ 0x000104,
+ 0x000106,
+ 0x000108,
+ 0x00010A,
+ 0x00010C,
+ 0x00010E,
+ 0x000110,
+ 0x000112,
+ 0x000114,
+ 0x000116,
+ 0x000118,
+ 0x00011A,
+ 0x00011C,
+ 0x00011E,
+ 0x000120,
+ 0x000122,
+ 0x000124,
+ 0x000126,
+ 0x000128,
+ 0x00012A,
+ 0x00012C,
+ 0x00012E,
+ 0x000130,
+ 0x000132,
+ 0x000134,
+ 0x000136,
+ 0x000139,
+ 0x00013B,
+ 0x00013D,
+ 0x00013F,
+ 0x000141,
+ 0x000143,
+ 0x000145,
+ 0x000147,
+ 0x00014A,
+ 0x00014C,
+ 0x00014E,
+ 0x000150,
+ 0x000152,
+ 0x000154,
+ 0x000156,
+ 0x000158,
+ 0x00015A,
+ 0x00015C,
+ 0x00015E,
+ 0x000160,
+ 0x000162,
+ 0x000164,
+ 0x000166,
+ 0x000168,
+ 0x00016A,
+ 0x00016C,
+ 0x00016E,
+ 0x000170,
+ 0x000172,
+ 0x000174,
+ 0x000176,
+ 0x00017B,
+ 0x00017D,
+ 0x000184,
+ 0x0001A2,
+ 0x0001A4,
+ 0x0001A9,
+ 0x0001AC,
+ 0x0001B5,
+ 0x0001BC,
+ 0x0001C4,
+ 0x0001C7,
+ 0x0001CA,
+ 0x0001CD,
+ 0x0001CF,
+ 0x0001D1,
+ 0x0001D3,
+ 0x0001D5,
+ 0x0001D7,
+ 0x0001D9,
+ 0x0001DB,
+ 0x0001DE,
+ 0x0001E0,
+ 0x0001E2,
+ 0x0001E4,
+ 0x0001E6,
+ 0x0001E8,
+ 0x0001EA,
+ 0x0001EC,
+ 0x0001EE,
+ 0x0001F1,
+ 0x0001F4,
+ 0x0001FA,
+ 0x0001FC,
+ 0x0001FE,
+ 0x000200,
+ 0x000202,
+ 0x000204,
+ 0x000206,
+ 0x000208,
+ 0x00020A,
+ 0x00020C,
+ 0x00020E,
+ 0x000210,
+ 0x000212,
+ 0x000214,
+ 0x000216,
+ 0x000218,
+ 0x00021A,
+ 0x00021C,
+ 0x00021E,
+ 0x000220,
+ 0x000222,
+ 0x000224,
+ 0x000226,
+ 0x000228,
+ 0x00022A,
+ 0x00022C,
+ 0x00022E,
+ 0x000230,
+ 0x000232,
+ 0x000241,
+ 0x000248,
+ 0x00024A,
+ 0x00024C,
+ 0x00024E,
+ 0x000370,
+ 0x000372,
+ 0x000376,
+ 0x00037F,
+ 0x000386,
+ 0x00038C,
+ 0x0003CF,
+ 0x0003D8,
+ 0x0003DA,
+ 0x0003DC,
+ 0x0003DE,
+ 0x0003E0,
+ 0x0003E2,
+ 0x0003E4,
+ 0x0003E6,
+ 0x0003E8,
+ 0x0003EA,
+ 0x0003EC,
+ 0x0003EE,
+ 0x0003F4,
+ 0x0003F7,
+ 0x000460,
+ 0x000462,
+ 0x000464,
+ 0x000466,
+ 0x000468,
+ 0x00046A,
+ 0x00046C,
+ 0x00046E,
+ 0x000470,
+ 0x000472,
+ 0x000474,
+ 0x000476,
+ 0x000478,
+ 0x00047A,
+ 0x00047C,
+ 0x00047E,
+ 0x000480,
+ 0x00048A,
+ 0x00048C,
+ 0x00048E,
+ 0x000490,
+ 0x000492,
+ 0x000494,
+ 0x000496,
+ 0x000498,
+ 0x00049A,
+ 0x00049C,
+ 0x00049E,
+ 0x0004A0,
+ 0x0004A2,
+ 0x0004A4,
+ 0x0004A6,
+ 0x0004A8,
+ 0x0004AA,
+ 0x0004AC,
+ 0x0004AE,
+ 0x0004B0,
+ 0x0004B2,
+ 0x0004B4,
+ 0x0004B6,
+ 0x0004B8,
+ 0x0004BA,
+ 0x0004BC,
+ 0x0004BE,
+ 0x0004C3,
+ 0x0004C5,
+ 0x0004C7,
+ 0x0004C9,
+ 0x0004CB,
+ 0x0004CD,
+ 0x0004D0,
+ 0x0004D2,
+ 0x0004D4,
+ 0x0004D6,
+ 0x0004D8,
+ 0x0004DA,
+ 0x0004DC,
+ 0x0004DE,
+ 0x0004E0,
+ 0x0004E2,
+ 0x0004E4,
+ 0x0004E6,
+ 0x0004E8,
+ 0x0004EA,
+ 0x0004EC,
+ 0x0004EE,
+ 0x0004F0,
+ 0x0004F2,
+ 0x0004F4,
+ 0x0004F6,
+ 0x0004F8,
+ 0x0004FA,
+ 0x0004FC,
+ 0x0004FE,
+ 0x000500,
+ 0x000502,
+ 0x000504,
+ 0x000506,
+ 0x000508,
+ 0x00050A,
+ 0x00050C,
+ 0x00050E,
+ 0x000510,
+ 0x000512,
+ 0x000514,
+ 0x000516,
+ 0x000518,
+ 0x00051A,
+ 0x00051C,
+ 0x00051E,
+ 0x000520,
+ 0x000522,
+ 0x000524,
+ 0x000526,
+ 0x000528,
+ 0x00052A,
+ 0x00052C,
+ 0x00052E,
+ 0x0010C7,
+ 0x0010CD,
+ 0x001E00,
+ 0x001E02,
+ 0x001E04,
+ 0x001E06,
+ 0x001E08,
+ 0x001E0A,
+ 0x001E0C,
+ 0x001E0E,
+ 0x001E10,
+ 0x001E12,
+ 0x001E14,
+ 0x001E16,
+ 0x001E18,
+ 0x001E1A,
+ 0x001E1C,
+ 0x001E1E,
+ 0x001E20,
+ 0x001E22,
+ 0x001E24,
+ 0x001E26,
+ 0x001E28,
+ 0x001E2A,
+ 0x001E2C,
+ 0x001E2E,
+ 0x001E30,
+ 0x001E32,
+ 0x001E34,
+ 0x001E36,
+ 0x001E38,
+ 0x001E3A,
+ 0x001E3C,
+ 0x001E3E,
+ 0x001E40,
+ 0x001E42,
+ 0x001E44,
+ 0x001E46,
+ 0x001E48,
+ 0x001E4A,
+ 0x001E4C,
+ 0x001E4E,
+ 0x001E50,
+ 0x001E52,
+ 0x001E54,
+ 0x001E56,
+ 0x001E58,
+ 0x001E5A,
+ 0x001E5C,
+ 0x001E5E,
+ 0x001E60,
+ 0x001E62,
+ 0x001E64,
+ 0x001E66,
+ 0x001E68,
+ 0x001E6A,
+ 0x001E6C,
+ 0x001E6E,
+ 0x001E70,
+ 0x001E72,
+ 0x001E74,
+ 0x001E76,
+ 0x001E78,
+ 0x001E7A,
+ 0x001E7C,
+ 0x001E7E,
+ 0x001E80,
+ 0x001E82,
+ 0x001E84,
+ 0x001E86,
+ 0x001E88,
+ 0x001E8A,
+ 0x001E8C,
+ 0x001E8E,
+ 0x001E90,
+ 0x001E92,
+ 0x001E94,
+ 0x001E9E,
+ 0x001EA0,
+ 0x001EA2,
+ 0x001EA4,
+ 0x001EA6,
+ 0x001EA8,
+ 0x001EAA,
+ 0x001EAC,
+ 0x001EAE,
+ 0x001EB0,
+ 0x001EB2,
+ 0x001EB4,
+ 0x001EB6,
+ 0x001EB8,
+ 0x001EBA,
+ 0x001EBC,
+ 0x001EBE,
+ 0x001EC0,
+ 0x001EC2,
+ 0x001EC4,
+ 0x001EC6,
+ 0x001EC8,
+ 0x001ECA,
+ 0x001ECC,
+ 0x001ECE,
+ 0x001ED0,
+ 0x001ED2,
+ 0x001ED4,
+ 0x001ED6,
+ 0x001ED8,
+ 0x001EDA,
+ 0x001EDC,
+ 0x001EDE,
+ 0x001EE0,
+ 0x001EE2,
+ 0x001EE4,
+ 0x001EE6,
+ 0x001EE8,
+ 0x001EEA,
+ 0x001EEC,
+ 0x001EEE,
+ 0x001EF0,
+ 0x001EF2,
+ 0x001EF4,
+ 0x001EF6,
+ 0x001EF8,
+ 0x001EFA,
+ 0x001EFC,
+ 0x001EFE,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x001F5F,
+ 0x002102,
+ 0x002107,
+ 0x002115,
+ 0x002124,
+ 0x002126,
+ 0x002128,
+ 0x002145,
+ 0x002183,
+ 0x002C60,
+ 0x002C67,
+ 0x002C69,
+ 0x002C6B,
+ 0x002C72,
+ 0x002C75,
+ 0x002C82,
+ 0x002C84,
+ 0x002C86,
+ 0x002C88,
+ 0x002C8A,
+ 0x002C8C,
+ 0x002C8E,
+ 0x002C90,
+ 0x002C92,
+ 0x002C94,
+ 0x002C96,
+ 0x002C98,
+ 0x002C9A,
+ 0x002C9C,
+ 0x002C9E,
+ 0x002CA0,
+ 0x002CA2,
+ 0x002CA4,
+ 0x002CA6,
+ 0x002CA8,
+ 0x002CAA,
+ 0x002CAC,
+ 0x002CAE,
+ 0x002CB0,
+ 0x002CB2,
+ 0x002CB4,
+ 0x002CB6,
+ 0x002CB8,
+ 0x002CBA,
+ 0x002CBC,
+ 0x002CBE,
+ 0x002CC0,
+ 0x002CC2,
+ 0x002CC4,
+ 0x002CC6,
+ 0x002CC8,
+ 0x002CCA,
+ 0x002CCC,
+ 0x002CCE,
+ 0x002CD0,
+ 0x002CD2,
+ 0x002CD4,
+ 0x002CD6,
+ 0x002CD8,
+ 0x002CDA,
+ 0x002CDC,
+ 0x002CDE,
+ 0x002CE0,
+ 0x002CE2,
+ 0x002CEB,
+ 0x002CED,
+ 0x002CF2,
+ 0x00A640,
+ 0x00A642,
+ 0x00A644,
+ 0x00A646,
+ 0x00A648,
+ 0x00A64A,
+ 0x00A64C,
+ 0x00A64E,
+ 0x00A650,
+ 0x00A652,
+ 0x00A654,
+ 0x00A656,
+ 0x00A658,
+ 0x00A65A,
+ 0x00A65C,
+ 0x00A65E,
+ 0x00A660,
+ 0x00A662,
+ 0x00A664,
+ 0x00A666,
+ 0x00A668,
+ 0x00A66A,
+ 0x00A66C,
+ 0x00A680,
+ 0x00A682,
+ 0x00A684,
+ 0x00A686,
+ 0x00A688,
+ 0x00A68A,
+ 0x00A68C,
+ 0x00A68E,
+ 0x00A690,
+ 0x00A692,
+ 0x00A694,
+ 0x00A696,
+ 0x00A698,
+ 0x00A69A,
+ 0x00A722,
+ 0x00A724,
+ 0x00A726,
+ 0x00A728,
+ 0x00A72A,
+ 0x00A72C,
+ 0x00A72E,
+ 0x00A732,
+ 0x00A734,
+ 0x00A736,
+ 0x00A738,
+ 0x00A73A,
+ 0x00A73C,
+ 0x00A73E,
+ 0x00A740,
+ 0x00A742,
+ 0x00A744,
+ 0x00A746,
+ 0x00A748,
+ 0x00A74A,
+ 0x00A74C,
+ 0x00A74E,
+ 0x00A750,
+ 0x00A752,
+ 0x00A754,
+ 0x00A756,
+ 0x00A758,
+ 0x00A75A,
+ 0x00A75C,
+ 0x00A75E,
+ 0x00A760,
+ 0x00A762,
+ 0x00A764,
+ 0x00A766,
+ 0x00A768,
+ 0x00A76A,
+ 0x00A76C,
+ 0x00A76E,
+ 0x00A779,
+ 0x00A77B,
+ 0x00A780,
+ 0x00A782,
+ 0x00A784,
+ 0x00A786,
+ 0x00A78B,
+ 0x00A78D,
+ 0x00A790,
+ 0x00A792,
+ 0x00A796,
+ 0x00A798,
+ 0x00A79A,
+ 0x00A79C,
+ 0x00A79E,
+ 0x00A7A0,
+ 0x00A7A2,
+ 0x00A7A4,
+ 0x00A7A6,
+ 0x00A7A8,
+ 0x00A7B6,
+ 0x00A7B8,
+ 0x00A7BA,
+ 0x00A7BC,
+ 0x00A7BE,
+ 0x00A7C0,
+ 0x00A7C2,
+ 0x00A7C9,
+ 0x00A7D0,
+ 0x00A7D6,
+ 0x00A7D8,
+ 0x00A7F5,
+ 0x01D49C,
+ 0x01D4A2,
+ 0x01D546,
+ 0x01D7CA
+ ],
+ ranges: [
+ [0x000041, 0x00005A],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000DE],
+ [0x000178, 0x000179],
+ [0x000181, 0x000182],
+ [0x000186, 0x000187],
+ [0x000189, 0x00018B],
+ [0x00018E, 0x000191],
+ [0x000193, 0x000194],
+ [0x000196, 0x000198],
+ [0x00019C, 0x00019D],
+ [0x00019F, 0x0001A0],
+ [0x0001A6, 0x0001A7],
+ [0x0001AE, 0x0001AF],
+ [0x0001B1, 0x0001B3],
+ [0x0001B7, 0x0001B8],
+ [0x0001F6, 0x0001F8],
+ [0x00023A, 0x00023B],
+ [0x00023D, 0x00023E],
+ [0x000243, 0x000246],
+ [0x000388, 0x00038A],
+ [0x00038E, 0x00038F],
+ [0x000391, 0x0003A1],
+ [0x0003A3, 0x0003AB],
+ [0x0003D2, 0x0003D4],
+ [0x0003F9, 0x0003FA],
+ [0x0003FD, 0x00042F],
+ [0x0004C0, 0x0004C1],
+ [0x000531, 0x000556],
+ [0x0010A0, 0x0010C5],
+ [0x0013A0, 0x0013F5],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CBF],
+ [0x001F08, 0x001F0F],
+ [0x001F18, 0x001F1D],
+ [0x001F28, 0x001F2F],
+ [0x001F38, 0x001F3F],
+ [0x001F48, 0x001F4D],
+ [0x001F68, 0x001F6F],
+ [0x001FB8, 0x001FBB],
+ [0x001FC8, 0x001FCB],
+ [0x001FD8, 0x001FDB],
+ [0x001FE8, 0x001FEC],
+ [0x001FF8, 0x001FFB],
+ [0x00210B, 0x00210D],
+ [0x002110, 0x002112],
+ [0x002119, 0x00211D],
+ [0x00212A, 0x00212D],
+ [0x002130, 0x002133],
+ [0x00213E, 0x00213F],
+ [0x002C00, 0x002C2F],
+ [0x002C62, 0x002C64],
+ [0x002C6D, 0x002C70],
+ [0x002C7E, 0x002C80],
+ [0x00A77D, 0x00A77E],
+ [0x00A7AA, 0x00A7AE],
+ [0x00A7B0, 0x00A7B4],
+ [0x00A7C4, 0x00A7C7],
+ [0x00FF21, 0x00FF3A],
+ [0x010400, 0x010427],
+ [0x0104B0, 0x0104D3],
+ [0x010570, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010C80, 0x010CB2],
+ [0x0118A0, 0x0118BF],
+ [0x016E40, 0x016E5F],
+ [0x01D400, 0x01D419],
+ [0x01D434, 0x01D44D],
+ [0x01D468, 0x01D481],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B5],
+ [0x01D4D0, 0x01D4E9],
+ [0x01D504, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D538, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D56C, 0x01D585],
+ [0x01D5A0, 0x01D5B9],
+ [0x01D5D4, 0x01D5ED],
+ [0x01D608, 0x01D621],
+ [0x01D63C, 0x01D655],
+ [0x01D670, 0x01D689],
+ [0x01D6A8, 0x01D6C0],
+ [0x01D6E2, 0x01D6FA],
+ [0x01D71C, 0x01D734],
+ [0x01D756, 0x01D76E],
+ [0x01D790, 0x01D7A8],
+ [0x01E900, 0x01E921]
+ ]
+});
+testPropertyEscapes(
+ /^\p{General_Category=Uppercase_Letter}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Uppercase_Letter}"
+);
+testPropertyEscapes(
+ /^\p{General_Category=Lu}+$/u,
+ matchSymbols,
+ "\\p{General_Category=Lu}"
+);
+testPropertyEscapes(
+ /^\p{gc=Uppercase_Letter}+$/u,
+ matchSymbols,
+ "\\p{gc=Uppercase_Letter}"
+);
+testPropertyEscapes(
+ /^\p{gc=Lu}+$/u,
+ matchSymbols,
+ "\\p{gc=Lu}"
+);
+testPropertyEscapes(
+ /^\p{Uppercase_Letter}+$/u,
+ matchSymbols,
+ "\\p{Uppercase_Letter}"
+);
+testPropertyEscapes(
+ /^\p{Lu}+$/u,
+ matchSymbols,
+ "\\p{Lu}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000D7,
+ 0x000101,
+ 0x000103,
+ 0x000105,
+ 0x000107,
+ 0x000109,
+ 0x00010B,
+ 0x00010D,
+ 0x00010F,
+ 0x000111,
+ 0x000113,
+ 0x000115,
+ 0x000117,
+ 0x000119,
+ 0x00011B,
+ 0x00011D,
+ 0x00011F,
+ 0x000121,
+ 0x000123,
+ 0x000125,
+ 0x000127,
+ 0x000129,
+ 0x00012B,
+ 0x00012D,
+ 0x00012F,
+ 0x000131,
+ 0x000133,
+ 0x000135,
+ 0x00013A,
+ 0x00013C,
+ 0x00013E,
+ 0x000140,
+ 0x000142,
+ 0x000144,
+ 0x000146,
+ 0x00014B,
+ 0x00014D,
+ 0x00014F,
+ 0x000151,
+ 0x000153,
+ 0x000155,
+ 0x000157,
+ 0x000159,
+ 0x00015B,
+ 0x00015D,
+ 0x00015F,
+ 0x000161,
+ 0x000163,
+ 0x000165,
+ 0x000167,
+ 0x000169,
+ 0x00016B,
+ 0x00016D,
+ 0x00016F,
+ 0x000171,
+ 0x000173,
+ 0x000175,
+ 0x000177,
+ 0x00017A,
+ 0x00017C,
+ 0x000183,
+ 0x000185,
+ 0x000188,
+ 0x000192,
+ 0x000195,
+ 0x00019E,
+ 0x0001A1,
+ 0x0001A3,
+ 0x0001A5,
+ 0x0001A8,
+ 0x0001AD,
+ 0x0001B0,
+ 0x0001B4,
+ 0x0001B6,
+ 0x0001CE,
+ 0x0001D0,
+ 0x0001D2,
+ 0x0001D4,
+ 0x0001D6,
+ 0x0001D8,
+ 0x0001DA,
+ 0x0001DF,
+ 0x0001E1,
+ 0x0001E3,
+ 0x0001E5,
+ 0x0001E7,
+ 0x0001E9,
+ 0x0001EB,
+ 0x0001ED,
+ 0x0001F5,
+ 0x0001F9,
+ 0x0001FB,
+ 0x0001FD,
+ 0x0001FF,
+ 0x000201,
+ 0x000203,
+ 0x000205,
+ 0x000207,
+ 0x000209,
+ 0x00020B,
+ 0x00020D,
+ 0x00020F,
+ 0x000211,
+ 0x000213,
+ 0x000215,
+ 0x000217,
+ 0x000219,
+ 0x00021B,
+ 0x00021D,
+ 0x00021F,
+ 0x000221,
+ 0x000223,
+ 0x000225,
+ 0x000227,
+ 0x000229,
+ 0x00022B,
+ 0x00022D,
+ 0x00022F,
+ 0x000231,
+ 0x00023C,
+ 0x000242,
+ 0x000247,
+ 0x000249,
+ 0x00024B,
+ 0x00024D,
+ 0x000371,
+ 0x000387,
+ 0x00038B,
+ 0x00038D,
+ 0x000390,
+ 0x0003A2,
+ 0x0003D9,
+ 0x0003DB,
+ 0x0003DD,
+ 0x0003DF,
+ 0x0003E1,
+ 0x0003E3,
+ 0x0003E5,
+ 0x0003E7,
+ 0x0003E9,
+ 0x0003EB,
+ 0x0003ED,
+ 0x0003F8,
+ 0x000461,
+ 0x000463,
+ 0x000465,
+ 0x000467,
+ 0x000469,
+ 0x00046B,
+ 0x00046D,
+ 0x00046F,
+ 0x000471,
+ 0x000473,
+ 0x000475,
+ 0x000477,
+ 0x000479,
+ 0x00047B,
+ 0x00047D,
+ 0x00047F,
+ 0x00048B,
+ 0x00048D,
+ 0x00048F,
+ 0x000491,
+ 0x000493,
+ 0x000495,
+ 0x000497,
+ 0x000499,
+ 0x00049B,
+ 0x00049D,
+ 0x00049F,
+ 0x0004A1,
+ 0x0004A3,
+ 0x0004A5,
+ 0x0004A7,
+ 0x0004A9,
+ 0x0004AB,
+ 0x0004AD,
+ 0x0004AF,
+ 0x0004B1,
+ 0x0004B3,
+ 0x0004B5,
+ 0x0004B7,
+ 0x0004B9,
+ 0x0004BB,
+ 0x0004BD,
+ 0x0004BF,
+ 0x0004C2,
+ 0x0004C4,
+ 0x0004C6,
+ 0x0004C8,
+ 0x0004CA,
+ 0x0004CC,
+ 0x0004D1,
+ 0x0004D3,
+ 0x0004D5,
+ 0x0004D7,
+ 0x0004D9,
+ 0x0004DB,
+ 0x0004DD,
+ 0x0004DF,
+ 0x0004E1,
+ 0x0004E3,
+ 0x0004E5,
+ 0x0004E7,
+ 0x0004E9,
+ 0x0004EB,
+ 0x0004ED,
+ 0x0004EF,
+ 0x0004F1,
+ 0x0004F3,
+ 0x0004F5,
+ 0x0004F7,
+ 0x0004F9,
+ 0x0004FB,
+ 0x0004FD,
+ 0x0004FF,
+ 0x000501,
+ 0x000503,
+ 0x000505,
+ 0x000507,
+ 0x000509,
+ 0x00050B,
+ 0x00050D,
+ 0x00050F,
+ 0x000511,
+ 0x000513,
+ 0x000515,
+ 0x000517,
+ 0x000519,
+ 0x00051B,
+ 0x00051D,
+ 0x00051F,
+ 0x000521,
+ 0x000523,
+ 0x000525,
+ 0x000527,
+ 0x000529,
+ 0x00052B,
+ 0x00052D,
+ 0x0010C6,
+ 0x001E01,
+ 0x001E03,
+ 0x001E05,
+ 0x001E07,
+ 0x001E09,
+ 0x001E0B,
+ 0x001E0D,
+ 0x001E0F,
+ 0x001E11,
+ 0x001E13,
+ 0x001E15,
+ 0x001E17,
+ 0x001E19,
+ 0x001E1B,
+ 0x001E1D,
+ 0x001E1F,
+ 0x001E21,
+ 0x001E23,
+ 0x001E25,
+ 0x001E27,
+ 0x001E29,
+ 0x001E2B,
+ 0x001E2D,
+ 0x001E2F,
+ 0x001E31,
+ 0x001E33,
+ 0x001E35,
+ 0x001E37,
+ 0x001E39,
+ 0x001E3B,
+ 0x001E3D,
+ 0x001E3F,
+ 0x001E41,
+ 0x001E43,
+ 0x001E45,
+ 0x001E47,
+ 0x001E49,
+ 0x001E4B,
+ 0x001E4D,
+ 0x001E4F,
+ 0x001E51,
+ 0x001E53,
+ 0x001E55,
+ 0x001E57,
+ 0x001E59,
+ 0x001E5B,
+ 0x001E5D,
+ 0x001E5F,
+ 0x001E61,
+ 0x001E63,
+ 0x001E65,
+ 0x001E67,
+ 0x001E69,
+ 0x001E6B,
+ 0x001E6D,
+ 0x001E6F,
+ 0x001E71,
+ 0x001E73,
+ 0x001E75,
+ 0x001E77,
+ 0x001E79,
+ 0x001E7B,
+ 0x001E7D,
+ 0x001E7F,
+ 0x001E81,
+ 0x001E83,
+ 0x001E85,
+ 0x001E87,
+ 0x001E89,
+ 0x001E8B,
+ 0x001E8D,
+ 0x001E8F,
+ 0x001E91,
+ 0x001E93,
+ 0x001E9F,
+ 0x001EA1,
+ 0x001EA3,
+ 0x001EA5,
+ 0x001EA7,
+ 0x001EA9,
+ 0x001EAB,
+ 0x001EAD,
+ 0x001EAF,
+ 0x001EB1,
+ 0x001EB3,
+ 0x001EB5,
+ 0x001EB7,
+ 0x001EB9,
+ 0x001EBB,
+ 0x001EBD,
+ 0x001EBF,
+ 0x001EC1,
+ 0x001EC3,
+ 0x001EC5,
+ 0x001EC7,
+ 0x001EC9,
+ 0x001ECB,
+ 0x001ECD,
+ 0x001ECF,
+ 0x001ED1,
+ 0x001ED3,
+ 0x001ED5,
+ 0x001ED7,
+ 0x001ED9,
+ 0x001EDB,
+ 0x001EDD,
+ 0x001EDF,
+ 0x001EE1,
+ 0x001EE3,
+ 0x001EE5,
+ 0x001EE7,
+ 0x001EE9,
+ 0x001EEB,
+ 0x001EED,
+ 0x001EEF,
+ 0x001EF1,
+ 0x001EF3,
+ 0x001EF5,
+ 0x001EF7,
+ 0x001EF9,
+ 0x001EFB,
+ 0x001EFD,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x002125,
+ 0x002127,
+ 0x002129,
+ 0x002C61,
+ 0x002C68,
+ 0x002C6A,
+ 0x002C6C,
+ 0x002C71,
+ 0x002C81,
+ 0x002C83,
+ 0x002C85,
+ 0x002C87,
+ 0x002C89,
+ 0x002C8B,
+ 0x002C8D,
+ 0x002C8F,
+ 0x002C91,
+ 0x002C93,
+ 0x002C95,
+ 0x002C97,
+ 0x002C99,
+ 0x002C9B,
+ 0x002C9D,
+ 0x002C9F,
+ 0x002CA1,
+ 0x002CA3,
+ 0x002CA5,
+ 0x002CA7,
+ 0x002CA9,
+ 0x002CAB,
+ 0x002CAD,
+ 0x002CAF,
+ 0x002CB1,
+ 0x002CB3,
+ 0x002CB5,
+ 0x002CB7,
+ 0x002CB9,
+ 0x002CBB,
+ 0x002CBD,
+ 0x002CBF,
+ 0x002CC1,
+ 0x002CC3,
+ 0x002CC5,
+ 0x002CC7,
+ 0x002CC9,
+ 0x002CCB,
+ 0x002CCD,
+ 0x002CCF,
+ 0x002CD1,
+ 0x002CD3,
+ 0x002CD5,
+ 0x002CD7,
+ 0x002CD9,
+ 0x002CDB,
+ 0x002CDD,
+ 0x002CDF,
+ 0x002CE1,
+ 0x002CEC,
+ 0x00A641,
+ 0x00A643,
+ 0x00A645,
+ 0x00A647,
+ 0x00A649,
+ 0x00A64B,
+ 0x00A64D,
+ 0x00A64F,
+ 0x00A651,
+ 0x00A653,
+ 0x00A655,
+ 0x00A657,
+ 0x00A659,
+ 0x00A65B,
+ 0x00A65D,
+ 0x00A65F,
+ 0x00A661,
+ 0x00A663,
+ 0x00A665,
+ 0x00A667,
+ 0x00A669,
+ 0x00A66B,
+ 0x00A681,
+ 0x00A683,
+ 0x00A685,
+ 0x00A687,
+ 0x00A689,
+ 0x00A68B,
+ 0x00A68D,
+ 0x00A68F,
+ 0x00A691,
+ 0x00A693,
+ 0x00A695,
+ 0x00A697,
+ 0x00A699,
+ 0x00A723,
+ 0x00A725,
+ 0x00A727,
+ 0x00A729,
+ 0x00A72B,
+ 0x00A72D,
+ 0x00A733,
+ 0x00A735,
+ 0x00A737,
+ 0x00A739,
+ 0x00A73B,
+ 0x00A73D,
+ 0x00A73F,
+ 0x00A741,
+ 0x00A743,
+ 0x00A745,
+ 0x00A747,
+ 0x00A749,
+ 0x00A74B,
+ 0x00A74D,
+ 0x00A74F,
+ 0x00A751,
+ 0x00A753,
+ 0x00A755,
+ 0x00A757,
+ 0x00A759,
+ 0x00A75B,
+ 0x00A75D,
+ 0x00A75F,
+ 0x00A761,
+ 0x00A763,
+ 0x00A765,
+ 0x00A767,
+ 0x00A769,
+ 0x00A76B,
+ 0x00A76D,
+ 0x00A77A,
+ 0x00A77C,
+ 0x00A77F,
+ 0x00A781,
+ 0x00A783,
+ 0x00A785,
+ 0x00A78C,
+ 0x00A791,
+ 0x00A797,
+ 0x00A799,
+ 0x00A79B,
+ 0x00A79D,
+ 0x00A79F,
+ 0x00A7A1,
+ 0x00A7A3,
+ 0x00A7A5,
+ 0x00A7A7,
+ 0x00A7A9,
+ 0x00A7AF,
+ 0x00A7B5,
+ 0x00A7B7,
+ 0x00A7B9,
+ 0x00A7BB,
+ 0x00A7BD,
+ 0x00A7BF,
+ 0x00A7C1,
+ 0x00A7C3,
+ 0x00A7C8,
+ 0x00A7D7,
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D506,
+ 0x01D515,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000040],
+ [0x00005B, 0x0000BF],
+ [0x0000DF, 0x0000FF],
+ [0x000137, 0x000138],
+ [0x000148, 0x000149],
+ [0x00017E, 0x000180],
+ [0x00018C, 0x00018D],
+ [0x000199, 0x00019B],
+ [0x0001AA, 0x0001AB],
+ [0x0001B9, 0x0001BB],
+ [0x0001BD, 0x0001C3],
+ [0x0001C5, 0x0001C6],
+ [0x0001C8, 0x0001C9],
+ [0x0001CB, 0x0001CC],
+ [0x0001DC, 0x0001DD],
+ [0x0001EF, 0x0001F0],
+ [0x0001F2, 0x0001F3],
+ [0x000233, 0x000239],
+ [0x00023F, 0x000240],
+ [0x00024F, 0x00036F],
+ [0x000373, 0x000375],
+ [0x000377, 0x00037E],
+ [0x000380, 0x000385],
+ [0x0003AC, 0x0003CE],
+ [0x0003D0, 0x0003D1],
+ [0x0003D5, 0x0003D7],
+ [0x0003EF, 0x0003F3],
+ [0x0003F5, 0x0003F6],
+ [0x0003FB, 0x0003FC],
+ [0x000430, 0x00045F],
+ [0x000481, 0x000489],
+ [0x0004CE, 0x0004CF],
+ [0x00052F, 0x000530],
+ [0x000557, 0x00109F],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x00139F],
+ [0x0013F6, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC0, 0x001DFF],
+ [0x001E95, 0x001E9D],
+ [0x001EFF, 0x001F07],
+ [0x001F10, 0x001F17],
+ [0x001F1E, 0x001F27],
+ [0x001F30, 0x001F37],
+ [0x001F40, 0x001F47],
+ [0x001F4E, 0x001F58],
+ [0x001F60, 0x001F67],
+ [0x001F70, 0x001FB7],
+ [0x001FBC, 0x001FC7],
+ [0x001FCC, 0x001FD7],
+ [0x001FDC, 0x001FE7],
+ [0x001FED, 0x001FF7],
+ [0x001FFC, 0x002101],
+ [0x002103, 0x002106],
+ [0x002108, 0x00210A],
+ [0x00210E, 0x00210F],
+ [0x002113, 0x002114],
+ [0x002116, 0x002118],
+ [0x00211E, 0x002123],
+ [0x00212E, 0x00212F],
+ [0x002134, 0x00213D],
+ [0x002140, 0x002144],
+ [0x002146, 0x002182],
+ [0x002184, 0x002BFF],
+ [0x002C30, 0x002C5F],
+ [0x002C65, 0x002C66],
+ [0x002C73, 0x002C74],
+ [0x002C76, 0x002C7D],
+ [0x002CE3, 0x002CEA],
+ [0x002CEE, 0x002CF1],
+ [0x002CF3, 0x00A63F],
+ [0x00A66D, 0x00A67F],
+ [0x00A69B, 0x00A721],
+ [0x00A72F, 0x00A731],
+ [0x00A76F, 0x00A778],
+ [0x00A787, 0x00A78A],
+ [0x00A78E, 0x00A78F],
+ [0x00A793, 0x00A795],
+ [0x00A7CA, 0x00A7CF],
+ [0x00A7D1, 0x00A7D5],
+ [0x00A7D9, 0x00A7F4],
+ [0x00A7F6, 0x00DBFF],
+ [0x00E000, 0x00FF20],
+ [0x00FF3B, 0x0103FF],
+ [0x010428, 0x0104AF],
+ [0x0104D4, 0x01056F],
+ [0x010596, 0x010C7F],
+ [0x010CB3, 0x01189F],
+ [0x0118C0, 0x016E3F],
+ [0x016E60, 0x01D3FF],
+ [0x01D41A, 0x01D433],
+ [0x01D44E, 0x01D467],
+ [0x01D482, 0x01D49B],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D4B6, 0x01D4CF],
+ [0x01D4EA, 0x01D503],
+ [0x01D50B, 0x01D50C],
+ [0x01D51D, 0x01D537],
+ [0x01D547, 0x01D549],
+ [0x01D551, 0x01D56B],
+ [0x01D586, 0x01D59F],
+ [0x01D5BA, 0x01D5D3],
+ [0x01D5EE, 0x01D607],
+ [0x01D622, 0x01D63B],
+ [0x01D656, 0x01D66F],
+ [0x01D68A, 0x01D6A7],
+ [0x01D6C1, 0x01D6E1],
+ [0x01D6FB, 0x01D71B],
+ [0x01D735, 0x01D755],
+ [0x01D76F, 0x01D78F],
+ [0x01D7A9, 0x01D7C9],
+ [0x01D7CB, 0x01E8FF],
+ [0x01E922, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{General_Category=Uppercase_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Uppercase_Letter}"
+);
+testPropertyEscapes(
+ /^\P{General_Category=Lu}+$/u,
+ nonMatchSymbols,
+ "\\P{General_Category=Lu}"
+);
+testPropertyEscapes(
+ /^\P{gc=Uppercase_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Uppercase_Letter}"
+);
+testPropertyEscapes(
+ /^\P{gc=Lu}+$/u,
+ nonMatchSymbols,
+ "\\P{gc=Lu}"
+);
+testPropertyEscapes(
+ /^\P{Uppercase_Letter}+$/u,
+ nonMatchSymbols,
+ "\\P{Uppercase_Letter}"
+);
+testPropertyEscapes(
+ /^\P{Lu}+$/u,
+ nonMatchSymbols,
+ "\\P{Lu}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Grapheme_Base.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Grapheme_Base.js
new file mode 100644
index 0000000000..ff0cb8b09f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Grapheme_Base.js
@@ -0,0 +1,1803 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Grapheme_Base`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00038C,
+ 0x0005BE,
+ 0x0005C0,
+ 0x0005C3,
+ 0x0005C6,
+ 0x00061B,
+ 0x0006DE,
+ 0x0006E9,
+ 0x000710,
+ 0x0007B1,
+ 0x00081A,
+ 0x000824,
+ 0x000828,
+ 0x00085E,
+ 0x00093B,
+ 0x0009B2,
+ 0x0009BD,
+ 0x0009CE,
+ 0x000A03,
+ 0x000A5E,
+ 0x000A76,
+ 0x000A83,
+ 0x000AC9,
+ 0x000AD0,
+ 0x000AF9,
+ 0x000B3D,
+ 0x000B40,
+ 0x000B83,
+ 0x000B9C,
+ 0x000BBF,
+ 0x000BD0,
+ 0x000C3D,
+ 0x000C5D,
+ 0x000D3D,
+ 0x000DBD,
+ 0x000E84,
+ 0x000EA5,
+ 0x000EBD,
+ 0x000EC6,
+ 0x000F36,
+ 0x000F38,
+ 0x000F7F,
+ 0x000F85,
+ 0x001031,
+ 0x001038,
+ 0x0010C7,
+ 0x0010CD,
+ 0x001258,
+ 0x0012C0,
+ 0x001715,
+ 0x0017B6,
+ 0x0018AA,
+ 0x001940,
+ 0x001A57,
+ 0x001A61,
+ 0x001B3B,
+ 0x001BAA,
+ 0x001BE7,
+ 0x001BEE,
+ 0x001CD3,
+ 0x001CE1,
+ 0x001CFA,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x002D27,
+ 0x002D2D,
+ 0x00A673,
+ 0x00A7D3,
+ 0x00AA4D,
+ 0x00AAB1,
+ 0x00AAC0,
+ 0x00AAC2,
+ 0x00FB1D,
+ 0x00FB3E,
+ 0x00FDCF,
+ 0x0101A0,
+ 0x010808,
+ 0x01083C,
+ 0x01093F,
+ 0x010EAD,
+ 0x011000,
+ 0x011075,
+ 0x01112C,
+ 0x011235,
+ 0x011288,
+ 0x01133D,
+ 0x01133F,
+ 0x011350,
+ 0x011445,
+ 0x01145D,
+ 0x0114B9,
+ 0x0114BE,
+ 0x0114C1,
+ 0x0115BE,
+ 0x01163E,
+ 0x0116AC,
+ 0x0116B6,
+ 0x011726,
+ 0x011838,
+ 0x01183B,
+ 0x011909,
+ 0x01193D,
+ 0x011A00,
+ 0x011A50,
+ 0x011A97,
+ 0x011C3E,
+ 0x011CA9,
+ 0x011CB1,
+ 0x011CB4,
+ 0x011D46,
+ 0x011D96,
+ 0x011D98,
+ 0x011F41,
+ 0x011FB0,
+ 0x016AF5,
+ 0x01B132,
+ 0x01B155,
+ 0x01BC9C,
+ 0x01BC9F,
+ 0x01D166,
+ 0x01D245,
+ 0x01D4A2,
+ 0x01D4BB,
+ 0x01D546,
+ 0x01E2FF,
+ 0x01E94B,
+ 0x01EE24,
+ 0x01EE27,
+ 0x01EE39,
+ 0x01EE3B,
+ 0x01EE42,
+ 0x01EE47,
+ 0x01EE49,
+ 0x01EE4B,
+ 0x01EE54,
+ 0x01EE57,
+ 0x01EE59,
+ 0x01EE5B,
+ 0x01EE5D,
+ 0x01EE5F,
+ 0x01EE64,
+ 0x01EE7E,
+ 0x01F7F0
+ ],
+ ranges: [
+ [0x000020, 0x00007E],
+ [0x0000A0, 0x0000AC],
+ [0x0000AE, 0x0002FF],
+ [0x000370, 0x000377],
+ [0x00037A, 0x00037F],
+ [0x000384, 0x00038A],
+ [0x00038E, 0x0003A1],
+ [0x0003A3, 0x000482],
+ [0x00048A, 0x00052F],
+ [0x000531, 0x000556],
+ [0x000559, 0x00058A],
+ [0x00058D, 0x00058F],
+ [0x0005D0, 0x0005EA],
+ [0x0005EF, 0x0005F4],
+ [0x000606, 0x00060F],
+ [0x00061D, 0x00064A],
+ [0x000660, 0x00066F],
+ [0x000671, 0x0006D5],
+ [0x0006E5, 0x0006E6],
+ [0x0006EE, 0x00070D],
+ [0x000712, 0x00072F],
+ [0x00074D, 0x0007A5],
+ [0x0007C0, 0x0007EA],
+ [0x0007F4, 0x0007FA],
+ [0x0007FE, 0x000815],
+ [0x000830, 0x00083E],
+ [0x000840, 0x000858],
+ [0x000860, 0x00086A],
+ [0x000870, 0x00088E],
+ [0x0008A0, 0x0008C9],
+ [0x000903, 0x000939],
+ [0x00093D, 0x000940],
+ [0x000949, 0x00094C],
+ [0x00094E, 0x000950],
+ [0x000958, 0x000961],
+ [0x000964, 0x000980],
+ [0x000982, 0x000983],
+ [0x000985, 0x00098C],
+ [0x00098F, 0x000990],
+ [0x000993, 0x0009A8],
+ [0x0009AA, 0x0009B0],
+ [0x0009B6, 0x0009B9],
+ [0x0009BF, 0x0009C0],
+ [0x0009C7, 0x0009C8],
+ [0x0009CB, 0x0009CC],
+ [0x0009DC, 0x0009DD],
+ [0x0009DF, 0x0009E1],
+ [0x0009E6, 0x0009FD],
+ [0x000A05, 0x000A0A],
+ [0x000A0F, 0x000A10],
+ [0x000A13, 0x000A28],
+ [0x000A2A, 0x000A30],
+ [0x000A32, 0x000A33],
+ [0x000A35, 0x000A36],
+ [0x000A38, 0x000A39],
+ [0x000A3E, 0x000A40],
+ [0x000A59, 0x000A5C],
+ [0x000A66, 0x000A6F],
+ [0x000A72, 0x000A74],
+ [0x000A85, 0x000A8D],
+ [0x000A8F, 0x000A91],
+ [0x000A93, 0x000AA8],
+ [0x000AAA, 0x000AB0],
+ [0x000AB2, 0x000AB3],
+ [0x000AB5, 0x000AB9],
+ [0x000ABD, 0x000AC0],
+ [0x000ACB, 0x000ACC],
+ [0x000AE0, 0x000AE1],
+ [0x000AE6, 0x000AF1],
+ [0x000B02, 0x000B03],
+ [0x000B05, 0x000B0C],
+ [0x000B0F, 0x000B10],
+ [0x000B13, 0x000B28],
+ [0x000B2A, 0x000B30],
+ [0x000B32, 0x000B33],
+ [0x000B35, 0x000B39],
+ [0x000B47, 0x000B48],
+ [0x000B4B, 0x000B4C],
+ [0x000B5C, 0x000B5D],
+ [0x000B5F, 0x000B61],
+ [0x000B66, 0x000B77],
+ [0x000B85, 0x000B8A],
+ [0x000B8E, 0x000B90],
+ [0x000B92, 0x000B95],
+ [0x000B99, 0x000B9A],
+ [0x000B9E, 0x000B9F],
+ [0x000BA3, 0x000BA4],
+ [0x000BA8, 0x000BAA],
+ [0x000BAE, 0x000BB9],
+ [0x000BC1, 0x000BC2],
+ [0x000BC6, 0x000BC8],
+ [0x000BCA, 0x000BCC],
+ [0x000BE6, 0x000BFA],
+ [0x000C01, 0x000C03],
+ [0x000C05, 0x000C0C],
+ [0x000C0E, 0x000C10],
+ [0x000C12, 0x000C28],
+ [0x000C2A, 0x000C39],
+ [0x000C41, 0x000C44],
+ [0x000C58, 0x000C5A],
+ [0x000C60, 0x000C61],
+ [0x000C66, 0x000C6F],
+ [0x000C77, 0x000C80],
+ [0x000C82, 0x000C8C],
+ [0x000C8E, 0x000C90],
+ [0x000C92, 0x000CA8],
+ [0x000CAA, 0x000CB3],
+ [0x000CB5, 0x000CB9],
+ [0x000CBD, 0x000CBE],
+ [0x000CC0, 0x000CC1],
+ [0x000CC3, 0x000CC4],
+ [0x000CC7, 0x000CC8],
+ [0x000CCA, 0x000CCB],
+ [0x000CDD, 0x000CDE],
+ [0x000CE0, 0x000CE1],
+ [0x000CE6, 0x000CEF],
+ [0x000CF1, 0x000CF3],
+ [0x000D02, 0x000D0C],
+ [0x000D0E, 0x000D10],
+ [0x000D12, 0x000D3A],
+ [0x000D3F, 0x000D40],
+ [0x000D46, 0x000D48],
+ [0x000D4A, 0x000D4C],
+ [0x000D4E, 0x000D4F],
+ [0x000D54, 0x000D56],
+ [0x000D58, 0x000D61],
+ [0x000D66, 0x000D7F],
+ [0x000D82, 0x000D83],
+ [0x000D85, 0x000D96],
+ [0x000D9A, 0x000DB1],
+ [0x000DB3, 0x000DBB],
+ [0x000DC0, 0x000DC6],
+ [0x000DD0, 0x000DD1],
+ [0x000DD8, 0x000DDE],
+ [0x000DE6, 0x000DEF],
+ [0x000DF2, 0x000DF4],
+ [0x000E01, 0x000E30],
+ [0x000E32, 0x000E33],
+ [0x000E3F, 0x000E46],
+ [0x000E4F, 0x000E5B],
+ [0x000E81, 0x000E82],
+ [0x000E86, 0x000E8A],
+ [0x000E8C, 0x000EA3],
+ [0x000EA7, 0x000EB0],
+ [0x000EB2, 0x000EB3],
+ [0x000EC0, 0x000EC4],
+ [0x000ED0, 0x000ED9],
+ [0x000EDC, 0x000EDF],
+ [0x000F00, 0x000F17],
+ [0x000F1A, 0x000F34],
+ [0x000F3A, 0x000F47],
+ [0x000F49, 0x000F6C],
+ [0x000F88, 0x000F8C],
+ [0x000FBE, 0x000FC5],
+ [0x000FC7, 0x000FCC],
+ [0x000FCE, 0x000FDA],
+ [0x001000, 0x00102C],
+ [0x00103B, 0x00103C],
+ [0x00103F, 0x001057],
+ [0x00105A, 0x00105D],
+ [0x001061, 0x001070],
+ [0x001075, 0x001081],
+ [0x001083, 0x001084],
+ [0x001087, 0x00108C],
+ [0x00108E, 0x00109C],
+ [0x00109E, 0x0010C5],
+ [0x0010D0, 0x001248],
+ [0x00124A, 0x00124D],
+ [0x001250, 0x001256],
+ [0x00125A, 0x00125D],
+ [0x001260, 0x001288],
+ [0x00128A, 0x00128D],
+ [0x001290, 0x0012B0],
+ [0x0012B2, 0x0012B5],
+ [0x0012B8, 0x0012BE],
+ [0x0012C2, 0x0012C5],
+ [0x0012C8, 0x0012D6],
+ [0x0012D8, 0x001310],
+ [0x001312, 0x001315],
+ [0x001318, 0x00135A],
+ [0x001360, 0x00137C],
+ [0x001380, 0x001399],
+ [0x0013A0, 0x0013F5],
+ [0x0013F8, 0x0013FD],
+ [0x001400, 0x00169C],
+ [0x0016A0, 0x0016F8],
+ [0x001700, 0x001711],
+ [0x00171F, 0x001731],
+ [0x001734, 0x001736],
+ [0x001740, 0x001751],
+ [0x001760, 0x00176C],
+ [0x00176E, 0x001770],
+ [0x001780, 0x0017B3],
+ [0x0017BE, 0x0017C5],
+ [0x0017C7, 0x0017C8],
+ [0x0017D4, 0x0017DC],
+ [0x0017E0, 0x0017E9],
+ [0x0017F0, 0x0017F9],
+ [0x001800, 0x00180A],
+ [0x001810, 0x001819],
+ [0x001820, 0x001878],
+ [0x001880, 0x001884],
+ [0x001887, 0x0018A8],
+ [0x0018B0, 0x0018F5],
+ [0x001900, 0x00191E],
+ [0x001923, 0x001926],
+ [0x001929, 0x00192B],
+ [0x001930, 0x001931],
+ [0x001933, 0x001938],
+ [0x001944, 0x00196D],
+ [0x001970, 0x001974],
+ [0x001980, 0x0019AB],
+ [0x0019B0, 0x0019C9],
+ [0x0019D0, 0x0019DA],
+ [0x0019DE, 0x001A16],
+ [0x001A19, 0x001A1A],
+ [0x001A1E, 0x001A55],
+ [0x001A63, 0x001A64],
+ [0x001A6D, 0x001A72],
+ [0x001A80, 0x001A89],
+ [0x001A90, 0x001A99],
+ [0x001AA0, 0x001AAD],
+ [0x001B04, 0x001B33],
+ [0x001B3D, 0x001B41],
+ [0x001B43, 0x001B4C],
+ [0x001B50, 0x001B6A],
+ [0x001B74, 0x001B7E],
+ [0x001B82, 0x001BA1],
+ [0x001BA6, 0x001BA7],
+ [0x001BAE, 0x001BE5],
+ [0x001BEA, 0x001BEC],
+ [0x001BF2, 0x001BF3],
+ [0x001BFC, 0x001C2B],
+ [0x001C34, 0x001C35],
+ [0x001C3B, 0x001C49],
+ [0x001C4D, 0x001C88],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CC7],
+ [0x001CE9, 0x001CEC],
+ [0x001CEE, 0x001CF3],
+ [0x001CF5, 0x001CF7],
+ [0x001D00, 0x001DBF],
+ [0x001E00, 0x001F15],
+ [0x001F18, 0x001F1D],
+ [0x001F20, 0x001F45],
+ [0x001F48, 0x001F4D],
+ [0x001F50, 0x001F57],
+ [0x001F5F, 0x001F7D],
+ [0x001F80, 0x001FB4],
+ [0x001FB6, 0x001FC4],
+ [0x001FC6, 0x001FD3],
+ [0x001FD6, 0x001FDB],
+ [0x001FDD, 0x001FEF],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FFE],
+ [0x002000, 0x00200A],
+ [0x002010, 0x002027],
+ [0x00202F, 0x00205F],
+ [0x002070, 0x002071],
+ [0x002074, 0x00208E],
+ [0x002090, 0x00209C],
+ [0x0020A0, 0x0020C0],
+ [0x002100, 0x00218B],
+ [0x002190, 0x002426],
+ [0x002440, 0x00244A],
+ [0x002460, 0x002B73],
+ [0x002B76, 0x002B95],
+ [0x002B97, 0x002CEE],
+ [0x002CF2, 0x002CF3],
+ [0x002CF9, 0x002D25],
+ [0x002D30, 0x002D67],
+ [0x002D6F, 0x002D70],
+ [0x002D80, 0x002D96],
+ [0x002DA0, 0x002DA6],
+ [0x002DA8, 0x002DAE],
+ [0x002DB0, 0x002DB6],
+ [0x002DB8, 0x002DBE],
+ [0x002DC0, 0x002DC6],
+ [0x002DC8, 0x002DCE],
+ [0x002DD0, 0x002DD6],
+ [0x002DD8, 0x002DDE],
+ [0x002E00, 0x002E5D],
+ [0x002E80, 0x002E99],
+ [0x002E9B, 0x002EF3],
+ [0x002F00, 0x002FD5],
+ [0x002FF0, 0x002FFB],
+ [0x003000, 0x003029],
+ [0x003030, 0x00303F],
+ [0x003041, 0x003096],
+ [0x00309B, 0x0030FF],
+ [0x003105, 0x00312F],
+ [0x003131, 0x00318E],
+ [0x003190, 0x0031E3],
+ [0x0031F0, 0x00321E],
+ [0x003220, 0x00A48C],
+ [0x00A490, 0x00A4C6],
+ [0x00A4D0, 0x00A62B],
+ [0x00A640, 0x00A66E],
+ [0x00A67E, 0x00A69D],
+ [0x00A6A0, 0x00A6EF],
+ [0x00A6F2, 0x00A6F7],
+ [0x00A700, 0x00A7CA],
+ [0x00A7D0, 0x00A7D1],
+ [0x00A7D5, 0x00A7D9],
+ [0x00A7F2, 0x00A801],
+ [0x00A803, 0x00A805],
+ [0x00A807, 0x00A80A],
+ [0x00A80C, 0x00A824],
+ [0x00A827, 0x00A82B],
+ [0x00A830, 0x00A839],
+ [0x00A840, 0x00A877],
+ [0x00A880, 0x00A8C3],
+ [0x00A8CE, 0x00A8D9],
+ [0x00A8F2, 0x00A8FE],
+ [0x00A900, 0x00A925],
+ [0x00A92E, 0x00A946],
+ [0x00A952, 0x00A953],
+ [0x00A95F, 0x00A97C],
+ [0x00A983, 0x00A9B2],
+ [0x00A9B4, 0x00A9B5],
+ [0x00A9BA, 0x00A9BB],
+ [0x00A9BE, 0x00A9CD],
+ [0x00A9CF, 0x00A9D9],
+ [0x00A9DE, 0x00A9E4],
+ [0x00A9E6, 0x00A9FE],
+ [0x00AA00, 0x00AA28],
+ [0x00AA2F, 0x00AA30],
+ [0x00AA33, 0x00AA34],
+ [0x00AA40, 0x00AA42],
+ [0x00AA44, 0x00AA4B],
+ [0x00AA50, 0x00AA59],
+ [0x00AA5C, 0x00AA7B],
+ [0x00AA7D, 0x00AAAF],
+ [0x00AAB5, 0x00AAB6],
+ [0x00AAB9, 0x00AABD],
+ [0x00AADB, 0x00AAEB],
+ [0x00AAEE, 0x00AAF5],
+ [0x00AB01, 0x00AB06],
+ [0x00AB09, 0x00AB0E],
+ [0x00AB11, 0x00AB16],
+ [0x00AB20, 0x00AB26],
+ [0x00AB28, 0x00AB2E],
+ [0x00AB30, 0x00AB6B],
+ [0x00AB70, 0x00ABE4],
+ [0x00ABE6, 0x00ABE7],
+ [0x00ABE9, 0x00ABEC],
+ [0x00ABF0, 0x00ABF9],
+ [0x00AC00, 0x00D7A3],
+ [0x00D7B0, 0x00D7C6],
+ [0x00D7CB, 0x00D7FB],
+ [0x00F900, 0x00FA6D],
+ [0x00FA70, 0x00FAD9],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FB1F, 0x00FB36],
+ [0x00FB38, 0x00FB3C],
+ [0x00FB40, 0x00FB41],
+ [0x00FB43, 0x00FB44],
+ [0x00FB46, 0x00FBC2],
+ [0x00FBD3, 0x00FD8F],
+ [0x00FD92, 0x00FDC7],
+ [0x00FDF0, 0x00FDFF],
+ [0x00FE10, 0x00FE19],
+ [0x00FE30, 0x00FE52],
+ [0x00FE54, 0x00FE66],
+ [0x00FE68, 0x00FE6B],
+ [0x00FE70, 0x00FE74],
+ [0x00FE76, 0x00FEFC],
+ [0x00FF01, 0x00FF9D],
+ [0x00FFA0, 0x00FFBE],
+ [0x00FFC2, 0x00FFC7],
+ [0x00FFCA, 0x00FFCF],
+ [0x00FFD2, 0x00FFD7],
+ [0x00FFDA, 0x00FFDC],
+ [0x00FFE0, 0x00FFE6],
+ [0x00FFE8, 0x00FFEE],
+ [0x00FFFC, 0x00FFFD],
+ [0x010000, 0x01000B],
+ [0x01000D, 0x010026],
+ [0x010028, 0x01003A],
+ [0x01003C, 0x01003D],
+ [0x01003F, 0x01004D],
+ [0x010050, 0x01005D],
+ [0x010080, 0x0100FA],
+ [0x010100, 0x010102],
+ [0x010107, 0x010133],
+ [0x010137, 0x01018E],
+ [0x010190, 0x01019C],
+ [0x0101D0, 0x0101FC],
+ [0x010280, 0x01029C],
+ [0x0102A0, 0x0102D0],
+ [0x0102E1, 0x0102FB],
+ [0x010300, 0x010323],
+ [0x01032D, 0x01034A],
+ [0x010350, 0x010375],
+ [0x010380, 0x01039D],
+ [0x01039F, 0x0103C3],
+ [0x0103C8, 0x0103D5],
+ [0x010400, 0x01049D],
+ [0x0104A0, 0x0104A9],
+ [0x0104B0, 0x0104D3],
+ [0x0104D8, 0x0104FB],
+ [0x010500, 0x010527],
+ [0x010530, 0x010563],
+ [0x01056F, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC],
+ [0x010600, 0x010736],
+ [0x010740, 0x010755],
+ [0x010760, 0x010767],
+ [0x010780, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x010800, 0x010805],
+ [0x01080A, 0x010835],
+ [0x010837, 0x010838],
+ [0x01083F, 0x010855],
+ [0x010857, 0x01089E],
+ [0x0108A7, 0x0108AF],
+ [0x0108E0, 0x0108F2],
+ [0x0108F4, 0x0108F5],
+ [0x0108FB, 0x01091B],
+ [0x01091F, 0x010939],
+ [0x010980, 0x0109B7],
+ [0x0109BC, 0x0109CF],
+ [0x0109D2, 0x010A00],
+ [0x010A10, 0x010A13],
+ [0x010A15, 0x010A17],
+ [0x010A19, 0x010A35],
+ [0x010A40, 0x010A48],
+ [0x010A50, 0x010A58],
+ [0x010A60, 0x010A9F],
+ [0x010AC0, 0x010AE4],
+ [0x010AEB, 0x010AF6],
+ [0x010B00, 0x010B35],
+ [0x010B39, 0x010B55],
+ [0x010B58, 0x010B72],
+ [0x010B78, 0x010B91],
+ [0x010B99, 0x010B9C],
+ [0x010BA9, 0x010BAF],
+ [0x010C00, 0x010C48],
+ [0x010C80, 0x010CB2],
+ [0x010CC0, 0x010CF2],
+ [0x010CFA, 0x010D23],
+ [0x010D30, 0x010D39],
+ [0x010E60, 0x010E7E],
+ [0x010E80, 0x010EA9],
+ [0x010EB0, 0x010EB1],
+ [0x010F00, 0x010F27],
+ [0x010F30, 0x010F45],
+ [0x010F51, 0x010F59],
+ [0x010F70, 0x010F81],
+ [0x010F86, 0x010F89],
+ [0x010FB0, 0x010FCB],
+ [0x010FE0, 0x010FF6],
+ [0x011002, 0x011037],
+ [0x011047, 0x01104D],
+ [0x011052, 0x01106F],
+ [0x011071, 0x011072],
+ [0x011082, 0x0110B2],
+ [0x0110B7, 0x0110B8],
+ [0x0110BB, 0x0110BC],
+ [0x0110BE, 0x0110C1],
+ [0x0110D0, 0x0110E8],
+ [0x0110F0, 0x0110F9],
+ [0x011103, 0x011126],
+ [0x011136, 0x011147],
+ [0x011150, 0x011172],
+ [0x011174, 0x011176],
+ [0x011182, 0x0111B5],
+ [0x0111BF, 0x0111C8],
+ [0x0111CD, 0x0111CE],
+ [0x0111D0, 0x0111DF],
+ [0x0111E1, 0x0111F4],
+ [0x011200, 0x011211],
+ [0x011213, 0x01122E],
+ [0x011232, 0x011233],
+ [0x011238, 0x01123D],
+ [0x01123F, 0x011240],
+ [0x011280, 0x011286],
+ [0x01128A, 0x01128D],
+ [0x01128F, 0x01129D],
+ [0x01129F, 0x0112A9],
+ [0x0112B0, 0x0112DE],
+ [0x0112E0, 0x0112E2],
+ [0x0112F0, 0x0112F9],
+ [0x011302, 0x011303],
+ [0x011305, 0x01130C],
+ [0x01130F, 0x011310],
+ [0x011313, 0x011328],
+ [0x01132A, 0x011330],
+ [0x011332, 0x011333],
+ [0x011335, 0x011339],
+ [0x011341, 0x011344],
+ [0x011347, 0x011348],
+ [0x01134B, 0x01134D],
+ [0x01135D, 0x011363],
+ [0x011400, 0x011437],
+ [0x011440, 0x011441],
+ [0x011447, 0x01145B],
+ [0x01145F, 0x011461],
+ [0x011480, 0x0114AF],
+ [0x0114B1, 0x0114B2],
+ [0x0114BB, 0x0114BC],
+ [0x0114C4, 0x0114C7],
+ [0x0114D0, 0x0114D9],
+ [0x011580, 0x0115AE],
+ [0x0115B0, 0x0115B1],
+ [0x0115B8, 0x0115BB],
+ [0x0115C1, 0x0115DB],
+ [0x011600, 0x011632],
+ [0x01163B, 0x01163C],
+ [0x011641, 0x011644],
+ [0x011650, 0x011659],
+ [0x011660, 0x01166C],
+ [0x011680, 0x0116AA],
+ [0x0116AE, 0x0116AF],
+ [0x0116B8, 0x0116B9],
+ [0x0116C0, 0x0116C9],
+ [0x011700, 0x01171A],
+ [0x011720, 0x011721],
+ [0x011730, 0x011746],
+ [0x011800, 0x01182E],
+ [0x0118A0, 0x0118F2],
+ [0x0118FF, 0x011906],
+ [0x01190C, 0x011913],
+ [0x011915, 0x011916],
+ [0x011918, 0x01192F],
+ [0x011931, 0x011935],
+ [0x011937, 0x011938],
+ [0x01193F, 0x011942],
+ [0x011944, 0x011946],
+ [0x011950, 0x011959],
+ [0x0119A0, 0x0119A7],
+ [0x0119AA, 0x0119D3],
+ [0x0119DC, 0x0119DF],
+ [0x0119E1, 0x0119E4],
+ [0x011A0B, 0x011A32],
+ [0x011A39, 0x011A3A],
+ [0x011A3F, 0x011A46],
+ [0x011A57, 0x011A58],
+ [0x011A5C, 0x011A89],
+ [0x011A9A, 0x011AA2],
+ [0x011AB0, 0x011AF8],
+ [0x011B00, 0x011B09],
+ [0x011C00, 0x011C08],
+ [0x011C0A, 0x011C2F],
+ [0x011C40, 0x011C45],
+ [0x011C50, 0x011C6C],
+ [0x011C70, 0x011C8F],
+ [0x011D00, 0x011D06],
+ [0x011D08, 0x011D09],
+ [0x011D0B, 0x011D30],
+ [0x011D50, 0x011D59],
+ [0x011D60, 0x011D65],
+ [0x011D67, 0x011D68],
+ [0x011D6A, 0x011D8E],
+ [0x011D93, 0x011D94],
+ [0x011DA0, 0x011DA9],
+ [0x011EE0, 0x011EF2],
+ [0x011EF5, 0x011EF8],
+ [0x011F02, 0x011F10],
+ [0x011F12, 0x011F35],
+ [0x011F3E, 0x011F3F],
+ [0x011F43, 0x011F59],
+ [0x011FC0, 0x011FF1],
+ [0x011FFF, 0x012399],
+ [0x012400, 0x01246E],
+ [0x012470, 0x012474],
+ [0x012480, 0x012543],
+ [0x012F90, 0x012FF2],
+ [0x013000, 0x01342F],
+ [0x013441, 0x013446],
+ [0x014400, 0x014646],
+ [0x016800, 0x016A38],
+ [0x016A40, 0x016A5E],
+ [0x016A60, 0x016A69],
+ [0x016A6E, 0x016ABE],
+ [0x016AC0, 0x016AC9],
+ [0x016AD0, 0x016AED],
+ [0x016B00, 0x016B2F],
+ [0x016B37, 0x016B45],
+ [0x016B50, 0x016B59],
+ [0x016B5B, 0x016B61],
+ [0x016B63, 0x016B77],
+ [0x016B7D, 0x016B8F],
+ [0x016E40, 0x016E9A],
+ [0x016F00, 0x016F4A],
+ [0x016F50, 0x016F87],
+ [0x016F93, 0x016F9F],
+ [0x016FE0, 0x016FE3],
+ [0x016FF0, 0x016FF1],
+ [0x017000, 0x0187F7],
+ [0x018800, 0x018CD5],
+ [0x018D00, 0x018D08],
+ [0x01AFF0, 0x01AFF3],
+ [0x01AFF5, 0x01AFFB],
+ [0x01AFFD, 0x01AFFE],
+ [0x01B000, 0x01B122],
+ [0x01B150, 0x01B152],
+ [0x01B164, 0x01B167],
+ [0x01B170, 0x01B2FB],
+ [0x01BC00, 0x01BC6A],
+ [0x01BC70, 0x01BC7C],
+ [0x01BC80, 0x01BC88],
+ [0x01BC90, 0x01BC99],
+ [0x01CF50, 0x01CFC3],
+ [0x01D000, 0x01D0F5],
+ [0x01D100, 0x01D126],
+ [0x01D129, 0x01D164],
+ [0x01D16A, 0x01D16D],
+ [0x01D183, 0x01D184],
+ [0x01D18C, 0x01D1A9],
+ [0x01D1AE, 0x01D1EA],
+ [0x01D200, 0x01D241],
+ [0x01D2C0, 0x01D2D3],
+ [0x01D2E0, 0x01D2F3],
+ [0x01D300, 0x01D356],
+ [0x01D360, 0x01D378],
+ [0x01D400, 0x01D454],
+ [0x01D456, 0x01D49C],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D51E, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D552, 0x01D6A5],
+ [0x01D6A8, 0x01D7CB],
+ [0x01D7CE, 0x01D9FF],
+ [0x01DA37, 0x01DA3A],
+ [0x01DA6D, 0x01DA74],
+ [0x01DA76, 0x01DA83],
+ [0x01DA85, 0x01DA8B],
+ [0x01DF00, 0x01DF1E],
+ [0x01DF25, 0x01DF2A],
+ [0x01E030, 0x01E06D],
+ [0x01E100, 0x01E12C],
+ [0x01E137, 0x01E13D],
+ [0x01E140, 0x01E149],
+ [0x01E14E, 0x01E14F],
+ [0x01E290, 0x01E2AD],
+ [0x01E2C0, 0x01E2EB],
+ [0x01E2F0, 0x01E2F9],
+ [0x01E4D0, 0x01E4EB],
+ [0x01E4F0, 0x01E4F9],
+ [0x01E7E0, 0x01E7E6],
+ [0x01E7E8, 0x01E7EB],
+ [0x01E7ED, 0x01E7EE],
+ [0x01E7F0, 0x01E7FE],
+ [0x01E800, 0x01E8C4],
+ [0x01E8C7, 0x01E8CF],
+ [0x01E900, 0x01E943],
+ [0x01E950, 0x01E959],
+ [0x01E95E, 0x01E95F],
+ [0x01EC71, 0x01ECB4],
+ [0x01ED01, 0x01ED3D],
+ [0x01EE00, 0x01EE03],
+ [0x01EE05, 0x01EE1F],
+ [0x01EE21, 0x01EE22],
+ [0x01EE29, 0x01EE32],
+ [0x01EE34, 0x01EE37],
+ [0x01EE4D, 0x01EE4F],
+ [0x01EE51, 0x01EE52],
+ [0x01EE61, 0x01EE62],
+ [0x01EE67, 0x01EE6A],
+ [0x01EE6C, 0x01EE72],
+ [0x01EE74, 0x01EE77],
+ [0x01EE79, 0x01EE7C],
+ [0x01EE80, 0x01EE89],
+ [0x01EE8B, 0x01EE9B],
+ [0x01EEA1, 0x01EEA3],
+ [0x01EEA5, 0x01EEA9],
+ [0x01EEAB, 0x01EEBB],
+ [0x01EEF0, 0x01EEF1],
+ [0x01F000, 0x01F02B],
+ [0x01F030, 0x01F093],
+ [0x01F0A0, 0x01F0AE],
+ [0x01F0B1, 0x01F0BF],
+ [0x01F0C1, 0x01F0CF],
+ [0x01F0D1, 0x01F0F5],
+ [0x01F100, 0x01F1AD],
+ [0x01F1E6, 0x01F202],
+ [0x01F210, 0x01F23B],
+ [0x01F240, 0x01F248],
+ [0x01F250, 0x01F251],
+ [0x01F260, 0x01F265],
+ [0x01F300, 0x01F6D7],
+ [0x01F6DC, 0x01F6EC],
+ [0x01F6F0, 0x01F6FC],
+ [0x01F700, 0x01F776],
+ [0x01F77B, 0x01F7D9],
+ [0x01F7E0, 0x01F7EB],
+ [0x01F800, 0x01F80B],
+ [0x01F810, 0x01F847],
+ [0x01F850, 0x01F859],
+ [0x01F860, 0x01F887],
+ [0x01F890, 0x01F8AD],
+ [0x01F8B0, 0x01F8B1],
+ [0x01F900, 0x01FA53],
+ [0x01FA60, 0x01FA6D],
+ [0x01FA70, 0x01FA7C],
+ [0x01FA80, 0x01FA88],
+ [0x01FA90, 0x01FABD],
+ [0x01FABF, 0x01FAC5],
+ [0x01FACE, 0x01FADB],
+ [0x01FAE0, 0x01FAE8],
+ [0x01FAF0, 0x01FAF8],
+ [0x01FB00, 0x01FB92],
+ [0x01FB94, 0x01FBCA],
+ [0x01FBF0, 0x01FBF9],
+ [0x020000, 0x02A6DF],
+ [0x02A700, 0x02B739],
+ [0x02B740, 0x02B81D],
+ [0x02B820, 0x02CEA1],
+ [0x02CEB0, 0x02EBE0],
+ [0x02F800, 0x02FA1D],
+ [0x030000, 0x03134A],
+ [0x031350, 0x0323AF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Grapheme_Base}+$/u,
+ matchSymbols,
+ "\\p{Grapheme_Base}"
+);
+testPropertyEscapes(
+ /^\p{Gr_Base}+$/u,
+ matchSymbols,
+ "\\p{Gr_Base}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000AD,
+ 0x00038B,
+ 0x00038D,
+ 0x0003A2,
+ 0x000530,
+ 0x0005BF,
+ 0x00061C,
+ 0x000670,
+ 0x000711,
+ 0x00083F,
+ 0x00085F,
+ 0x00093A,
+ 0x00093C,
+ 0x00094D,
+ 0x000981,
+ 0x000984,
+ 0x0009A9,
+ 0x0009B1,
+ 0x0009BE,
+ 0x0009CD,
+ 0x0009DE,
+ 0x000A04,
+ 0x000A29,
+ 0x000A31,
+ 0x000A34,
+ 0x000A37,
+ 0x000A5D,
+ 0x000A75,
+ 0x000A84,
+ 0x000A8E,
+ 0x000A92,
+ 0x000AA9,
+ 0x000AB1,
+ 0x000AB4,
+ 0x000ACA,
+ 0x000B04,
+ 0x000B29,
+ 0x000B31,
+ 0x000B34,
+ 0x000B5E,
+ 0x000B84,
+ 0x000B91,
+ 0x000B9B,
+ 0x000B9D,
+ 0x000BC0,
+ 0x000BC9,
+ 0x000C04,
+ 0x000C0D,
+ 0x000C11,
+ 0x000C29,
+ 0x000C81,
+ 0x000C8D,
+ 0x000C91,
+ 0x000CA9,
+ 0x000CB4,
+ 0x000CBF,
+ 0x000CC2,
+ 0x000CC9,
+ 0x000CDF,
+ 0x000CF0,
+ 0x000D0D,
+ 0x000D11,
+ 0x000D3E,
+ 0x000D49,
+ 0x000D4D,
+ 0x000D57,
+ 0x000D84,
+ 0x000DB2,
+ 0x000DBC,
+ 0x000E31,
+ 0x000E83,
+ 0x000E85,
+ 0x000E8B,
+ 0x000EA4,
+ 0x000EA6,
+ 0x000EB1,
+ 0x000EC5,
+ 0x000F35,
+ 0x000F37,
+ 0x000F39,
+ 0x000F48,
+ 0x000FC6,
+ 0x000FCD,
+ 0x001082,
+ 0x00108D,
+ 0x00109D,
+ 0x0010C6,
+ 0x001249,
+ 0x001257,
+ 0x001259,
+ 0x001289,
+ 0x0012B1,
+ 0x0012BF,
+ 0x0012C1,
+ 0x0012D7,
+ 0x001311,
+ 0x00176D,
+ 0x0017C6,
+ 0x0018A9,
+ 0x001932,
+ 0x001A56,
+ 0x001A62,
+ 0x001B3C,
+ 0x001B42,
+ 0x001BE6,
+ 0x001BED,
+ 0x001CED,
+ 0x001CF4,
+ 0x001F58,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x001FB5,
+ 0x001FC5,
+ 0x001FDC,
+ 0x001FF5,
+ 0x001FFF,
+ 0x00208F,
+ 0x002B96,
+ 0x002D26,
+ 0x002DA7,
+ 0x002DAF,
+ 0x002DB7,
+ 0x002DBF,
+ 0x002DC7,
+ 0x002DCF,
+ 0x002DD7,
+ 0x002E9A,
+ 0x003040,
+ 0x003130,
+ 0x00318F,
+ 0x00321F,
+ 0x00A7D2,
+ 0x00A7D4,
+ 0x00A802,
+ 0x00A806,
+ 0x00A80B,
+ 0x00A8FF,
+ 0x00A9B3,
+ 0x00A9CE,
+ 0x00A9E5,
+ 0x00A9FF,
+ 0x00AA43,
+ 0x00AA4C,
+ 0x00AA7C,
+ 0x00AAB0,
+ 0x00AAC1,
+ 0x00AB27,
+ 0x00AB2F,
+ 0x00ABE5,
+ 0x00ABE8,
+ 0x00FB1E,
+ 0x00FB37,
+ 0x00FB3D,
+ 0x00FB3F,
+ 0x00FB42,
+ 0x00FB45,
+ 0x00FE53,
+ 0x00FE67,
+ 0x00FE75,
+ 0x00FFE7,
+ 0x01000C,
+ 0x010027,
+ 0x01003B,
+ 0x01003E,
+ 0x01018F,
+ 0x01039E,
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x010596,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA,
+ 0x010786,
+ 0x0107B1,
+ 0x010809,
+ 0x010836,
+ 0x010856,
+ 0x0108F3,
+ 0x010A14,
+ 0x010A18,
+ 0x010E7F,
+ 0x011001,
+ 0x011070,
+ 0x0110BD,
+ 0x011173,
+ 0x0111CF,
+ 0x0111E0,
+ 0x011212,
+ 0x011234,
+ 0x01123E,
+ 0x011287,
+ 0x011289,
+ 0x01128E,
+ 0x01129E,
+ 0x0112DF,
+ 0x011304,
+ 0x011329,
+ 0x011331,
+ 0x011334,
+ 0x01133E,
+ 0x011340,
+ 0x011446,
+ 0x01145C,
+ 0x01145E,
+ 0x0114B0,
+ 0x0114BA,
+ 0x0114BD,
+ 0x0115AF,
+ 0x01163D,
+ 0x0116AB,
+ 0x0116AD,
+ 0x0116B7,
+ 0x011914,
+ 0x011917,
+ 0x011930,
+ 0x011936,
+ 0x01193E,
+ 0x011943,
+ 0x0119E0,
+ 0x011C09,
+ 0x011C3F,
+ 0x011D07,
+ 0x011D0A,
+ 0x011D66,
+ 0x011D69,
+ 0x011D95,
+ 0x011D97,
+ 0x011F11,
+ 0x011F40,
+ 0x011F42,
+ 0x01246F,
+ 0x016A5F,
+ 0x016ABF,
+ 0x016B5A,
+ 0x016B62,
+ 0x01AFF4,
+ 0x01AFFC,
+ 0x01AFFF,
+ 0x01D165,
+ 0x01D455,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D506,
+ 0x01D515,
+ 0x01D51D,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545,
+ 0x01D551,
+ 0x01DA75,
+ 0x01DA84,
+ 0x01E7E7,
+ 0x01E7EC,
+ 0x01E7EF,
+ 0x01E7FF,
+ 0x01EE04,
+ 0x01EE20,
+ 0x01EE23,
+ 0x01EE28,
+ 0x01EE33,
+ 0x01EE38,
+ 0x01EE3A,
+ 0x01EE48,
+ 0x01EE4A,
+ 0x01EE4C,
+ 0x01EE50,
+ 0x01EE53,
+ 0x01EE58,
+ 0x01EE5A,
+ 0x01EE5C,
+ 0x01EE5E,
+ 0x01EE60,
+ 0x01EE63,
+ 0x01EE6B,
+ 0x01EE73,
+ 0x01EE78,
+ 0x01EE7D,
+ 0x01EE7F,
+ 0x01EE8A,
+ 0x01EEA4,
+ 0x01EEAA,
+ 0x01F0C0,
+ 0x01F0D0,
+ 0x01FABE,
+ 0x01FB93
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00001F],
+ [0x00007F, 0x00009F],
+ [0x000300, 0x00036F],
+ [0x000378, 0x000379],
+ [0x000380, 0x000383],
+ [0x000483, 0x000489],
+ [0x000557, 0x000558],
+ [0x00058B, 0x00058C],
+ [0x000590, 0x0005BD],
+ [0x0005C1, 0x0005C2],
+ [0x0005C4, 0x0005C5],
+ [0x0005C7, 0x0005CF],
+ [0x0005EB, 0x0005EE],
+ [0x0005F5, 0x000605],
+ [0x000610, 0x00061A],
+ [0x00064B, 0x00065F],
+ [0x0006D6, 0x0006DD],
+ [0x0006DF, 0x0006E4],
+ [0x0006E7, 0x0006E8],
+ [0x0006EA, 0x0006ED],
+ [0x00070E, 0x00070F],
+ [0x000730, 0x00074C],
+ [0x0007A6, 0x0007B0],
+ [0x0007B2, 0x0007BF],
+ [0x0007EB, 0x0007F3],
+ [0x0007FB, 0x0007FD],
+ [0x000816, 0x000819],
+ [0x00081B, 0x000823],
+ [0x000825, 0x000827],
+ [0x000829, 0x00082F],
+ [0x000859, 0x00085D],
+ [0x00086B, 0x00086F],
+ [0x00088F, 0x00089F],
+ [0x0008CA, 0x000902],
+ [0x000941, 0x000948],
+ [0x000951, 0x000957],
+ [0x000962, 0x000963],
+ [0x00098D, 0x00098E],
+ [0x000991, 0x000992],
+ [0x0009B3, 0x0009B5],
+ [0x0009BA, 0x0009BC],
+ [0x0009C1, 0x0009C6],
+ [0x0009C9, 0x0009CA],
+ [0x0009CF, 0x0009DB],
+ [0x0009E2, 0x0009E5],
+ [0x0009FE, 0x000A02],
+ [0x000A0B, 0x000A0E],
+ [0x000A11, 0x000A12],
+ [0x000A3A, 0x000A3D],
+ [0x000A41, 0x000A58],
+ [0x000A5F, 0x000A65],
+ [0x000A70, 0x000A71],
+ [0x000A77, 0x000A82],
+ [0x000ABA, 0x000ABC],
+ [0x000AC1, 0x000AC8],
+ [0x000ACD, 0x000ACF],
+ [0x000AD1, 0x000ADF],
+ [0x000AE2, 0x000AE5],
+ [0x000AF2, 0x000AF8],
+ [0x000AFA, 0x000B01],
+ [0x000B0D, 0x000B0E],
+ [0x000B11, 0x000B12],
+ [0x000B3A, 0x000B3C],
+ [0x000B3E, 0x000B3F],
+ [0x000B41, 0x000B46],
+ [0x000B49, 0x000B4A],
+ [0x000B4D, 0x000B5B],
+ [0x000B62, 0x000B65],
+ [0x000B78, 0x000B82],
+ [0x000B8B, 0x000B8D],
+ [0x000B96, 0x000B98],
+ [0x000BA0, 0x000BA2],
+ [0x000BA5, 0x000BA7],
+ [0x000BAB, 0x000BAD],
+ [0x000BBA, 0x000BBE],
+ [0x000BC3, 0x000BC5],
+ [0x000BCD, 0x000BCF],
+ [0x000BD1, 0x000BE5],
+ [0x000BFB, 0x000C00],
+ [0x000C3A, 0x000C3C],
+ [0x000C3E, 0x000C40],
+ [0x000C45, 0x000C57],
+ [0x000C5B, 0x000C5C],
+ [0x000C5E, 0x000C5F],
+ [0x000C62, 0x000C65],
+ [0x000C70, 0x000C76],
+ [0x000CBA, 0x000CBC],
+ [0x000CC5, 0x000CC6],
+ [0x000CCC, 0x000CDC],
+ [0x000CE2, 0x000CE5],
+ [0x000CF4, 0x000D01],
+ [0x000D3B, 0x000D3C],
+ [0x000D41, 0x000D45],
+ [0x000D50, 0x000D53],
+ [0x000D62, 0x000D65],
+ [0x000D80, 0x000D81],
+ [0x000D97, 0x000D99],
+ [0x000DBE, 0x000DBF],
+ [0x000DC7, 0x000DCF],
+ [0x000DD2, 0x000DD7],
+ [0x000DDF, 0x000DE5],
+ [0x000DF0, 0x000DF1],
+ [0x000DF5, 0x000E00],
+ [0x000E34, 0x000E3E],
+ [0x000E47, 0x000E4E],
+ [0x000E5C, 0x000E80],
+ [0x000EB4, 0x000EBC],
+ [0x000EBE, 0x000EBF],
+ [0x000EC7, 0x000ECF],
+ [0x000EDA, 0x000EDB],
+ [0x000EE0, 0x000EFF],
+ [0x000F18, 0x000F19],
+ [0x000F6D, 0x000F7E],
+ [0x000F80, 0x000F84],
+ [0x000F86, 0x000F87],
+ [0x000F8D, 0x000FBD],
+ [0x000FDB, 0x000FFF],
+ [0x00102D, 0x001030],
+ [0x001032, 0x001037],
+ [0x001039, 0x00103A],
+ [0x00103D, 0x00103E],
+ [0x001058, 0x001059],
+ [0x00105E, 0x001060],
+ [0x001071, 0x001074],
+ [0x001085, 0x001086],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x0010CF],
+ [0x00124E, 0x00124F],
+ [0x00125E, 0x00125F],
+ [0x00128E, 0x00128F],
+ [0x0012B6, 0x0012B7],
+ [0x0012C6, 0x0012C7],
+ [0x001316, 0x001317],
+ [0x00135B, 0x00135F],
+ [0x00137D, 0x00137F],
+ [0x00139A, 0x00139F],
+ [0x0013F6, 0x0013F7],
+ [0x0013FE, 0x0013FF],
+ [0x00169D, 0x00169F],
+ [0x0016F9, 0x0016FF],
+ [0x001712, 0x001714],
+ [0x001716, 0x00171E],
+ [0x001732, 0x001733],
+ [0x001737, 0x00173F],
+ [0x001752, 0x00175F],
+ [0x001771, 0x00177F],
+ [0x0017B4, 0x0017B5],
+ [0x0017B7, 0x0017BD],
+ [0x0017C9, 0x0017D3],
+ [0x0017DD, 0x0017DF],
+ [0x0017EA, 0x0017EF],
+ [0x0017FA, 0x0017FF],
+ [0x00180B, 0x00180F],
+ [0x00181A, 0x00181F],
+ [0x001879, 0x00187F],
+ [0x001885, 0x001886],
+ [0x0018AB, 0x0018AF],
+ [0x0018F6, 0x0018FF],
+ [0x00191F, 0x001922],
+ [0x001927, 0x001928],
+ [0x00192C, 0x00192F],
+ [0x001939, 0x00193F],
+ [0x001941, 0x001943],
+ [0x00196E, 0x00196F],
+ [0x001975, 0x00197F],
+ [0x0019AC, 0x0019AF],
+ [0x0019CA, 0x0019CF],
+ [0x0019DB, 0x0019DD],
+ [0x001A17, 0x001A18],
+ [0x001A1B, 0x001A1D],
+ [0x001A58, 0x001A60],
+ [0x001A65, 0x001A6C],
+ [0x001A73, 0x001A7F],
+ [0x001A8A, 0x001A8F],
+ [0x001A9A, 0x001A9F],
+ [0x001AAE, 0x001B03],
+ [0x001B34, 0x001B3A],
+ [0x001B4D, 0x001B4F],
+ [0x001B6B, 0x001B73],
+ [0x001B7F, 0x001B81],
+ [0x001BA2, 0x001BA5],
+ [0x001BA8, 0x001BA9],
+ [0x001BAB, 0x001BAD],
+ [0x001BE8, 0x001BE9],
+ [0x001BEF, 0x001BF1],
+ [0x001BF4, 0x001BFB],
+ [0x001C2C, 0x001C33],
+ [0x001C36, 0x001C3A],
+ [0x001C4A, 0x001C4C],
+ [0x001C89, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC8, 0x001CD2],
+ [0x001CD4, 0x001CE0],
+ [0x001CE2, 0x001CE8],
+ [0x001CF8, 0x001CF9],
+ [0x001CFB, 0x001CFF],
+ [0x001DC0, 0x001DFF],
+ [0x001F16, 0x001F17],
+ [0x001F1E, 0x001F1F],
+ [0x001F46, 0x001F47],
+ [0x001F4E, 0x001F4F],
+ [0x001F7E, 0x001F7F],
+ [0x001FD4, 0x001FD5],
+ [0x001FF0, 0x001FF1],
+ [0x00200B, 0x00200F],
+ [0x002028, 0x00202E],
+ [0x002060, 0x00206F],
+ [0x002072, 0x002073],
+ [0x00209D, 0x00209F],
+ [0x0020C1, 0x0020FF],
+ [0x00218C, 0x00218F],
+ [0x002427, 0x00243F],
+ [0x00244B, 0x00245F],
+ [0x002B74, 0x002B75],
+ [0x002CEF, 0x002CF1],
+ [0x002CF4, 0x002CF8],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x002D2F],
+ [0x002D68, 0x002D6E],
+ [0x002D71, 0x002D7F],
+ [0x002D97, 0x002D9F],
+ [0x002DDF, 0x002DFF],
+ [0x002E5E, 0x002E7F],
+ [0x002EF4, 0x002EFF],
+ [0x002FD6, 0x002FEF],
+ [0x002FFC, 0x002FFF],
+ [0x00302A, 0x00302F],
+ [0x003097, 0x00309A],
+ [0x003100, 0x003104],
+ [0x0031E4, 0x0031EF],
+ [0x00A48D, 0x00A48F],
+ [0x00A4C7, 0x00A4CF],
+ [0x00A62C, 0x00A63F],
+ [0x00A66F, 0x00A672],
+ [0x00A674, 0x00A67D],
+ [0x00A69E, 0x00A69F],
+ [0x00A6F0, 0x00A6F1],
+ [0x00A6F8, 0x00A6FF],
+ [0x00A7CB, 0x00A7CF],
+ [0x00A7DA, 0x00A7F1],
+ [0x00A825, 0x00A826],
+ [0x00A82C, 0x00A82F],
+ [0x00A83A, 0x00A83F],
+ [0x00A878, 0x00A87F],
+ [0x00A8C4, 0x00A8CD],
+ [0x00A8DA, 0x00A8F1],
+ [0x00A926, 0x00A92D],
+ [0x00A947, 0x00A951],
+ [0x00A954, 0x00A95E],
+ [0x00A97D, 0x00A982],
+ [0x00A9B6, 0x00A9B9],
+ [0x00A9BC, 0x00A9BD],
+ [0x00A9DA, 0x00A9DD],
+ [0x00AA29, 0x00AA2E],
+ [0x00AA31, 0x00AA32],
+ [0x00AA35, 0x00AA3F],
+ [0x00AA4E, 0x00AA4F],
+ [0x00AA5A, 0x00AA5B],
+ [0x00AAB2, 0x00AAB4],
+ [0x00AAB7, 0x00AAB8],
+ [0x00AABE, 0x00AABF],
+ [0x00AAC3, 0x00AADA],
+ [0x00AAEC, 0x00AAED],
+ [0x00AAF6, 0x00AB00],
+ [0x00AB07, 0x00AB08],
+ [0x00AB0F, 0x00AB10],
+ [0x00AB17, 0x00AB1F],
+ [0x00AB6C, 0x00AB6F],
+ [0x00ABED, 0x00ABEF],
+ [0x00ABFA, 0x00ABFF],
+ [0x00D7A4, 0x00D7AF],
+ [0x00D7C7, 0x00D7CA],
+ [0x00D7FC, 0x00DBFF],
+ [0x00E000, 0x00F8FF],
+ [0x00FA6E, 0x00FA6F],
+ [0x00FADA, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FB1C],
+ [0x00FBC3, 0x00FBD2],
+ [0x00FD90, 0x00FD91],
+ [0x00FDC8, 0x00FDCE],
+ [0x00FDD0, 0x00FDEF],
+ [0x00FE00, 0x00FE0F],
+ [0x00FE1A, 0x00FE2F],
+ [0x00FE6C, 0x00FE6F],
+ [0x00FEFD, 0x00FF00],
+ [0x00FF9E, 0x00FF9F],
+ [0x00FFBF, 0x00FFC1],
+ [0x00FFC8, 0x00FFC9],
+ [0x00FFD0, 0x00FFD1],
+ [0x00FFD8, 0x00FFD9],
+ [0x00FFDD, 0x00FFDF],
+ [0x00FFEF, 0x00FFFB],
+ [0x00FFFE, 0x00FFFF],
+ [0x01004E, 0x01004F],
+ [0x01005E, 0x01007F],
+ [0x0100FB, 0x0100FF],
+ [0x010103, 0x010106],
+ [0x010134, 0x010136],
+ [0x01019D, 0x01019F],
+ [0x0101A1, 0x0101CF],
+ [0x0101FD, 0x01027F],
+ [0x01029D, 0x01029F],
+ [0x0102D1, 0x0102E0],
+ [0x0102FC, 0x0102FF],
+ [0x010324, 0x01032C],
+ [0x01034B, 0x01034F],
+ [0x010376, 0x01037F],
+ [0x0103C4, 0x0103C7],
+ [0x0103D6, 0x0103FF],
+ [0x01049E, 0x01049F],
+ [0x0104AA, 0x0104AF],
+ [0x0104D4, 0x0104D7],
+ [0x0104FC, 0x0104FF],
+ [0x010528, 0x01052F],
+ [0x010564, 0x01056E],
+ [0x0105BD, 0x0105FF],
+ [0x010737, 0x01073F],
+ [0x010756, 0x01075F],
+ [0x010768, 0x01077F],
+ [0x0107BB, 0x0107FF],
+ [0x010806, 0x010807],
+ [0x010839, 0x01083B],
+ [0x01083D, 0x01083E],
+ [0x01089F, 0x0108A6],
+ [0x0108B0, 0x0108DF],
+ [0x0108F6, 0x0108FA],
+ [0x01091C, 0x01091E],
+ [0x01093A, 0x01093E],
+ [0x010940, 0x01097F],
+ [0x0109B8, 0x0109BB],
+ [0x0109D0, 0x0109D1],
+ [0x010A01, 0x010A0F],
+ [0x010A36, 0x010A3F],
+ [0x010A49, 0x010A4F],
+ [0x010A59, 0x010A5F],
+ [0x010AA0, 0x010ABF],
+ [0x010AE5, 0x010AEA],
+ [0x010AF7, 0x010AFF],
+ [0x010B36, 0x010B38],
+ [0x010B56, 0x010B57],
+ [0x010B73, 0x010B77],
+ [0x010B92, 0x010B98],
+ [0x010B9D, 0x010BA8],
+ [0x010BB0, 0x010BFF],
+ [0x010C49, 0x010C7F],
+ [0x010CB3, 0x010CBF],
+ [0x010CF3, 0x010CF9],
+ [0x010D24, 0x010D2F],
+ [0x010D3A, 0x010E5F],
+ [0x010EAA, 0x010EAC],
+ [0x010EAE, 0x010EAF],
+ [0x010EB2, 0x010EFF],
+ [0x010F28, 0x010F2F],
+ [0x010F46, 0x010F50],
+ [0x010F5A, 0x010F6F],
+ [0x010F82, 0x010F85],
+ [0x010F8A, 0x010FAF],
+ [0x010FCC, 0x010FDF],
+ [0x010FF7, 0x010FFF],
+ [0x011038, 0x011046],
+ [0x01104E, 0x011051],
+ [0x011073, 0x011074],
+ [0x011076, 0x011081],
+ [0x0110B3, 0x0110B6],
+ [0x0110B9, 0x0110BA],
+ [0x0110C2, 0x0110CF],
+ [0x0110E9, 0x0110EF],
+ [0x0110FA, 0x011102],
+ [0x011127, 0x01112B],
+ [0x01112D, 0x011135],
+ [0x011148, 0x01114F],
+ [0x011177, 0x011181],
+ [0x0111B6, 0x0111BE],
+ [0x0111C9, 0x0111CC],
+ [0x0111F5, 0x0111FF],
+ [0x01122F, 0x011231],
+ [0x011236, 0x011237],
+ [0x011241, 0x01127F],
+ [0x0112AA, 0x0112AF],
+ [0x0112E3, 0x0112EF],
+ [0x0112FA, 0x011301],
+ [0x01130D, 0x01130E],
+ [0x011311, 0x011312],
+ [0x01133A, 0x01133C],
+ [0x011345, 0x011346],
+ [0x011349, 0x01134A],
+ [0x01134E, 0x01134F],
+ [0x011351, 0x01135C],
+ [0x011364, 0x0113FF],
+ [0x011438, 0x01143F],
+ [0x011442, 0x011444],
+ [0x011462, 0x01147F],
+ [0x0114B3, 0x0114B8],
+ [0x0114BF, 0x0114C0],
+ [0x0114C2, 0x0114C3],
+ [0x0114C8, 0x0114CF],
+ [0x0114DA, 0x01157F],
+ [0x0115B2, 0x0115B7],
+ [0x0115BC, 0x0115BD],
+ [0x0115BF, 0x0115C0],
+ [0x0115DC, 0x0115FF],
+ [0x011633, 0x01163A],
+ [0x01163F, 0x011640],
+ [0x011645, 0x01164F],
+ [0x01165A, 0x01165F],
+ [0x01166D, 0x01167F],
+ [0x0116B0, 0x0116B5],
+ [0x0116BA, 0x0116BF],
+ [0x0116CA, 0x0116FF],
+ [0x01171B, 0x01171F],
+ [0x011722, 0x011725],
+ [0x011727, 0x01172F],
+ [0x011747, 0x0117FF],
+ [0x01182F, 0x011837],
+ [0x011839, 0x01183A],
+ [0x01183C, 0x01189F],
+ [0x0118F3, 0x0118FE],
+ [0x011907, 0x011908],
+ [0x01190A, 0x01190B],
+ [0x011939, 0x01193C],
+ [0x011947, 0x01194F],
+ [0x01195A, 0x01199F],
+ [0x0119A8, 0x0119A9],
+ [0x0119D4, 0x0119DB],
+ [0x0119E5, 0x0119FF],
+ [0x011A01, 0x011A0A],
+ [0x011A33, 0x011A38],
+ [0x011A3B, 0x011A3E],
+ [0x011A47, 0x011A4F],
+ [0x011A51, 0x011A56],
+ [0x011A59, 0x011A5B],
+ [0x011A8A, 0x011A96],
+ [0x011A98, 0x011A99],
+ [0x011AA3, 0x011AAF],
+ [0x011AF9, 0x011AFF],
+ [0x011B0A, 0x011BFF],
+ [0x011C30, 0x011C3D],
+ [0x011C46, 0x011C4F],
+ [0x011C6D, 0x011C6F],
+ [0x011C90, 0x011CA8],
+ [0x011CAA, 0x011CB0],
+ [0x011CB2, 0x011CB3],
+ [0x011CB5, 0x011CFF],
+ [0x011D31, 0x011D45],
+ [0x011D47, 0x011D4F],
+ [0x011D5A, 0x011D5F],
+ [0x011D8F, 0x011D92],
+ [0x011D99, 0x011D9F],
+ [0x011DAA, 0x011EDF],
+ [0x011EF3, 0x011EF4],
+ [0x011EF9, 0x011F01],
+ [0x011F36, 0x011F3D],
+ [0x011F5A, 0x011FAF],
+ [0x011FB1, 0x011FBF],
+ [0x011FF2, 0x011FFE],
+ [0x01239A, 0x0123FF],
+ [0x012475, 0x01247F],
+ [0x012544, 0x012F8F],
+ [0x012FF3, 0x012FFF],
+ [0x013430, 0x013440],
+ [0x013447, 0x0143FF],
+ [0x014647, 0x0167FF],
+ [0x016A39, 0x016A3F],
+ [0x016A6A, 0x016A6D],
+ [0x016ACA, 0x016ACF],
+ [0x016AEE, 0x016AF4],
+ [0x016AF6, 0x016AFF],
+ [0x016B30, 0x016B36],
+ [0x016B46, 0x016B4F],
+ [0x016B78, 0x016B7C],
+ [0x016B90, 0x016E3F],
+ [0x016E9B, 0x016EFF],
+ [0x016F4B, 0x016F4F],
+ [0x016F88, 0x016F92],
+ [0x016FA0, 0x016FDF],
+ [0x016FE4, 0x016FEF],
+ [0x016FF2, 0x016FFF],
+ [0x0187F8, 0x0187FF],
+ [0x018CD6, 0x018CFF],
+ [0x018D09, 0x01AFEF],
+ [0x01B123, 0x01B131],
+ [0x01B133, 0x01B14F],
+ [0x01B153, 0x01B154],
+ [0x01B156, 0x01B163],
+ [0x01B168, 0x01B16F],
+ [0x01B2FC, 0x01BBFF],
+ [0x01BC6B, 0x01BC6F],
+ [0x01BC7D, 0x01BC7F],
+ [0x01BC89, 0x01BC8F],
+ [0x01BC9A, 0x01BC9B],
+ [0x01BC9D, 0x01BC9E],
+ [0x01BCA0, 0x01CF4F],
+ [0x01CFC4, 0x01CFFF],
+ [0x01D0F6, 0x01D0FF],
+ [0x01D127, 0x01D128],
+ [0x01D167, 0x01D169],
+ [0x01D16E, 0x01D182],
+ [0x01D185, 0x01D18B],
+ [0x01D1AA, 0x01D1AD],
+ [0x01D1EB, 0x01D1FF],
+ [0x01D242, 0x01D244],
+ [0x01D246, 0x01D2BF],
+ [0x01D2D4, 0x01D2DF],
+ [0x01D2F4, 0x01D2FF],
+ [0x01D357, 0x01D35F],
+ [0x01D379, 0x01D3FF],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D50B, 0x01D50C],
+ [0x01D547, 0x01D549],
+ [0x01D6A6, 0x01D6A7],
+ [0x01D7CC, 0x01D7CD],
+ [0x01DA00, 0x01DA36],
+ [0x01DA3B, 0x01DA6C],
+ [0x01DA8C, 0x01DEFF],
+ [0x01DF1F, 0x01DF24],
+ [0x01DF2B, 0x01E02F],
+ [0x01E06E, 0x01E0FF],
+ [0x01E12D, 0x01E136],
+ [0x01E13E, 0x01E13F],
+ [0x01E14A, 0x01E14D],
+ [0x01E150, 0x01E28F],
+ [0x01E2AE, 0x01E2BF],
+ [0x01E2EC, 0x01E2EF],
+ [0x01E2FA, 0x01E2FE],
+ [0x01E300, 0x01E4CF],
+ [0x01E4EC, 0x01E4EF],
+ [0x01E4FA, 0x01E7DF],
+ [0x01E8C5, 0x01E8C6],
+ [0x01E8D0, 0x01E8FF],
+ [0x01E944, 0x01E94A],
+ [0x01E94C, 0x01E94F],
+ [0x01E95A, 0x01E95D],
+ [0x01E960, 0x01EC70],
+ [0x01ECB5, 0x01ED00],
+ [0x01ED3E, 0x01EDFF],
+ [0x01EE25, 0x01EE26],
+ [0x01EE3C, 0x01EE41],
+ [0x01EE43, 0x01EE46],
+ [0x01EE55, 0x01EE56],
+ [0x01EE65, 0x01EE66],
+ [0x01EE9C, 0x01EEA0],
+ [0x01EEBC, 0x01EEEF],
+ [0x01EEF2, 0x01EFFF],
+ [0x01F02C, 0x01F02F],
+ [0x01F094, 0x01F09F],
+ [0x01F0AF, 0x01F0B0],
+ [0x01F0F6, 0x01F0FF],
+ [0x01F1AE, 0x01F1E5],
+ [0x01F203, 0x01F20F],
+ [0x01F23C, 0x01F23F],
+ [0x01F249, 0x01F24F],
+ [0x01F252, 0x01F25F],
+ [0x01F266, 0x01F2FF],
+ [0x01F6D8, 0x01F6DB],
+ [0x01F6ED, 0x01F6EF],
+ [0x01F6FD, 0x01F6FF],
+ [0x01F777, 0x01F77A],
+ [0x01F7DA, 0x01F7DF],
+ [0x01F7EC, 0x01F7EF],
+ [0x01F7F1, 0x01F7FF],
+ [0x01F80C, 0x01F80F],
+ [0x01F848, 0x01F84F],
+ [0x01F85A, 0x01F85F],
+ [0x01F888, 0x01F88F],
+ [0x01F8AE, 0x01F8AF],
+ [0x01F8B2, 0x01F8FF],
+ [0x01FA54, 0x01FA5F],
+ [0x01FA6E, 0x01FA6F],
+ [0x01FA7D, 0x01FA7F],
+ [0x01FA89, 0x01FA8F],
+ [0x01FAC6, 0x01FACD],
+ [0x01FADC, 0x01FADF],
+ [0x01FAE9, 0x01FAEF],
+ [0x01FAF9, 0x01FAFF],
+ [0x01FBCB, 0x01FBEF],
+ [0x01FBFA, 0x01FFFF],
+ [0x02A6E0, 0x02A6FF],
+ [0x02B73A, 0x02B73F],
+ [0x02B81E, 0x02B81F],
+ [0x02CEA2, 0x02CEAF],
+ [0x02EBE1, 0x02F7FF],
+ [0x02FA1E, 0x02FFFF],
+ [0x03134B, 0x03134F],
+ [0x0323B0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Grapheme_Base}+$/u,
+ nonMatchSymbols,
+ "\\P{Grapheme_Base}"
+);
+testPropertyEscapes(
+ /^\P{Gr_Base}+$/u,
+ nonMatchSymbols,
+ "\\P{Gr_Base}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Grapheme_Extend.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Grapheme_Extend.js
new file mode 100644
index 0000000000..c4b5f40366
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Grapheme_Extend.js
@@ -0,0 +1,779 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Grapheme_Extend`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0005BF,
+ 0x0005C7,
+ 0x000670,
+ 0x000711,
+ 0x0007FD,
+ 0x00093A,
+ 0x00093C,
+ 0x00094D,
+ 0x000981,
+ 0x0009BC,
+ 0x0009BE,
+ 0x0009CD,
+ 0x0009D7,
+ 0x0009FE,
+ 0x000A3C,
+ 0x000A51,
+ 0x000A75,
+ 0x000ABC,
+ 0x000ACD,
+ 0x000B01,
+ 0x000B3C,
+ 0x000B4D,
+ 0x000B82,
+ 0x000BBE,
+ 0x000BC0,
+ 0x000BCD,
+ 0x000BD7,
+ 0x000C00,
+ 0x000C04,
+ 0x000C3C,
+ 0x000C81,
+ 0x000CBC,
+ 0x000CBF,
+ 0x000CC2,
+ 0x000CC6,
+ 0x000D3E,
+ 0x000D4D,
+ 0x000D57,
+ 0x000D81,
+ 0x000DCA,
+ 0x000DCF,
+ 0x000DD6,
+ 0x000DDF,
+ 0x000E31,
+ 0x000EB1,
+ 0x000F35,
+ 0x000F37,
+ 0x000F39,
+ 0x000FC6,
+ 0x001082,
+ 0x00108D,
+ 0x00109D,
+ 0x0017C6,
+ 0x0017DD,
+ 0x00180F,
+ 0x0018A9,
+ 0x001932,
+ 0x001A1B,
+ 0x001A56,
+ 0x001A60,
+ 0x001A62,
+ 0x001A7F,
+ 0x001B3C,
+ 0x001B42,
+ 0x001BE6,
+ 0x001BED,
+ 0x001CED,
+ 0x001CF4,
+ 0x00200C,
+ 0x002D7F,
+ 0x00A802,
+ 0x00A806,
+ 0x00A80B,
+ 0x00A82C,
+ 0x00A8FF,
+ 0x00A9B3,
+ 0x00A9E5,
+ 0x00AA43,
+ 0x00AA4C,
+ 0x00AA7C,
+ 0x00AAB0,
+ 0x00AAC1,
+ 0x00AAF6,
+ 0x00ABE5,
+ 0x00ABE8,
+ 0x00ABED,
+ 0x00FB1E,
+ 0x0101FD,
+ 0x0102E0,
+ 0x010A3F,
+ 0x011001,
+ 0x011070,
+ 0x0110C2,
+ 0x011173,
+ 0x0111CF,
+ 0x011234,
+ 0x01123E,
+ 0x011241,
+ 0x0112DF,
+ 0x01133E,
+ 0x011340,
+ 0x011357,
+ 0x011446,
+ 0x01145E,
+ 0x0114B0,
+ 0x0114BA,
+ 0x0114BD,
+ 0x0115AF,
+ 0x01163D,
+ 0x0116AB,
+ 0x0116AD,
+ 0x0116B7,
+ 0x011930,
+ 0x01193E,
+ 0x011943,
+ 0x0119E0,
+ 0x011A47,
+ 0x011C3F,
+ 0x011D3A,
+ 0x011D47,
+ 0x011D95,
+ 0x011D97,
+ 0x011F40,
+ 0x011F42,
+ 0x013440,
+ 0x016F4F,
+ 0x016FE4,
+ 0x01D165,
+ 0x01DA75,
+ 0x01DA84,
+ 0x01E08F,
+ 0x01E2AE
+ ],
+ ranges: [
+ [0x000300, 0x00036F],
+ [0x000483, 0x000489],
+ [0x000591, 0x0005BD],
+ [0x0005C1, 0x0005C2],
+ [0x0005C4, 0x0005C5],
+ [0x000610, 0x00061A],
+ [0x00064B, 0x00065F],
+ [0x0006D6, 0x0006DC],
+ [0x0006DF, 0x0006E4],
+ [0x0006E7, 0x0006E8],
+ [0x0006EA, 0x0006ED],
+ [0x000730, 0x00074A],
+ [0x0007A6, 0x0007B0],
+ [0x0007EB, 0x0007F3],
+ [0x000816, 0x000819],
+ [0x00081B, 0x000823],
+ [0x000825, 0x000827],
+ [0x000829, 0x00082D],
+ [0x000859, 0x00085B],
+ [0x000898, 0x00089F],
+ [0x0008CA, 0x0008E1],
+ [0x0008E3, 0x000902],
+ [0x000941, 0x000948],
+ [0x000951, 0x000957],
+ [0x000962, 0x000963],
+ [0x0009C1, 0x0009C4],
+ [0x0009E2, 0x0009E3],
+ [0x000A01, 0x000A02],
+ [0x000A41, 0x000A42],
+ [0x000A47, 0x000A48],
+ [0x000A4B, 0x000A4D],
+ [0x000A70, 0x000A71],
+ [0x000A81, 0x000A82],
+ [0x000AC1, 0x000AC5],
+ [0x000AC7, 0x000AC8],
+ [0x000AE2, 0x000AE3],
+ [0x000AFA, 0x000AFF],
+ [0x000B3E, 0x000B3F],
+ [0x000B41, 0x000B44],
+ [0x000B55, 0x000B57],
+ [0x000B62, 0x000B63],
+ [0x000C3E, 0x000C40],
+ [0x000C46, 0x000C48],
+ [0x000C4A, 0x000C4D],
+ [0x000C55, 0x000C56],
+ [0x000C62, 0x000C63],
+ [0x000CCC, 0x000CCD],
+ [0x000CD5, 0x000CD6],
+ [0x000CE2, 0x000CE3],
+ [0x000D00, 0x000D01],
+ [0x000D3B, 0x000D3C],
+ [0x000D41, 0x000D44],
+ [0x000D62, 0x000D63],
+ [0x000DD2, 0x000DD4],
+ [0x000E34, 0x000E3A],
+ [0x000E47, 0x000E4E],
+ [0x000EB4, 0x000EBC],
+ [0x000EC8, 0x000ECE],
+ [0x000F18, 0x000F19],
+ [0x000F71, 0x000F7E],
+ [0x000F80, 0x000F84],
+ [0x000F86, 0x000F87],
+ [0x000F8D, 0x000F97],
+ [0x000F99, 0x000FBC],
+ [0x00102D, 0x001030],
+ [0x001032, 0x001037],
+ [0x001039, 0x00103A],
+ [0x00103D, 0x00103E],
+ [0x001058, 0x001059],
+ [0x00105E, 0x001060],
+ [0x001071, 0x001074],
+ [0x001085, 0x001086],
+ [0x00135D, 0x00135F],
+ [0x001712, 0x001714],
+ [0x001732, 0x001733],
+ [0x001752, 0x001753],
+ [0x001772, 0x001773],
+ [0x0017B4, 0x0017B5],
+ [0x0017B7, 0x0017BD],
+ [0x0017C9, 0x0017D3],
+ [0x00180B, 0x00180D],
+ [0x001885, 0x001886],
+ [0x001920, 0x001922],
+ [0x001927, 0x001928],
+ [0x001939, 0x00193B],
+ [0x001A17, 0x001A18],
+ [0x001A58, 0x001A5E],
+ [0x001A65, 0x001A6C],
+ [0x001A73, 0x001A7C],
+ [0x001AB0, 0x001ACE],
+ [0x001B00, 0x001B03],
+ [0x001B34, 0x001B3A],
+ [0x001B6B, 0x001B73],
+ [0x001B80, 0x001B81],
+ [0x001BA2, 0x001BA5],
+ [0x001BA8, 0x001BA9],
+ [0x001BAB, 0x001BAD],
+ [0x001BE8, 0x001BE9],
+ [0x001BEF, 0x001BF1],
+ [0x001C2C, 0x001C33],
+ [0x001C36, 0x001C37],
+ [0x001CD0, 0x001CD2],
+ [0x001CD4, 0x001CE0],
+ [0x001CE2, 0x001CE8],
+ [0x001CF8, 0x001CF9],
+ [0x001DC0, 0x001DFF],
+ [0x0020D0, 0x0020F0],
+ [0x002CEF, 0x002CF1],
+ [0x002DE0, 0x002DFF],
+ [0x00302A, 0x00302F],
+ [0x003099, 0x00309A],
+ [0x00A66F, 0x00A672],
+ [0x00A674, 0x00A67D],
+ [0x00A69E, 0x00A69F],
+ [0x00A6F0, 0x00A6F1],
+ [0x00A825, 0x00A826],
+ [0x00A8C4, 0x00A8C5],
+ [0x00A8E0, 0x00A8F1],
+ [0x00A926, 0x00A92D],
+ [0x00A947, 0x00A951],
+ [0x00A980, 0x00A982],
+ [0x00A9B6, 0x00A9B9],
+ [0x00A9BC, 0x00A9BD],
+ [0x00AA29, 0x00AA2E],
+ [0x00AA31, 0x00AA32],
+ [0x00AA35, 0x00AA36],
+ [0x00AAB2, 0x00AAB4],
+ [0x00AAB7, 0x00AAB8],
+ [0x00AABE, 0x00AABF],
+ [0x00AAEC, 0x00AAED],
+ [0x00FE00, 0x00FE0F],
+ [0x00FE20, 0x00FE2F],
+ [0x00FF9E, 0x00FF9F],
+ [0x010376, 0x01037A],
+ [0x010A01, 0x010A03],
+ [0x010A05, 0x010A06],
+ [0x010A0C, 0x010A0F],
+ [0x010A38, 0x010A3A],
+ [0x010AE5, 0x010AE6],
+ [0x010D24, 0x010D27],
+ [0x010EAB, 0x010EAC],
+ [0x010EFD, 0x010EFF],
+ [0x010F46, 0x010F50],
+ [0x010F82, 0x010F85],
+ [0x011038, 0x011046],
+ [0x011073, 0x011074],
+ [0x01107F, 0x011081],
+ [0x0110B3, 0x0110B6],
+ [0x0110B9, 0x0110BA],
+ [0x011100, 0x011102],
+ [0x011127, 0x01112B],
+ [0x01112D, 0x011134],
+ [0x011180, 0x011181],
+ [0x0111B6, 0x0111BE],
+ [0x0111C9, 0x0111CC],
+ [0x01122F, 0x011231],
+ [0x011236, 0x011237],
+ [0x0112E3, 0x0112EA],
+ [0x011300, 0x011301],
+ [0x01133B, 0x01133C],
+ [0x011366, 0x01136C],
+ [0x011370, 0x011374],
+ [0x011438, 0x01143F],
+ [0x011442, 0x011444],
+ [0x0114B3, 0x0114B8],
+ [0x0114BF, 0x0114C0],
+ [0x0114C2, 0x0114C3],
+ [0x0115B2, 0x0115B5],
+ [0x0115BC, 0x0115BD],
+ [0x0115BF, 0x0115C0],
+ [0x0115DC, 0x0115DD],
+ [0x011633, 0x01163A],
+ [0x01163F, 0x011640],
+ [0x0116B0, 0x0116B5],
+ [0x01171D, 0x01171F],
+ [0x011722, 0x011725],
+ [0x011727, 0x01172B],
+ [0x01182F, 0x011837],
+ [0x011839, 0x01183A],
+ [0x01193B, 0x01193C],
+ [0x0119D4, 0x0119D7],
+ [0x0119DA, 0x0119DB],
+ [0x011A01, 0x011A0A],
+ [0x011A33, 0x011A38],
+ [0x011A3B, 0x011A3E],
+ [0x011A51, 0x011A56],
+ [0x011A59, 0x011A5B],
+ [0x011A8A, 0x011A96],
+ [0x011A98, 0x011A99],
+ [0x011C30, 0x011C36],
+ [0x011C38, 0x011C3D],
+ [0x011C92, 0x011CA7],
+ [0x011CAA, 0x011CB0],
+ [0x011CB2, 0x011CB3],
+ [0x011CB5, 0x011CB6],
+ [0x011D31, 0x011D36],
+ [0x011D3C, 0x011D3D],
+ [0x011D3F, 0x011D45],
+ [0x011D90, 0x011D91],
+ [0x011EF3, 0x011EF4],
+ [0x011F00, 0x011F01],
+ [0x011F36, 0x011F3A],
+ [0x013447, 0x013455],
+ [0x016AF0, 0x016AF4],
+ [0x016B30, 0x016B36],
+ [0x016F8F, 0x016F92],
+ [0x01BC9D, 0x01BC9E],
+ [0x01CF00, 0x01CF2D],
+ [0x01CF30, 0x01CF46],
+ [0x01D167, 0x01D169],
+ [0x01D16E, 0x01D172],
+ [0x01D17B, 0x01D182],
+ [0x01D185, 0x01D18B],
+ [0x01D1AA, 0x01D1AD],
+ [0x01D242, 0x01D244],
+ [0x01DA00, 0x01DA36],
+ [0x01DA3B, 0x01DA6C],
+ [0x01DA9B, 0x01DA9F],
+ [0x01DAA1, 0x01DAAF],
+ [0x01E000, 0x01E006],
+ [0x01E008, 0x01E018],
+ [0x01E01B, 0x01E021],
+ [0x01E023, 0x01E024],
+ [0x01E026, 0x01E02A],
+ [0x01E130, 0x01E136],
+ [0x01E2EC, 0x01E2EF],
+ [0x01E4EC, 0x01E4EF],
+ [0x01E8D0, 0x01E8D6],
+ [0x01E944, 0x01E94A],
+ [0x0E0020, 0x0E007F],
+ [0x0E0100, 0x0E01EF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Grapheme_Extend}+$/u,
+ matchSymbols,
+ "\\p{Grapheme_Extend}"
+);
+testPropertyEscapes(
+ /^\p{Gr_Ext}+$/u,
+ matchSymbols,
+ "\\p{Gr_Ext}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0005BE,
+ 0x0005C0,
+ 0x0005C3,
+ 0x0005C6,
+ 0x0006E9,
+ 0x00081A,
+ 0x000824,
+ 0x000828,
+ 0x0008E2,
+ 0x00093B,
+ 0x0009BD,
+ 0x000AC6,
+ 0x000B00,
+ 0x000B3D,
+ 0x000B40,
+ 0x000BBF,
+ 0x000C3D,
+ 0x000C49,
+ 0x000D3D,
+ 0x000DD5,
+ 0x000F36,
+ 0x000F38,
+ 0x000F7F,
+ 0x000F85,
+ 0x000F98,
+ 0x001031,
+ 0x001038,
+ 0x0017B6,
+ 0x00180E,
+ 0x001A57,
+ 0x001A5F,
+ 0x001A61,
+ 0x001B3B,
+ 0x001BAA,
+ 0x001BE7,
+ 0x001BEE,
+ 0x001CD3,
+ 0x001CE1,
+ 0x00A673,
+ 0x00AAB1,
+ 0x00AAC0,
+ 0x010A04,
+ 0x01112C,
+ 0x011235,
+ 0x01133D,
+ 0x01133F,
+ 0x011445,
+ 0x0114B9,
+ 0x0114BE,
+ 0x0114C1,
+ 0x0115BE,
+ 0x01163E,
+ 0x0116AC,
+ 0x0116B6,
+ 0x011726,
+ 0x011838,
+ 0x01193D,
+ 0x011A97,
+ 0x011C37,
+ 0x011C3E,
+ 0x011CB1,
+ 0x011CB4,
+ 0x011D3B,
+ 0x011D3E,
+ 0x011D46,
+ 0x011D96,
+ 0x011F41,
+ 0x01D166,
+ 0x01DAA0,
+ 0x01E007,
+ 0x01E022,
+ 0x01E025
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0002FF],
+ [0x000370, 0x000482],
+ [0x00048A, 0x000590],
+ [0x0005C8, 0x00060F],
+ [0x00061B, 0x00064A],
+ [0x000660, 0x00066F],
+ [0x000671, 0x0006D5],
+ [0x0006DD, 0x0006DE],
+ [0x0006E5, 0x0006E6],
+ [0x0006EE, 0x000710],
+ [0x000712, 0x00072F],
+ [0x00074B, 0x0007A5],
+ [0x0007B1, 0x0007EA],
+ [0x0007F4, 0x0007FC],
+ [0x0007FE, 0x000815],
+ [0x00082E, 0x000858],
+ [0x00085C, 0x000897],
+ [0x0008A0, 0x0008C9],
+ [0x000903, 0x000939],
+ [0x00093D, 0x000940],
+ [0x000949, 0x00094C],
+ [0x00094E, 0x000950],
+ [0x000958, 0x000961],
+ [0x000964, 0x000980],
+ [0x000982, 0x0009BB],
+ [0x0009BF, 0x0009C0],
+ [0x0009C5, 0x0009CC],
+ [0x0009CE, 0x0009D6],
+ [0x0009D8, 0x0009E1],
+ [0x0009E4, 0x0009FD],
+ [0x0009FF, 0x000A00],
+ [0x000A03, 0x000A3B],
+ [0x000A3D, 0x000A40],
+ [0x000A43, 0x000A46],
+ [0x000A49, 0x000A4A],
+ [0x000A4E, 0x000A50],
+ [0x000A52, 0x000A6F],
+ [0x000A72, 0x000A74],
+ [0x000A76, 0x000A80],
+ [0x000A83, 0x000ABB],
+ [0x000ABD, 0x000AC0],
+ [0x000AC9, 0x000ACC],
+ [0x000ACE, 0x000AE1],
+ [0x000AE4, 0x000AF9],
+ [0x000B02, 0x000B3B],
+ [0x000B45, 0x000B4C],
+ [0x000B4E, 0x000B54],
+ [0x000B58, 0x000B61],
+ [0x000B64, 0x000B81],
+ [0x000B83, 0x000BBD],
+ [0x000BC1, 0x000BCC],
+ [0x000BCE, 0x000BD6],
+ [0x000BD8, 0x000BFF],
+ [0x000C01, 0x000C03],
+ [0x000C05, 0x000C3B],
+ [0x000C41, 0x000C45],
+ [0x000C4E, 0x000C54],
+ [0x000C57, 0x000C61],
+ [0x000C64, 0x000C80],
+ [0x000C82, 0x000CBB],
+ [0x000CBD, 0x000CBE],
+ [0x000CC0, 0x000CC1],
+ [0x000CC3, 0x000CC5],
+ [0x000CC7, 0x000CCB],
+ [0x000CCE, 0x000CD4],
+ [0x000CD7, 0x000CE1],
+ [0x000CE4, 0x000CFF],
+ [0x000D02, 0x000D3A],
+ [0x000D3F, 0x000D40],
+ [0x000D45, 0x000D4C],
+ [0x000D4E, 0x000D56],
+ [0x000D58, 0x000D61],
+ [0x000D64, 0x000D80],
+ [0x000D82, 0x000DC9],
+ [0x000DCB, 0x000DCE],
+ [0x000DD0, 0x000DD1],
+ [0x000DD7, 0x000DDE],
+ [0x000DE0, 0x000E30],
+ [0x000E32, 0x000E33],
+ [0x000E3B, 0x000E46],
+ [0x000E4F, 0x000EB0],
+ [0x000EB2, 0x000EB3],
+ [0x000EBD, 0x000EC7],
+ [0x000ECF, 0x000F17],
+ [0x000F1A, 0x000F34],
+ [0x000F3A, 0x000F70],
+ [0x000F88, 0x000F8C],
+ [0x000FBD, 0x000FC5],
+ [0x000FC7, 0x00102C],
+ [0x00103B, 0x00103C],
+ [0x00103F, 0x001057],
+ [0x00105A, 0x00105D],
+ [0x001061, 0x001070],
+ [0x001075, 0x001081],
+ [0x001083, 0x001084],
+ [0x001087, 0x00108C],
+ [0x00108E, 0x00109C],
+ [0x00109E, 0x00135C],
+ [0x001360, 0x001711],
+ [0x001715, 0x001731],
+ [0x001734, 0x001751],
+ [0x001754, 0x001771],
+ [0x001774, 0x0017B3],
+ [0x0017BE, 0x0017C5],
+ [0x0017C7, 0x0017C8],
+ [0x0017D4, 0x0017DC],
+ [0x0017DE, 0x00180A],
+ [0x001810, 0x001884],
+ [0x001887, 0x0018A8],
+ [0x0018AA, 0x00191F],
+ [0x001923, 0x001926],
+ [0x001929, 0x001931],
+ [0x001933, 0x001938],
+ [0x00193C, 0x001A16],
+ [0x001A19, 0x001A1A],
+ [0x001A1C, 0x001A55],
+ [0x001A63, 0x001A64],
+ [0x001A6D, 0x001A72],
+ [0x001A7D, 0x001A7E],
+ [0x001A80, 0x001AAF],
+ [0x001ACF, 0x001AFF],
+ [0x001B04, 0x001B33],
+ [0x001B3D, 0x001B41],
+ [0x001B43, 0x001B6A],
+ [0x001B74, 0x001B7F],
+ [0x001B82, 0x001BA1],
+ [0x001BA6, 0x001BA7],
+ [0x001BAE, 0x001BE5],
+ [0x001BEA, 0x001BEC],
+ [0x001BF2, 0x001C2B],
+ [0x001C34, 0x001C35],
+ [0x001C38, 0x001CCF],
+ [0x001CE9, 0x001CEC],
+ [0x001CEE, 0x001CF3],
+ [0x001CF5, 0x001CF7],
+ [0x001CFA, 0x001DBF],
+ [0x001E00, 0x00200B],
+ [0x00200D, 0x0020CF],
+ [0x0020F1, 0x002CEE],
+ [0x002CF2, 0x002D7E],
+ [0x002D80, 0x002DDF],
+ [0x002E00, 0x003029],
+ [0x003030, 0x003098],
+ [0x00309B, 0x00A66E],
+ [0x00A67E, 0x00A69D],
+ [0x00A6A0, 0x00A6EF],
+ [0x00A6F2, 0x00A801],
+ [0x00A803, 0x00A805],
+ [0x00A807, 0x00A80A],
+ [0x00A80C, 0x00A824],
+ [0x00A827, 0x00A82B],
+ [0x00A82D, 0x00A8C3],
+ [0x00A8C6, 0x00A8DF],
+ [0x00A8F2, 0x00A8FE],
+ [0x00A900, 0x00A925],
+ [0x00A92E, 0x00A946],
+ [0x00A952, 0x00A97F],
+ [0x00A983, 0x00A9B2],
+ [0x00A9B4, 0x00A9B5],
+ [0x00A9BA, 0x00A9BB],
+ [0x00A9BE, 0x00A9E4],
+ [0x00A9E6, 0x00AA28],
+ [0x00AA2F, 0x00AA30],
+ [0x00AA33, 0x00AA34],
+ [0x00AA37, 0x00AA42],
+ [0x00AA44, 0x00AA4B],
+ [0x00AA4D, 0x00AA7B],
+ [0x00AA7D, 0x00AAAF],
+ [0x00AAB5, 0x00AAB6],
+ [0x00AAB9, 0x00AABD],
+ [0x00AAC2, 0x00AAEB],
+ [0x00AAEE, 0x00AAF5],
+ [0x00AAF7, 0x00ABE4],
+ [0x00ABE6, 0x00ABE7],
+ [0x00ABE9, 0x00ABEC],
+ [0x00ABEE, 0x00DBFF],
+ [0x00E000, 0x00FB1D],
+ [0x00FB1F, 0x00FDFF],
+ [0x00FE10, 0x00FE1F],
+ [0x00FE30, 0x00FF9D],
+ [0x00FFA0, 0x0101FC],
+ [0x0101FE, 0x0102DF],
+ [0x0102E1, 0x010375],
+ [0x01037B, 0x010A00],
+ [0x010A07, 0x010A0B],
+ [0x010A10, 0x010A37],
+ [0x010A3B, 0x010A3E],
+ [0x010A40, 0x010AE4],
+ [0x010AE7, 0x010D23],
+ [0x010D28, 0x010EAA],
+ [0x010EAD, 0x010EFC],
+ [0x010F00, 0x010F45],
+ [0x010F51, 0x010F81],
+ [0x010F86, 0x011000],
+ [0x011002, 0x011037],
+ [0x011047, 0x01106F],
+ [0x011071, 0x011072],
+ [0x011075, 0x01107E],
+ [0x011082, 0x0110B2],
+ [0x0110B7, 0x0110B8],
+ [0x0110BB, 0x0110C1],
+ [0x0110C3, 0x0110FF],
+ [0x011103, 0x011126],
+ [0x011135, 0x011172],
+ [0x011174, 0x01117F],
+ [0x011182, 0x0111B5],
+ [0x0111BF, 0x0111C8],
+ [0x0111CD, 0x0111CE],
+ [0x0111D0, 0x01122E],
+ [0x011232, 0x011233],
+ [0x011238, 0x01123D],
+ [0x01123F, 0x011240],
+ [0x011242, 0x0112DE],
+ [0x0112E0, 0x0112E2],
+ [0x0112EB, 0x0112FF],
+ [0x011302, 0x01133A],
+ [0x011341, 0x011356],
+ [0x011358, 0x011365],
+ [0x01136D, 0x01136F],
+ [0x011375, 0x011437],
+ [0x011440, 0x011441],
+ [0x011447, 0x01145D],
+ [0x01145F, 0x0114AF],
+ [0x0114B1, 0x0114B2],
+ [0x0114BB, 0x0114BC],
+ [0x0114C4, 0x0115AE],
+ [0x0115B0, 0x0115B1],
+ [0x0115B6, 0x0115BB],
+ [0x0115C1, 0x0115DB],
+ [0x0115DE, 0x011632],
+ [0x01163B, 0x01163C],
+ [0x011641, 0x0116AA],
+ [0x0116AE, 0x0116AF],
+ [0x0116B8, 0x01171C],
+ [0x011720, 0x011721],
+ [0x01172C, 0x01182E],
+ [0x01183B, 0x01192F],
+ [0x011931, 0x01193A],
+ [0x01193F, 0x011942],
+ [0x011944, 0x0119D3],
+ [0x0119D8, 0x0119D9],
+ [0x0119DC, 0x0119DF],
+ [0x0119E1, 0x011A00],
+ [0x011A0B, 0x011A32],
+ [0x011A39, 0x011A3A],
+ [0x011A3F, 0x011A46],
+ [0x011A48, 0x011A50],
+ [0x011A57, 0x011A58],
+ [0x011A5C, 0x011A89],
+ [0x011A9A, 0x011C2F],
+ [0x011C40, 0x011C91],
+ [0x011CA8, 0x011CA9],
+ [0x011CB7, 0x011D30],
+ [0x011D37, 0x011D39],
+ [0x011D48, 0x011D8F],
+ [0x011D92, 0x011D94],
+ [0x011D98, 0x011EF2],
+ [0x011EF5, 0x011EFF],
+ [0x011F02, 0x011F35],
+ [0x011F3B, 0x011F3F],
+ [0x011F43, 0x01343F],
+ [0x013441, 0x013446],
+ [0x013456, 0x016AEF],
+ [0x016AF5, 0x016B2F],
+ [0x016B37, 0x016F4E],
+ [0x016F50, 0x016F8E],
+ [0x016F93, 0x016FE3],
+ [0x016FE5, 0x01BC9C],
+ [0x01BC9F, 0x01CEFF],
+ [0x01CF2E, 0x01CF2F],
+ [0x01CF47, 0x01D164],
+ [0x01D16A, 0x01D16D],
+ [0x01D173, 0x01D17A],
+ [0x01D183, 0x01D184],
+ [0x01D18C, 0x01D1A9],
+ [0x01D1AE, 0x01D241],
+ [0x01D245, 0x01D9FF],
+ [0x01DA37, 0x01DA3A],
+ [0x01DA6D, 0x01DA74],
+ [0x01DA76, 0x01DA83],
+ [0x01DA85, 0x01DA9A],
+ [0x01DAB0, 0x01DFFF],
+ [0x01E019, 0x01E01A],
+ [0x01E02B, 0x01E08E],
+ [0x01E090, 0x01E12F],
+ [0x01E137, 0x01E2AD],
+ [0x01E2AF, 0x01E2EB],
+ [0x01E2F0, 0x01E4EB],
+ [0x01E4F0, 0x01E8CF],
+ [0x01E8D7, 0x01E943],
+ [0x01E94B, 0x0E001F],
+ [0x0E0080, 0x0E00FF],
+ [0x0E01F0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Grapheme_Extend}+$/u,
+ nonMatchSymbols,
+ "\\P{Grapheme_Extend}"
+);
+testPropertyEscapes(
+ /^\P{Gr_Ext}+$/u,
+ nonMatchSymbols,
+ "\\P{Gr_Ext}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Hex_Digit.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Hex_Digit.js
new file mode 100644
index 0000000000..0417e6d795
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Hex_Digit.js
@@ -0,0 +1,63 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Hex_Digit`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000030, 0x000039],
+ [0x000041, 0x000046],
+ [0x000061, 0x000066],
+ [0x00FF10, 0x00FF19],
+ [0x00FF21, 0x00FF26],
+ [0x00FF41, 0x00FF46]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Hex_Digit}+$/u,
+ matchSymbols,
+ "\\p{Hex_Digit}"
+);
+testPropertyEscapes(
+ /^\p{Hex}+$/u,
+ matchSymbols,
+ "\\p{Hex}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00002F],
+ [0x00003A, 0x000040],
+ [0x000047, 0x000060],
+ [0x000067, 0x00DBFF],
+ [0x00E000, 0x00FF0F],
+ [0x00FF1A, 0x00FF20],
+ [0x00FF27, 0x00FF40],
+ [0x00FF47, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Hex_Digit}+$/u,
+ nonMatchSymbols,
+ "\\P{Hex_Digit}"
+);
+testPropertyEscapes(
+ /^\P{Hex}+$/u,
+ nonMatchSymbols,
+ "\\P{Hex}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/IDS_Binary_Operator.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/IDS_Binary_Operator.js
new file mode 100644
index 0000000000..6b173470be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/IDS_Binary_Operator.js
@@ -0,0 +1,55 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `IDS_Binary_Operator`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x002FF0, 0x002FF1],
+ [0x002FF4, 0x002FFB]
+ ]
+});
+testPropertyEscapes(
+ /^\p{IDS_Binary_Operator}+$/u,
+ matchSymbols,
+ "\\p{IDS_Binary_Operator}"
+);
+testPropertyEscapes(
+ /^\p{IDSB}+$/u,
+ matchSymbols,
+ "\\p{IDSB}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x002FEF],
+ [0x002FF2, 0x002FF3],
+ [0x002FFC, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{IDS_Binary_Operator}+$/u,
+ nonMatchSymbols,
+ "\\P{IDS_Binary_Operator}"
+);
+testPropertyEscapes(
+ /^\P{IDSB}+$/u,
+ nonMatchSymbols,
+ "\\P{IDSB}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/IDS_Trinary_Operator.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/IDS_Trinary_Operator.js
new file mode 100644
index 0000000000..73375f1185
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/IDS_Trinary_Operator.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `IDS_Trinary_Operator`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x002FF2, 0x002FF3]
+ ]
+});
+testPropertyEscapes(
+ /^\p{IDS_Trinary_Operator}+$/u,
+ matchSymbols,
+ "\\p{IDS_Trinary_Operator}"
+);
+testPropertyEscapes(
+ /^\p{IDST}+$/u,
+ matchSymbols,
+ "\\p{IDST}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x002FF1],
+ [0x002FF4, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{IDS_Trinary_Operator}+$/u,
+ nonMatchSymbols,
+ "\\P{IDS_Trinary_Operator}"
+);
+testPropertyEscapes(
+ /^\P{IDST}+$/u,
+ nonMatchSymbols,
+ "\\P{IDST}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/ID_Continue.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/ID_Continue.js
new file mode 100644
index 0000000000..23e3fba081
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/ID_Continue.js
@@ -0,0 +1,1589 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `ID_Continue`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00005F,
+ 0x0000AA,
+ 0x0000B5,
+ 0x0000B7,
+ 0x0000BA,
+ 0x0002EC,
+ 0x0002EE,
+ 0x00037F,
+ 0x00038C,
+ 0x000559,
+ 0x0005BF,
+ 0x0005C7,
+ 0x0006FF,
+ 0x0007FA,
+ 0x0007FD,
+ 0x0009B2,
+ 0x0009D7,
+ 0x0009FC,
+ 0x0009FE,
+ 0x000A3C,
+ 0x000A51,
+ 0x000A5E,
+ 0x000AD0,
+ 0x000B71,
+ 0x000B9C,
+ 0x000BD0,
+ 0x000BD7,
+ 0x000C5D,
+ 0x000DBD,
+ 0x000DCA,
+ 0x000DD6,
+ 0x000E84,
+ 0x000EA5,
+ 0x000EC6,
+ 0x000F00,
+ 0x000F35,
+ 0x000F37,
+ 0x000F39,
+ 0x000FC6,
+ 0x0010C7,
+ 0x0010CD,
+ 0x001258,
+ 0x0012C0,
+ 0x0017D7,
+ 0x001AA7,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x001FBE,
+ 0x002054,
+ 0x002071,
+ 0x00207F,
+ 0x0020E1,
+ 0x002102,
+ 0x002107,
+ 0x002115,
+ 0x002124,
+ 0x002126,
+ 0x002128,
+ 0x00214E,
+ 0x002D27,
+ 0x002D2D,
+ 0x002D6F,
+ 0x00A7D3,
+ 0x00A82C,
+ 0x00A8FB,
+ 0x00FB3E,
+ 0x00FF3F,
+ 0x0101FD,
+ 0x0102E0,
+ 0x010808,
+ 0x01083C,
+ 0x010A3F,
+ 0x010F27,
+ 0x0110C2,
+ 0x011176,
+ 0x0111DC,
+ 0x011288,
+ 0x011350,
+ 0x011357,
+ 0x0114C7,
+ 0x011644,
+ 0x011909,
+ 0x011A47,
+ 0x011A9D,
+ 0x011D3A,
+ 0x011FB0,
+ 0x01B132,
+ 0x01B155,
+ 0x01D4A2,
+ 0x01D4BB,
+ 0x01D546,
+ 0x01DA75,
+ 0x01DA84,
+ 0x01E08F,
+ 0x01E14E,
+ 0x01EE24,
+ 0x01EE27,
+ 0x01EE39,
+ 0x01EE3B,
+ 0x01EE42,
+ 0x01EE47,
+ 0x01EE49,
+ 0x01EE4B,
+ 0x01EE54,
+ 0x01EE57,
+ 0x01EE59,
+ 0x01EE5B,
+ 0x01EE5D,
+ 0x01EE5F,
+ 0x01EE64,
+ 0x01EE7E
+ ],
+ ranges: [
+ [0x000030, 0x000039],
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000F6],
+ [0x0000F8, 0x0002C1],
+ [0x0002C6, 0x0002D1],
+ [0x0002E0, 0x0002E4],
+ [0x000300, 0x000374],
+ [0x000376, 0x000377],
+ [0x00037A, 0x00037D],
+ [0x000386, 0x00038A],
+ [0x00038E, 0x0003A1],
+ [0x0003A3, 0x0003F5],
+ [0x0003F7, 0x000481],
+ [0x000483, 0x000487],
+ [0x00048A, 0x00052F],
+ [0x000531, 0x000556],
+ [0x000560, 0x000588],
+ [0x000591, 0x0005BD],
+ [0x0005C1, 0x0005C2],
+ [0x0005C4, 0x0005C5],
+ [0x0005D0, 0x0005EA],
+ [0x0005EF, 0x0005F2],
+ [0x000610, 0x00061A],
+ [0x000620, 0x000669],
+ [0x00066E, 0x0006D3],
+ [0x0006D5, 0x0006DC],
+ [0x0006DF, 0x0006E8],
+ [0x0006EA, 0x0006FC],
+ [0x000710, 0x00074A],
+ [0x00074D, 0x0007B1],
+ [0x0007C0, 0x0007F5],
+ [0x000800, 0x00082D],
+ [0x000840, 0x00085B],
+ [0x000860, 0x00086A],
+ [0x000870, 0x000887],
+ [0x000889, 0x00088E],
+ [0x000898, 0x0008E1],
+ [0x0008E3, 0x000963],
+ [0x000966, 0x00096F],
+ [0x000971, 0x000983],
+ [0x000985, 0x00098C],
+ [0x00098F, 0x000990],
+ [0x000993, 0x0009A8],
+ [0x0009AA, 0x0009B0],
+ [0x0009B6, 0x0009B9],
+ [0x0009BC, 0x0009C4],
+ [0x0009C7, 0x0009C8],
+ [0x0009CB, 0x0009CE],
+ [0x0009DC, 0x0009DD],
+ [0x0009DF, 0x0009E3],
+ [0x0009E6, 0x0009F1],
+ [0x000A01, 0x000A03],
+ [0x000A05, 0x000A0A],
+ [0x000A0F, 0x000A10],
+ [0x000A13, 0x000A28],
+ [0x000A2A, 0x000A30],
+ [0x000A32, 0x000A33],
+ [0x000A35, 0x000A36],
+ [0x000A38, 0x000A39],
+ [0x000A3E, 0x000A42],
+ [0x000A47, 0x000A48],
+ [0x000A4B, 0x000A4D],
+ [0x000A59, 0x000A5C],
+ [0x000A66, 0x000A75],
+ [0x000A81, 0x000A83],
+ [0x000A85, 0x000A8D],
+ [0x000A8F, 0x000A91],
+ [0x000A93, 0x000AA8],
+ [0x000AAA, 0x000AB0],
+ [0x000AB2, 0x000AB3],
+ [0x000AB5, 0x000AB9],
+ [0x000ABC, 0x000AC5],
+ [0x000AC7, 0x000AC9],
+ [0x000ACB, 0x000ACD],
+ [0x000AE0, 0x000AE3],
+ [0x000AE6, 0x000AEF],
+ [0x000AF9, 0x000AFF],
+ [0x000B01, 0x000B03],
+ [0x000B05, 0x000B0C],
+ [0x000B0F, 0x000B10],
+ [0x000B13, 0x000B28],
+ [0x000B2A, 0x000B30],
+ [0x000B32, 0x000B33],
+ [0x000B35, 0x000B39],
+ [0x000B3C, 0x000B44],
+ [0x000B47, 0x000B48],
+ [0x000B4B, 0x000B4D],
+ [0x000B55, 0x000B57],
+ [0x000B5C, 0x000B5D],
+ [0x000B5F, 0x000B63],
+ [0x000B66, 0x000B6F],
+ [0x000B82, 0x000B83],
+ [0x000B85, 0x000B8A],
+ [0x000B8E, 0x000B90],
+ [0x000B92, 0x000B95],
+ [0x000B99, 0x000B9A],
+ [0x000B9E, 0x000B9F],
+ [0x000BA3, 0x000BA4],
+ [0x000BA8, 0x000BAA],
+ [0x000BAE, 0x000BB9],
+ [0x000BBE, 0x000BC2],
+ [0x000BC6, 0x000BC8],
+ [0x000BCA, 0x000BCD],
+ [0x000BE6, 0x000BEF],
+ [0x000C00, 0x000C0C],
+ [0x000C0E, 0x000C10],
+ [0x000C12, 0x000C28],
+ [0x000C2A, 0x000C39],
+ [0x000C3C, 0x000C44],
+ [0x000C46, 0x000C48],
+ [0x000C4A, 0x000C4D],
+ [0x000C55, 0x000C56],
+ [0x000C58, 0x000C5A],
+ [0x000C60, 0x000C63],
+ [0x000C66, 0x000C6F],
+ [0x000C80, 0x000C83],
+ [0x000C85, 0x000C8C],
+ [0x000C8E, 0x000C90],
+ [0x000C92, 0x000CA8],
+ [0x000CAA, 0x000CB3],
+ [0x000CB5, 0x000CB9],
+ [0x000CBC, 0x000CC4],
+ [0x000CC6, 0x000CC8],
+ [0x000CCA, 0x000CCD],
+ [0x000CD5, 0x000CD6],
+ [0x000CDD, 0x000CDE],
+ [0x000CE0, 0x000CE3],
+ [0x000CE6, 0x000CEF],
+ [0x000CF1, 0x000CF3],
+ [0x000D00, 0x000D0C],
+ [0x000D0E, 0x000D10],
+ [0x000D12, 0x000D44],
+ [0x000D46, 0x000D48],
+ [0x000D4A, 0x000D4E],
+ [0x000D54, 0x000D57],
+ [0x000D5F, 0x000D63],
+ [0x000D66, 0x000D6F],
+ [0x000D7A, 0x000D7F],
+ [0x000D81, 0x000D83],
+ [0x000D85, 0x000D96],
+ [0x000D9A, 0x000DB1],
+ [0x000DB3, 0x000DBB],
+ [0x000DC0, 0x000DC6],
+ [0x000DCF, 0x000DD4],
+ [0x000DD8, 0x000DDF],
+ [0x000DE6, 0x000DEF],
+ [0x000DF2, 0x000DF3],
+ [0x000E01, 0x000E3A],
+ [0x000E40, 0x000E4E],
+ [0x000E50, 0x000E59],
+ [0x000E81, 0x000E82],
+ [0x000E86, 0x000E8A],
+ [0x000E8C, 0x000EA3],
+ [0x000EA7, 0x000EBD],
+ [0x000EC0, 0x000EC4],
+ [0x000EC8, 0x000ECE],
+ [0x000ED0, 0x000ED9],
+ [0x000EDC, 0x000EDF],
+ [0x000F18, 0x000F19],
+ [0x000F20, 0x000F29],
+ [0x000F3E, 0x000F47],
+ [0x000F49, 0x000F6C],
+ [0x000F71, 0x000F84],
+ [0x000F86, 0x000F97],
+ [0x000F99, 0x000FBC],
+ [0x001000, 0x001049],
+ [0x001050, 0x00109D],
+ [0x0010A0, 0x0010C5],
+ [0x0010D0, 0x0010FA],
+ [0x0010FC, 0x001248],
+ [0x00124A, 0x00124D],
+ [0x001250, 0x001256],
+ [0x00125A, 0x00125D],
+ [0x001260, 0x001288],
+ [0x00128A, 0x00128D],
+ [0x001290, 0x0012B0],
+ [0x0012B2, 0x0012B5],
+ [0x0012B8, 0x0012BE],
+ [0x0012C2, 0x0012C5],
+ [0x0012C8, 0x0012D6],
+ [0x0012D8, 0x001310],
+ [0x001312, 0x001315],
+ [0x001318, 0x00135A],
+ [0x00135D, 0x00135F],
+ [0x001369, 0x001371],
+ [0x001380, 0x00138F],
+ [0x0013A0, 0x0013F5],
+ [0x0013F8, 0x0013FD],
+ [0x001401, 0x00166C],
+ [0x00166F, 0x00167F],
+ [0x001681, 0x00169A],
+ [0x0016A0, 0x0016EA],
+ [0x0016EE, 0x0016F8],
+ [0x001700, 0x001715],
+ [0x00171F, 0x001734],
+ [0x001740, 0x001753],
+ [0x001760, 0x00176C],
+ [0x00176E, 0x001770],
+ [0x001772, 0x001773],
+ [0x001780, 0x0017D3],
+ [0x0017DC, 0x0017DD],
+ [0x0017E0, 0x0017E9],
+ [0x00180B, 0x00180D],
+ [0x00180F, 0x001819],
+ [0x001820, 0x001878],
+ [0x001880, 0x0018AA],
+ [0x0018B0, 0x0018F5],
+ [0x001900, 0x00191E],
+ [0x001920, 0x00192B],
+ [0x001930, 0x00193B],
+ [0x001946, 0x00196D],
+ [0x001970, 0x001974],
+ [0x001980, 0x0019AB],
+ [0x0019B0, 0x0019C9],
+ [0x0019D0, 0x0019DA],
+ [0x001A00, 0x001A1B],
+ [0x001A20, 0x001A5E],
+ [0x001A60, 0x001A7C],
+ [0x001A7F, 0x001A89],
+ [0x001A90, 0x001A99],
+ [0x001AB0, 0x001ABD],
+ [0x001ABF, 0x001ACE],
+ [0x001B00, 0x001B4C],
+ [0x001B50, 0x001B59],
+ [0x001B6B, 0x001B73],
+ [0x001B80, 0x001BF3],
+ [0x001C00, 0x001C37],
+ [0x001C40, 0x001C49],
+ [0x001C4D, 0x001C7D],
+ [0x001C80, 0x001C88],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CBF],
+ [0x001CD0, 0x001CD2],
+ [0x001CD4, 0x001CFA],
+ [0x001D00, 0x001F15],
+ [0x001F18, 0x001F1D],
+ [0x001F20, 0x001F45],
+ [0x001F48, 0x001F4D],
+ [0x001F50, 0x001F57],
+ [0x001F5F, 0x001F7D],
+ [0x001F80, 0x001FB4],
+ [0x001FB6, 0x001FBC],
+ [0x001FC2, 0x001FC4],
+ [0x001FC6, 0x001FCC],
+ [0x001FD0, 0x001FD3],
+ [0x001FD6, 0x001FDB],
+ [0x001FE0, 0x001FEC],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FFC],
+ [0x00203F, 0x002040],
+ [0x002090, 0x00209C],
+ [0x0020D0, 0x0020DC],
+ [0x0020E5, 0x0020F0],
+ [0x00210A, 0x002113],
+ [0x002118, 0x00211D],
+ [0x00212A, 0x002139],
+ [0x00213C, 0x00213F],
+ [0x002145, 0x002149],
+ [0x002160, 0x002188],
+ [0x002C00, 0x002CE4],
+ [0x002CEB, 0x002CF3],
+ [0x002D00, 0x002D25],
+ [0x002D30, 0x002D67],
+ [0x002D7F, 0x002D96],
+ [0x002DA0, 0x002DA6],
+ [0x002DA8, 0x002DAE],
+ [0x002DB0, 0x002DB6],
+ [0x002DB8, 0x002DBE],
+ [0x002DC0, 0x002DC6],
+ [0x002DC8, 0x002DCE],
+ [0x002DD0, 0x002DD6],
+ [0x002DD8, 0x002DDE],
+ [0x002DE0, 0x002DFF],
+ [0x003005, 0x003007],
+ [0x003021, 0x00302F],
+ [0x003031, 0x003035],
+ [0x003038, 0x00303C],
+ [0x003041, 0x003096],
+ [0x003099, 0x00309F],
+ [0x0030A1, 0x0030FA],
+ [0x0030FC, 0x0030FF],
+ [0x003105, 0x00312F],
+ [0x003131, 0x00318E],
+ [0x0031A0, 0x0031BF],
+ [0x0031F0, 0x0031FF],
+ [0x003400, 0x004DBF],
+ [0x004E00, 0x00A48C],
+ [0x00A4D0, 0x00A4FD],
+ [0x00A500, 0x00A60C],
+ [0x00A610, 0x00A62B],
+ [0x00A640, 0x00A66F],
+ [0x00A674, 0x00A67D],
+ [0x00A67F, 0x00A6F1],
+ [0x00A717, 0x00A71F],
+ [0x00A722, 0x00A788],
+ [0x00A78B, 0x00A7CA],
+ [0x00A7D0, 0x00A7D1],
+ [0x00A7D5, 0x00A7D9],
+ [0x00A7F2, 0x00A827],
+ [0x00A840, 0x00A873],
+ [0x00A880, 0x00A8C5],
+ [0x00A8D0, 0x00A8D9],
+ [0x00A8E0, 0x00A8F7],
+ [0x00A8FD, 0x00A92D],
+ [0x00A930, 0x00A953],
+ [0x00A960, 0x00A97C],
+ [0x00A980, 0x00A9C0],
+ [0x00A9CF, 0x00A9D9],
+ [0x00A9E0, 0x00A9FE],
+ [0x00AA00, 0x00AA36],
+ [0x00AA40, 0x00AA4D],
+ [0x00AA50, 0x00AA59],
+ [0x00AA60, 0x00AA76],
+ [0x00AA7A, 0x00AAC2],
+ [0x00AADB, 0x00AADD],
+ [0x00AAE0, 0x00AAEF],
+ [0x00AAF2, 0x00AAF6],
+ [0x00AB01, 0x00AB06],
+ [0x00AB09, 0x00AB0E],
+ [0x00AB11, 0x00AB16],
+ [0x00AB20, 0x00AB26],
+ [0x00AB28, 0x00AB2E],
+ [0x00AB30, 0x00AB5A],
+ [0x00AB5C, 0x00AB69],
+ [0x00AB70, 0x00ABEA],
+ [0x00ABEC, 0x00ABED],
+ [0x00ABF0, 0x00ABF9],
+ [0x00AC00, 0x00D7A3],
+ [0x00D7B0, 0x00D7C6],
+ [0x00D7CB, 0x00D7FB],
+ [0x00F900, 0x00FA6D],
+ [0x00FA70, 0x00FAD9],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FB1D, 0x00FB28],
+ [0x00FB2A, 0x00FB36],
+ [0x00FB38, 0x00FB3C],
+ [0x00FB40, 0x00FB41],
+ [0x00FB43, 0x00FB44],
+ [0x00FB46, 0x00FBB1],
+ [0x00FBD3, 0x00FD3D],
+ [0x00FD50, 0x00FD8F],
+ [0x00FD92, 0x00FDC7],
+ [0x00FDF0, 0x00FDFB],
+ [0x00FE00, 0x00FE0F],
+ [0x00FE20, 0x00FE2F],
+ [0x00FE33, 0x00FE34],
+ [0x00FE4D, 0x00FE4F],
+ [0x00FE70, 0x00FE74],
+ [0x00FE76, 0x00FEFC],
+ [0x00FF10, 0x00FF19],
+ [0x00FF21, 0x00FF3A],
+ [0x00FF41, 0x00FF5A],
+ [0x00FF66, 0x00FFBE],
+ [0x00FFC2, 0x00FFC7],
+ [0x00FFCA, 0x00FFCF],
+ [0x00FFD2, 0x00FFD7],
+ [0x00FFDA, 0x00FFDC],
+ [0x010000, 0x01000B],
+ [0x01000D, 0x010026],
+ [0x010028, 0x01003A],
+ [0x01003C, 0x01003D],
+ [0x01003F, 0x01004D],
+ [0x010050, 0x01005D],
+ [0x010080, 0x0100FA],
+ [0x010140, 0x010174],
+ [0x010280, 0x01029C],
+ [0x0102A0, 0x0102D0],
+ [0x010300, 0x01031F],
+ [0x01032D, 0x01034A],
+ [0x010350, 0x01037A],
+ [0x010380, 0x01039D],
+ [0x0103A0, 0x0103C3],
+ [0x0103C8, 0x0103CF],
+ [0x0103D1, 0x0103D5],
+ [0x010400, 0x01049D],
+ [0x0104A0, 0x0104A9],
+ [0x0104B0, 0x0104D3],
+ [0x0104D8, 0x0104FB],
+ [0x010500, 0x010527],
+ [0x010530, 0x010563],
+ [0x010570, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC],
+ [0x010600, 0x010736],
+ [0x010740, 0x010755],
+ [0x010760, 0x010767],
+ [0x010780, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x010800, 0x010805],
+ [0x01080A, 0x010835],
+ [0x010837, 0x010838],
+ [0x01083F, 0x010855],
+ [0x010860, 0x010876],
+ [0x010880, 0x01089E],
+ [0x0108E0, 0x0108F2],
+ [0x0108F4, 0x0108F5],
+ [0x010900, 0x010915],
+ [0x010920, 0x010939],
+ [0x010980, 0x0109B7],
+ [0x0109BE, 0x0109BF],
+ [0x010A00, 0x010A03],
+ [0x010A05, 0x010A06],
+ [0x010A0C, 0x010A13],
+ [0x010A15, 0x010A17],
+ [0x010A19, 0x010A35],
+ [0x010A38, 0x010A3A],
+ [0x010A60, 0x010A7C],
+ [0x010A80, 0x010A9C],
+ [0x010AC0, 0x010AC7],
+ [0x010AC9, 0x010AE6],
+ [0x010B00, 0x010B35],
+ [0x010B40, 0x010B55],
+ [0x010B60, 0x010B72],
+ [0x010B80, 0x010B91],
+ [0x010C00, 0x010C48],
+ [0x010C80, 0x010CB2],
+ [0x010CC0, 0x010CF2],
+ [0x010D00, 0x010D27],
+ [0x010D30, 0x010D39],
+ [0x010E80, 0x010EA9],
+ [0x010EAB, 0x010EAC],
+ [0x010EB0, 0x010EB1],
+ [0x010EFD, 0x010F1C],
+ [0x010F30, 0x010F50],
+ [0x010F70, 0x010F85],
+ [0x010FB0, 0x010FC4],
+ [0x010FE0, 0x010FF6],
+ [0x011000, 0x011046],
+ [0x011066, 0x011075],
+ [0x01107F, 0x0110BA],
+ [0x0110D0, 0x0110E8],
+ [0x0110F0, 0x0110F9],
+ [0x011100, 0x011134],
+ [0x011136, 0x01113F],
+ [0x011144, 0x011147],
+ [0x011150, 0x011173],
+ [0x011180, 0x0111C4],
+ [0x0111C9, 0x0111CC],
+ [0x0111CE, 0x0111DA],
+ [0x011200, 0x011211],
+ [0x011213, 0x011237],
+ [0x01123E, 0x011241],
+ [0x011280, 0x011286],
+ [0x01128A, 0x01128D],
+ [0x01128F, 0x01129D],
+ [0x01129F, 0x0112A8],
+ [0x0112B0, 0x0112EA],
+ [0x0112F0, 0x0112F9],
+ [0x011300, 0x011303],
+ [0x011305, 0x01130C],
+ [0x01130F, 0x011310],
+ [0x011313, 0x011328],
+ [0x01132A, 0x011330],
+ [0x011332, 0x011333],
+ [0x011335, 0x011339],
+ [0x01133B, 0x011344],
+ [0x011347, 0x011348],
+ [0x01134B, 0x01134D],
+ [0x01135D, 0x011363],
+ [0x011366, 0x01136C],
+ [0x011370, 0x011374],
+ [0x011400, 0x01144A],
+ [0x011450, 0x011459],
+ [0x01145E, 0x011461],
+ [0x011480, 0x0114C5],
+ [0x0114D0, 0x0114D9],
+ [0x011580, 0x0115B5],
+ [0x0115B8, 0x0115C0],
+ [0x0115D8, 0x0115DD],
+ [0x011600, 0x011640],
+ [0x011650, 0x011659],
+ [0x011680, 0x0116B8],
+ [0x0116C0, 0x0116C9],
+ [0x011700, 0x01171A],
+ [0x01171D, 0x01172B],
+ [0x011730, 0x011739],
+ [0x011740, 0x011746],
+ [0x011800, 0x01183A],
+ [0x0118A0, 0x0118E9],
+ [0x0118FF, 0x011906],
+ [0x01190C, 0x011913],
+ [0x011915, 0x011916],
+ [0x011918, 0x011935],
+ [0x011937, 0x011938],
+ [0x01193B, 0x011943],
+ [0x011950, 0x011959],
+ [0x0119A0, 0x0119A7],
+ [0x0119AA, 0x0119D7],
+ [0x0119DA, 0x0119E1],
+ [0x0119E3, 0x0119E4],
+ [0x011A00, 0x011A3E],
+ [0x011A50, 0x011A99],
+ [0x011AB0, 0x011AF8],
+ [0x011C00, 0x011C08],
+ [0x011C0A, 0x011C36],
+ [0x011C38, 0x011C40],
+ [0x011C50, 0x011C59],
+ [0x011C72, 0x011C8F],
+ [0x011C92, 0x011CA7],
+ [0x011CA9, 0x011CB6],
+ [0x011D00, 0x011D06],
+ [0x011D08, 0x011D09],
+ [0x011D0B, 0x011D36],
+ [0x011D3C, 0x011D3D],
+ [0x011D3F, 0x011D47],
+ [0x011D50, 0x011D59],
+ [0x011D60, 0x011D65],
+ [0x011D67, 0x011D68],
+ [0x011D6A, 0x011D8E],
+ [0x011D90, 0x011D91],
+ [0x011D93, 0x011D98],
+ [0x011DA0, 0x011DA9],
+ [0x011EE0, 0x011EF6],
+ [0x011F00, 0x011F10],
+ [0x011F12, 0x011F3A],
+ [0x011F3E, 0x011F42],
+ [0x011F50, 0x011F59],
+ [0x012000, 0x012399],
+ [0x012400, 0x01246E],
+ [0x012480, 0x012543],
+ [0x012F90, 0x012FF0],
+ [0x013000, 0x01342F],
+ [0x013440, 0x013455],
+ [0x014400, 0x014646],
+ [0x016800, 0x016A38],
+ [0x016A40, 0x016A5E],
+ [0x016A60, 0x016A69],
+ [0x016A70, 0x016ABE],
+ [0x016AC0, 0x016AC9],
+ [0x016AD0, 0x016AED],
+ [0x016AF0, 0x016AF4],
+ [0x016B00, 0x016B36],
+ [0x016B40, 0x016B43],
+ [0x016B50, 0x016B59],
+ [0x016B63, 0x016B77],
+ [0x016B7D, 0x016B8F],
+ [0x016E40, 0x016E7F],
+ [0x016F00, 0x016F4A],
+ [0x016F4F, 0x016F87],
+ [0x016F8F, 0x016F9F],
+ [0x016FE0, 0x016FE1],
+ [0x016FE3, 0x016FE4],
+ [0x016FF0, 0x016FF1],
+ [0x017000, 0x0187F7],
+ [0x018800, 0x018CD5],
+ [0x018D00, 0x018D08],
+ [0x01AFF0, 0x01AFF3],
+ [0x01AFF5, 0x01AFFB],
+ [0x01AFFD, 0x01AFFE],
+ [0x01B000, 0x01B122],
+ [0x01B150, 0x01B152],
+ [0x01B164, 0x01B167],
+ [0x01B170, 0x01B2FB],
+ [0x01BC00, 0x01BC6A],
+ [0x01BC70, 0x01BC7C],
+ [0x01BC80, 0x01BC88],
+ [0x01BC90, 0x01BC99],
+ [0x01BC9D, 0x01BC9E],
+ [0x01CF00, 0x01CF2D],
+ [0x01CF30, 0x01CF46],
+ [0x01D165, 0x01D169],
+ [0x01D16D, 0x01D172],
+ [0x01D17B, 0x01D182],
+ [0x01D185, 0x01D18B],
+ [0x01D1AA, 0x01D1AD],
+ [0x01D242, 0x01D244],
+ [0x01D400, 0x01D454],
+ [0x01D456, 0x01D49C],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D51E, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D552, 0x01D6A5],
+ [0x01D6A8, 0x01D6C0],
+ [0x01D6C2, 0x01D6DA],
+ [0x01D6DC, 0x01D6FA],
+ [0x01D6FC, 0x01D714],
+ [0x01D716, 0x01D734],
+ [0x01D736, 0x01D74E],
+ [0x01D750, 0x01D76E],
+ [0x01D770, 0x01D788],
+ [0x01D78A, 0x01D7A8],
+ [0x01D7AA, 0x01D7C2],
+ [0x01D7C4, 0x01D7CB],
+ [0x01D7CE, 0x01D7FF],
+ [0x01DA00, 0x01DA36],
+ [0x01DA3B, 0x01DA6C],
+ [0x01DA9B, 0x01DA9F],
+ [0x01DAA1, 0x01DAAF],
+ [0x01DF00, 0x01DF1E],
+ [0x01DF25, 0x01DF2A],
+ [0x01E000, 0x01E006],
+ [0x01E008, 0x01E018],
+ [0x01E01B, 0x01E021],
+ [0x01E023, 0x01E024],
+ [0x01E026, 0x01E02A],
+ [0x01E030, 0x01E06D],
+ [0x01E100, 0x01E12C],
+ [0x01E130, 0x01E13D],
+ [0x01E140, 0x01E149],
+ [0x01E290, 0x01E2AE],
+ [0x01E2C0, 0x01E2F9],
+ [0x01E4D0, 0x01E4F9],
+ [0x01E7E0, 0x01E7E6],
+ [0x01E7E8, 0x01E7EB],
+ [0x01E7ED, 0x01E7EE],
+ [0x01E7F0, 0x01E7FE],
+ [0x01E800, 0x01E8C4],
+ [0x01E8D0, 0x01E8D6],
+ [0x01E900, 0x01E94B],
+ [0x01E950, 0x01E959],
+ [0x01EE00, 0x01EE03],
+ [0x01EE05, 0x01EE1F],
+ [0x01EE21, 0x01EE22],
+ [0x01EE29, 0x01EE32],
+ [0x01EE34, 0x01EE37],
+ [0x01EE4D, 0x01EE4F],
+ [0x01EE51, 0x01EE52],
+ [0x01EE61, 0x01EE62],
+ [0x01EE67, 0x01EE6A],
+ [0x01EE6C, 0x01EE72],
+ [0x01EE74, 0x01EE77],
+ [0x01EE79, 0x01EE7C],
+ [0x01EE80, 0x01EE89],
+ [0x01EE8B, 0x01EE9B],
+ [0x01EEA1, 0x01EEA3],
+ [0x01EEA5, 0x01EEA9],
+ [0x01EEAB, 0x01EEBB],
+ [0x01FBF0, 0x01FBF9],
+ [0x020000, 0x02A6DF],
+ [0x02A700, 0x02B739],
+ [0x02B740, 0x02B81D],
+ [0x02B820, 0x02CEA1],
+ [0x02CEB0, 0x02EBE0],
+ [0x02F800, 0x02FA1D],
+ [0x030000, 0x03134A],
+ [0x031350, 0x0323AF],
+ [0x0E0100, 0x0E01EF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{ID_Continue}+$/u,
+ matchSymbols,
+ "\\p{ID_Continue}"
+);
+testPropertyEscapes(
+ /^\p{IDC}+$/u,
+ matchSymbols,
+ "\\p{IDC}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000060,
+ 0x0000B6,
+ 0x0000D7,
+ 0x0000F7,
+ 0x0002ED,
+ 0x000375,
+ 0x00037E,
+ 0x00038B,
+ 0x00038D,
+ 0x0003A2,
+ 0x0003F6,
+ 0x000482,
+ 0x000530,
+ 0x0005BE,
+ 0x0005C0,
+ 0x0005C3,
+ 0x0005C6,
+ 0x0006D4,
+ 0x0006E9,
+ 0x000888,
+ 0x0008E2,
+ 0x000970,
+ 0x000984,
+ 0x0009A9,
+ 0x0009B1,
+ 0x0009DE,
+ 0x0009FD,
+ 0x000A04,
+ 0x000A29,
+ 0x000A31,
+ 0x000A34,
+ 0x000A37,
+ 0x000A3D,
+ 0x000A5D,
+ 0x000A84,
+ 0x000A8E,
+ 0x000A92,
+ 0x000AA9,
+ 0x000AB1,
+ 0x000AB4,
+ 0x000AC6,
+ 0x000ACA,
+ 0x000B00,
+ 0x000B04,
+ 0x000B29,
+ 0x000B31,
+ 0x000B34,
+ 0x000B5E,
+ 0x000B70,
+ 0x000B84,
+ 0x000B91,
+ 0x000B9B,
+ 0x000B9D,
+ 0x000BC9,
+ 0x000C0D,
+ 0x000C11,
+ 0x000C29,
+ 0x000C45,
+ 0x000C49,
+ 0x000C57,
+ 0x000C84,
+ 0x000C8D,
+ 0x000C91,
+ 0x000CA9,
+ 0x000CB4,
+ 0x000CC5,
+ 0x000CC9,
+ 0x000CDF,
+ 0x000CF0,
+ 0x000D0D,
+ 0x000D11,
+ 0x000D45,
+ 0x000D49,
+ 0x000D80,
+ 0x000D84,
+ 0x000DB2,
+ 0x000DBC,
+ 0x000DD5,
+ 0x000DD7,
+ 0x000E4F,
+ 0x000E83,
+ 0x000E85,
+ 0x000E8B,
+ 0x000EA4,
+ 0x000EA6,
+ 0x000EC5,
+ 0x000EC7,
+ 0x000ECF,
+ 0x000F36,
+ 0x000F38,
+ 0x000F48,
+ 0x000F85,
+ 0x000F98,
+ 0x0010C6,
+ 0x0010FB,
+ 0x001249,
+ 0x001257,
+ 0x001259,
+ 0x001289,
+ 0x0012B1,
+ 0x0012BF,
+ 0x0012C1,
+ 0x0012D7,
+ 0x001311,
+ 0x001680,
+ 0x00176D,
+ 0x001771,
+ 0x00180E,
+ 0x00191F,
+ 0x001A5F,
+ 0x001ABE,
+ 0x001CD3,
+ 0x001F58,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x001FB5,
+ 0x001FBD,
+ 0x001FC5,
+ 0x001FF5,
+ 0x002114,
+ 0x002125,
+ 0x002127,
+ 0x002129,
+ 0x002D26,
+ 0x002DA7,
+ 0x002DAF,
+ 0x002DB7,
+ 0x002DBF,
+ 0x002DC7,
+ 0x002DCF,
+ 0x002DD7,
+ 0x002DDF,
+ 0x003030,
+ 0x0030A0,
+ 0x0030FB,
+ 0x003130,
+ 0x00A67E,
+ 0x00A7D2,
+ 0x00A7D4,
+ 0x00A8FC,
+ 0x00A9FF,
+ 0x00AB27,
+ 0x00AB2F,
+ 0x00AB5B,
+ 0x00ABEB,
+ 0x00FB29,
+ 0x00FB37,
+ 0x00FB3D,
+ 0x00FB3F,
+ 0x00FB42,
+ 0x00FB45,
+ 0x00FE75,
+ 0x00FF40,
+ 0x01000C,
+ 0x010027,
+ 0x01003B,
+ 0x01003E,
+ 0x0103D0,
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x010596,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA,
+ 0x010786,
+ 0x0107B1,
+ 0x010809,
+ 0x010836,
+ 0x0108F3,
+ 0x010A04,
+ 0x010A14,
+ 0x010A18,
+ 0x010AC8,
+ 0x010EAA,
+ 0x011135,
+ 0x0111CD,
+ 0x0111DB,
+ 0x011212,
+ 0x011287,
+ 0x011289,
+ 0x01128E,
+ 0x01129E,
+ 0x011304,
+ 0x011329,
+ 0x011331,
+ 0x011334,
+ 0x01133A,
+ 0x0114C6,
+ 0x011914,
+ 0x011917,
+ 0x011936,
+ 0x0119E2,
+ 0x011C09,
+ 0x011C37,
+ 0x011CA8,
+ 0x011D07,
+ 0x011D0A,
+ 0x011D3B,
+ 0x011D3E,
+ 0x011D66,
+ 0x011D69,
+ 0x011D8F,
+ 0x011D92,
+ 0x011F11,
+ 0x016A5F,
+ 0x016ABF,
+ 0x016FE2,
+ 0x01AFF4,
+ 0x01AFFC,
+ 0x01AFFF,
+ 0x01D455,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D506,
+ 0x01D515,
+ 0x01D51D,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545,
+ 0x01D551,
+ 0x01D6C1,
+ 0x01D6DB,
+ 0x01D6FB,
+ 0x01D715,
+ 0x01D735,
+ 0x01D74F,
+ 0x01D76F,
+ 0x01D789,
+ 0x01D7A9,
+ 0x01D7C3,
+ 0x01DAA0,
+ 0x01E007,
+ 0x01E022,
+ 0x01E025,
+ 0x01E7E7,
+ 0x01E7EC,
+ 0x01E7EF,
+ 0x01E7FF,
+ 0x01EE04,
+ 0x01EE20,
+ 0x01EE23,
+ 0x01EE28,
+ 0x01EE33,
+ 0x01EE38,
+ 0x01EE3A,
+ 0x01EE48,
+ 0x01EE4A,
+ 0x01EE4C,
+ 0x01EE50,
+ 0x01EE53,
+ 0x01EE58,
+ 0x01EE5A,
+ 0x01EE5C,
+ 0x01EE5E,
+ 0x01EE60,
+ 0x01EE63,
+ 0x01EE6B,
+ 0x01EE73,
+ 0x01EE78,
+ 0x01EE7D,
+ 0x01EE7F,
+ 0x01EE8A,
+ 0x01EEA4,
+ 0x01EEAA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00002F],
+ [0x00003A, 0x000040],
+ [0x00005B, 0x00005E],
+ [0x00007B, 0x0000A9],
+ [0x0000AB, 0x0000B4],
+ [0x0000B8, 0x0000B9],
+ [0x0000BB, 0x0000BF],
+ [0x0002C2, 0x0002C5],
+ [0x0002D2, 0x0002DF],
+ [0x0002E5, 0x0002EB],
+ [0x0002EF, 0x0002FF],
+ [0x000378, 0x000379],
+ [0x000380, 0x000385],
+ [0x000488, 0x000489],
+ [0x000557, 0x000558],
+ [0x00055A, 0x00055F],
+ [0x000589, 0x000590],
+ [0x0005C8, 0x0005CF],
+ [0x0005EB, 0x0005EE],
+ [0x0005F3, 0x00060F],
+ [0x00061B, 0x00061F],
+ [0x00066A, 0x00066D],
+ [0x0006DD, 0x0006DE],
+ [0x0006FD, 0x0006FE],
+ [0x000700, 0x00070F],
+ [0x00074B, 0x00074C],
+ [0x0007B2, 0x0007BF],
+ [0x0007F6, 0x0007F9],
+ [0x0007FB, 0x0007FC],
+ [0x0007FE, 0x0007FF],
+ [0x00082E, 0x00083F],
+ [0x00085C, 0x00085F],
+ [0x00086B, 0x00086F],
+ [0x00088F, 0x000897],
+ [0x000964, 0x000965],
+ [0x00098D, 0x00098E],
+ [0x000991, 0x000992],
+ [0x0009B3, 0x0009B5],
+ [0x0009BA, 0x0009BB],
+ [0x0009C5, 0x0009C6],
+ [0x0009C9, 0x0009CA],
+ [0x0009CF, 0x0009D6],
+ [0x0009D8, 0x0009DB],
+ [0x0009E4, 0x0009E5],
+ [0x0009F2, 0x0009FB],
+ [0x0009FF, 0x000A00],
+ [0x000A0B, 0x000A0E],
+ [0x000A11, 0x000A12],
+ [0x000A3A, 0x000A3B],
+ [0x000A43, 0x000A46],
+ [0x000A49, 0x000A4A],
+ [0x000A4E, 0x000A50],
+ [0x000A52, 0x000A58],
+ [0x000A5F, 0x000A65],
+ [0x000A76, 0x000A80],
+ [0x000ABA, 0x000ABB],
+ [0x000ACE, 0x000ACF],
+ [0x000AD1, 0x000ADF],
+ [0x000AE4, 0x000AE5],
+ [0x000AF0, 0x000AF8],
+ [0x000B0D, 0x000B0E],
+ [0x000B11, 0x000B12],
+ [0x000B3A, 0x000B3B],
+ [0x000B45, 0x000B46],
+ [0x000B49, 0x000B4A],
+ [0x000B4E, 0x000B54],
+ [0x000B58, 0x000B5B],
+ [0x000B64, 0x000B65],
+ [0x000B72, 0x000B81],
+ [0x000B8B, 0x000B8D],
+ [0x000B96, 0x000B98],
+ [0x000BA0, 0x000BA2],
+ [0x000BA5, 0x000BA7],
+ [0x000BAB, 0x000BAD],
+ [0x000BBA, 0x000BBD],
+ [0x000BC3, 0x000BC5],
+ [0x000BCE, 0x000BCF],
+ [0x000BD1, 0x000BD6],
+ [0x000BD8, 0x000BE5],
+ [0x000BF0, 0x000BFF],
+ [0x000C3A, 0x000C3B],
+ [0x000C4E, 0x000C54],
+ [0x000C5B, 0x000C5C],
+ [0x000C5E, 0x000C5F],
+ [0x000C64, 0x000C65],
+ [0x000C70, 0x000C7F],
+ [0x000CBA, 0x000CBB],
+ [0x000CCE, 0x000CD4],
+ [0x000CD7, 0x000CDC],
+ [0x000CE4, 0x000CE5],
+ [0x000CF4, 0x000CFF],
+ [0x000D4F, 0x000D53],
+ [0x000D58, 0x000D5E],
+ [0x000D64, 0x000D65],
+ [0x000D70, 0x000D79],
+ [0x000D97, 0x000D99],
+ [0x000DBE, 0x000DBF],
+ [0x000DC7, 0x000DC9],
+ [0x000DCB, 0x000DCE],
+ [0x000DE0, 0x000DE5],
+ [0x000DF0, 0x000DF1],
+ [0x000DF4, 0x000E00],
+ [0x000E3B, 0x000E3F],
+ [0x000E5A, 0x000E80],
+ [0x000EBE, 0x000EBF],
+ [0x000EDA, 0x000EDB],
+ [0x000EE0, 0x000EFF],
+ [0x000F01, 0x000F17],
+ [0x000F1A, 0x000F1F],
+ [0x000F2A, 0x000F34],
+ [0x000F3A, 0x000F3D],
+ [0x000F6D, 0x000F70],
+ [0x000FBD, 0x000FC5],
+ [0x000FC7, 0x000FFF],
+ [0x00104A, 0x00104F],
+ [0x00109E, 0x00109F],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x0010CF],
+ [0x00124E, 0x00124F],
+ [0x00125E, 0x00125F],
+ [0x00128E, 0x00128F],
+ [0x0012B6, 0x0012B7],
+ [0x0012C6, 0x0012C7],
+ [0x001316, 0x001317],
+ [0x00135B, 0x00135C],
+ [0x001360, 0x001368],
+ [0x001372, 0x00137F],
+ [0x001390, 0x00139F],
+ [0x0013F6, 0x0013F7],
+ [0x0013FE, 0x001400],
+ [0x00166D, 0x00166E],
+ [0x00169B, 0x00169F],
+ [0x0016EB, 0x0016ED],
+ [0x0016F9, 0x0016FF],
+ [0x001716, 0x00171E],
+ [0x001735, 0x00173F],
+ [0x001754, 0x00175F],
+ [0x001774, 0x00177F],
+ [0x0017D4, 0x0017D6],
+ [0x0017D8, 0x0017DB],
+ [0x0017DE, 0x0017DF],
+ [0x0017EA, 0x00180A],
+ [0x00181A, 0x00181F],
+ [0x001879, 0x00187F],
+ [0x0018AB, 0x0018AF],
+ [0x0018F6, 0x0018FF],
+ [0x00192C, 0x00192F],
+ [0x00193C, 0x001945],
+ [0x00196E, 0x00196F],
+ [0x001975, 0x00197F],
+ [0x0019AC, 0x0019AF],
+ [0x0019CA, 0x0019CF],
+ [0x0019DB, 0x0019FF],
+ [0x001A1C, 0x001A1F],
+ [0x001A7D, 0x001A7E],
+ [0x001A8A, 0x001A8F],
+ [0x001A9A, 0x001AA6],
+ [0x001AA8, 0x001AAF],
+ [0x001ACF, 0x001AFF],
+ [0x001B4D, 0x001B4F],
+ [0x001B5A, 0x001B6A],
+ [0x001B74, 0x001B7F],
+ [0x001BF4, 0x001BFF],
+ [0x001C38, 0x001C3F],
+ [0x001C4A, 0x001C4C],
+ [0x001C7E, 0x001C7F],
+ [0x001C89, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC0, 0x001CCF],
+ [0x001CFB, 0x001CFF],
+ [0x001F16, 0x001F17],
+ [0x001F1E, 0x001F1F],
+ [0x001F46, 0x001F47],
+ [0x001F4E, 0x001F4F],
+ [0x001F7E, 0x001F7F],
+ [0x001FBF, 0x001FC1],
+ [0x001FCD, 0x001FCF],
+ [0x001FD4, 0x001FD5],
+ [0x001FDC, 0x001FDF],
+ [0x001FED, 0x001FF1],
+ [0x001FFD, 0x00203E],
+ [0x002041, 0x002053],
+ [0x002055, 0x002070],
+ [0x002072, 0x00207E],
+ [0x002080, 0x00208F],
+ [0x00209D, 0x0020CF],
+ [0x0020DD, 0x0020E0],
+ [0x0020E2, 0x0020E4],
+ [0x0020F1, 0x002101],
+ [0x002103, 0x002106],
+ [0x002108, 0x002109],
+ [0x002116, 0x002117],
+ [0x00211E, 0x002123],
+ [0x00213A, 0x00213B],
+ [0x002140, 0x002144],
+ [0x00214A, 0x00214D],
+ [0x00214F, 0x00215F],
+ [0x002189, 0x002BFF],
+ [0x002CE5, 0x002CEA],
+ [0x002CF4, 0x002CFF],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x002D2F],
+ [0x002D68, 0x002D6E],
+ [0x002D70, 0x002D7E],
+ [0x002D97, 0x002D9F],
+ [0x002E00, 0x003004],
+ [0x003008, 0x003020],
+ [0x003036, 0x003037],
+ [0x00303D, 0x003040],
+ [0x003097, 0x003098],
+ [0x003100, 0x003104],
+ [0x00318F, 0x00319F],
+ [0x0031C0, 0x0031EF],
+ [0x003200, 0x0033FF],
+ [0x004DC0, 0x004DFF],
+ [0x00A48D, 0x00A4CF],
+ [0x00A4FE, 0x00A4FF],
+ [0x00A60D, 0x00A60F],
+ [0x00A62C, 0x00A63F],
+ [0x00A670, 0x00A673],
+ [0x00A6F2, 0x00A716],
+ [0x00A720, 0x00A721],
+ [0x00A789, 0x00A78A],
+ [0x00A7CB, 0x00A7CF],
+ [0x00A7DA, 0x00A7F1],
+ [0x00A828, 0x00A82B],
+ [0x00A82D, 0x00A83F],
+ [0x00A874, 0x00A87F],
+ [0x00A8C6, 0x00A8CF],
+ [0x00A8DA, 0x00A8DF],
+ [0x00A8F8, 0x00A8FA],
+ [0x00A92E, 0x00A92F],
+ [0x00A954, 0x00A95F],
+ [0x00A97D, 0x00A97F],
+ [0x00A9C1, 0x00A9CE],
+ [0x00A9DA, 0x00A9DF],
+ [0x00AA37, 0x00AA3F],
+ [0x00AA4E, 0x00AA4F],
+ [0x00AA5A, 0x00AA5F],
+ [0x00AA77, 0x00AA79],
+ [0x00AAC3, 0x00AADA],
+ [0x00AADE, 0x00AADF],
+ [0x00AAF0, 0x00AAF1],
+ [0x00AAF7, 0x00AB00],
+ [0x00AB07, 0x00AB08],
+ [0x00AB0F, 0x00AB10],
+ [0x00AB17, 0x00AB1F],
+ [0x00AB6A, 0x00AB6F],
+ [0x00ABEE, 0x00ABEF],
+ [0x00ABFA, 0x00ABFF],
+ [0x00D7A4, 0x00D7AF],
+ [0x00D7C7, 0x00D7CA],
+ [0x00D7FC, 0x00DBFF],
+ [0x00E000, 0x00F8FF],
+ [0x00FA6E, 0x00FA6F],
+ [0x00FADA, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FB1C],
+ [0x00FBB2, 0x00FBD2],
+ [0x00FD3E, 0x00FD4F],
+ [0x00FD90, 0x00FD91],
+ [0x00FDC8, 0x00FDEF],
+ [0x00FDFC, 0x00FDFF],
+ [0x00FE10, 0x00FE1F],
+ [0x00FE30, 0x00FE32],
+ [0x00FE35, 0x00FE4C],
+ [0x00FE50, 0x00FE6F],
+ [0x00FEFD, 0x00FF0F],
+ [0x00FF1A, 0x00FF20],
+ [0x00FF3B, 0x00FF3E],
+ [0x00FF5B, 0x00FF65],
+ [0x00FFBF, 0x00FFC1],
+ [0x00FFC8, 0x00FFC9],
+ [0x00FFD0, 0x00FFD1],
+ [0x00FFD8, 0x00FFD9],
+ [0x00FFDD, 0x00FFFF],
+ [0x01004E, 0x01004F],
+ [0x01005E, 0x01007F],
+ [0x0100FB, 0x01013F],
+ [0x010175, 0x0101FC],
+ [0x0101FE, 0x01027F],
+ [0x01029D, 0x01029F],
+ [0x0102D1, 0x0102DF],
+ [0x0102E1, 0x0102FF],
+ [0x010320, 0x01032C],
+ [0x01034B, 0x01034F],
+ [0x01037B, 0x01037F],
+ [0x01039E, 0x01039F],
+ [0x0103C4, 0x0103C7],
+ [0x0103D6, 0x0103FF],
+ [0x01049E, 0x01049F],
+ [0x0104AA, 0x0104AF],
+ [0x0104D4, 0x0104D7],
+ [0x0104FC, 0x0104FF],
+ [0x010528, 0x01052F],
+ [0x010564, 0x01056F],
+ [0x0105BD, 0x0105FF],
+ [0x010737, 0x01073F],
+ [0x010756, 0x01075F],
+ [0x010768, 0x01077F],
+ [0x0107BB, 0x0107FF],
+ [0x010806, 0x010807],
+ [0x010839, 0x01083B],
+ [0x01083D, 0x01083E],
+ [0x010856, 0x01085F],
+ [0x010877, 0x01087F],
+ [0x01089F, 0x0108DF],
+ [0x0108F6, 0x0108FF],
+ [0x010916, 0x01091F],
+ [0x01093A, 0x01097F],
+ [0x0109B8, 0x0109BD],
+ [0x0109C0, 0x0109FF],
+ [0x010A07, 0x010A0B],
+ [0x010A36, 0x010A37],
+ [0x010A3B, 0x010A3E],
+ [0x010A40, 0x010A5F],
+ [0x010A7D, 0x010A7F],
+ [0x010A9D, 0x010ABF],
+ [0x010AE7, 0x010AFF],
+ [0x010B36, 0x010B3F],
+ [0x010B56, 0x010B5F],
+ [0x010B73, 0x010B7F],
+ [0x010B92, 0x010BFF],
+ [0x010C49, 0x010C7F],
+ [0x010CB3, 0x010CBF],
+ [0x010CF3, 0x010CFF],
+ [0x010D28, 0x010D2F],
+ [0x010D3A, 0x010E7F],
+ [0x010EAD, 0x010EAF],
+ [0x010EB2, 0x010EFC],
+ [0x010F1D, 0x010F26],
+ [0x010F28, 0x010F2F],
+ [0x010F51, 0x010F6F],
+ [0x010F86, 0x010FAF],
+ [0x010FC5, 0x010FDF],
+ [0x010FF7, 0x010FFF],
+ [0x011047, 0x011065],
+ [0x011076, 0x01107E],
+ [0x0110BB, 0x0110C1],
+ [0x0110C3, 0x0110CF],
+ [0x0110E9, 0x0110EF],
+ [0x0110FA, 0x0110FF],
+ [0x011140, 0x011143],
+ [0x011148, 0x01114F],
+ [0x011174, 0x011175],
+ [0x011177, 0x01117F],
+ [0x0111C5, 0x0111C8],
+ [0x0111DD, 0x0111FF],
+ [0x011238, 0x01123D],
+ [0x011242, 0x01127F],
+ [0x0112A9, 0x0112AF],
+ [0x0112EB, 0x0112EF],
+ [0x0112FA, 0x0112FF],
+ [0x01130D, 0x01130E],
+ [0x011311, 0x011312],
+ [0x011345, 0x011346],
+ [0x011349, 0x01134A],
+ [0x01134E, 0x01134F],
+ [0x011351, 0x011356],
+ [0x011358, 0x01135C],
+ [0x011364, 0x011365],
+ [0x01136D, 0x01136F],
+ [0x011375, 0x0113FF],
+ [0x01144B, 0x01144F],
+ [0x01145A, 0x01145D],
+ [0x011462, 0x01147F],
+ [0x0114C8, 0x0114CF],
+ [0x0114DA, 0x01157F],
+ [0x0115B6, 0x0115B7],
+ [0x0115C1, 0x0115D7],
+ [0x0115DE, 0x0115FF],
+ [0x011641, 0x011643],
+ [0x011645, 0x01164F],
+ [0x01165A, 0x01167F],
+ [0x0116B9, 0x0116BF],
+ [0x0116CA, 0x0116FF],
+ [0x01171B, 0x01171C],
+ [0x01172C, 0x01172F],
+ [0x01173A, 0x01173F],
+ [0x011747, 0x0117FF],
+ [0x01183B, 0x01189F],
+ [0x0118EA, 0x0118FE],
+ [0x011907, 0x011908],
+ [0x01190A, 0x01190B],
+ [0x011939, 0x01193A],
+ [0x011944, 0x01194F],
+ [0x01195A, 0x01199F],
+ [0x0119A8, 0x0119A9],
+ [0x0119D8, 0x0119D9],
+ [0x0119E5, 0x0119FF],
+ [0x011A3F, 0x011A46],
+ [0x011A48, 0x011A4F],
+ [0x011A9A, 0x011A9C],
+ [0x011A9E, 0x011AAF],
+ [0x011AF9, 0x011BFF],
+ [0x011C41, 0x011C4F],
+ [0x011C5A, 0x011C71],
+ [0x011C90, 0x011C91],
+ [0x011CB7, 0x011CFF],
+ [0x011D37, 0x011D39],
+ [0x011D48, 0x011D4F],
+ [0x011D5A, 0x011D5F],
+ [0x011D99, 0x011D9F],
+ [0x011DAA, 0x011EDF],
+ [0x011EF7, 0x011EFF],
+ [0x011F3B, 0x011F3D],
+ [0x011F43, 0x011F4F],
+ [0x011F5A, 0x011FAF],
+ [0x011FB1, 0x011FFF],
+ [0x01239A, 0x0123FF],
+ [0x01246F, 0x01247F],
+ [0x012544, 0x012F8F],
+ [0x012FF1, 0x012FFF],
+ [0x013430, 0x01343F],
+ [0x013456, 0x0143FF],
+ [0x014647, 0x0167FF],
+ [0x016A39, 0x016A3F],
+ [0x016A6A, 0x016A6F],
+ [0x016ACA, 0x016ACF],
+ [0x016AEE, 0x016AEF],
+ [0x016AF5, 0x016AFF],
+ [0x016B37, 0x016B3F],
+ [0x016B44, 0x016B4F],
+ [0x016B5A, 0x016B62],
+ [0x016B78, 0x016B7C],
+ [0x016B90, 0x016E3F],
+ [0x016E80, 0x016EFF],
+ [0x016F4B, 0x016F4E],
+ [0x016F88, 0x016F8E],
+ [0x016FA0, 0x016FDF],
+ [0x016FE5, 0x016FEF],
+ [0x016FF2, 0x016FFF],
+ [0x0187F8, 0x0187FF],
+ [0x018CD6, 0x018CFF],
+ [0x018D09, 0x01AFEF],
+ [0x01B123, 0x01B131],
+ [0x01B133, 0x01B14F],
+ [0x01B153, 0x01B154],
+ [0x01B156, 0x01B163],
+ [0x01B168, 0x01B16F],
+ [0x01B2FC, 0x01BBFF],
+ [0x01BC6B, 0x01BC6F],
+ [0x01BC7D, 0x01BC7F],
+ [0x01BC89, 0x01BC8F],
+ [0x01BC9A, 0x01BC9C],
+ [0x01BC9F, 0x01CEFF],
+ [0x01CF2E, 0x01CF2F],
+ [0x01CF47, 0x01D164],
+ [0x01D16A, 0x01D16C],
+ [0x01D173, 0x01D17A],
+ [0x01D183, 0x01D184],
+ [0x01D18C, 0x01D1A9],
+ [0x01D1AE, 0x01D241],
+ [0x01D245, 0x01D3FF],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D50B, 0x01D50C],
+ [0x01D547, 0x01D549],
+ [0x01D6A6, 0x01D6A7],
+ [0x01D7CC, 0x01D7CD],
+ [0x01D800, 0x01D9FF],
+ [0x01DA37, 0x01DA3A],
+ [0x01DA6D, 0x01DA74],
+ [0x01DA76, 0x01DA83],
+ [0x01DA85, 0x01DA9A],
+ [0x01DAB0, 0x01DEFF],
+ [0x01DF1F, 0x01DF24],
+ [0x01DF2B, 0x01DFFF],
+ [0x01E019, 0x01E01A],
+ [0x01E02B, 0x01E02F],
+ [0x01E06E, 0x01E08E],
+ [0x01E090, 0x01E0FF],
+ [0x01E12D, 0x01E12F],
+ [0x01E13E, 0x01E13F],
+ [0x01E14A, 0x01E14D],
+ [0x01E14F, 0x01E28F],
+ [0x01E2AF, 0x01E2BF],
+ [0x01E2FA, 0x01E4CF],
+ [0x01E4FA, 0x01E7DF],
+ [0x01E8C5, 0x01E8CF],
+ [0x01E8D7, 0x01E8FF],
+ [0x01E94C, 0x01E94F],
+ [0x01E95A, 0x01EDFF],
+ [0x01EE25, 0x01EE26],
+ [0x01EE3C, 0x01EE41],
+ [0x01EE43, 0x01EE46],
+ [0x01EE55, 0x01EE56],
+ [0x01EE65, 0x01EE66],
+ [0x01EE9C, 0x01EEA0],
+ [0x01EEBC, 0x01FBEF],
+ [0x01FBFA, 0x01FFFF],
+ [0x02A6E0, 0x02A6FF],
+ [0x02B73A, 0x02B73F],
+ [0x02B81E, 0x02B81F],
+ [0x02CEA2, 0x02CEAF],
+ [0x02EBE1, 0x02F7FF],
+ [0x02FA1E, 0x02FFFF],
+ [0x03134B, 0x03134F],
+ [0x0323B0, 0x0E00FF],
+ [0x0E01F0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{ID_Continue}+$/u,
+ nonMatchSymbols,
+ "\\P{ID_Continue}"
+);
+testPropertyEscapes(
+ /^\P{IDC}+$/u,
+ nonMatchSymbols,
+ "\\P{IDC}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/ID_Start.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/ID_Start.js
new file mode 100644
index 0000000000..d503a35848
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/ID_Start.js
@@ -0,0 +1,1371 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `ID_Start`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000AA,
+ 0x0000B5,
+ 0x0000BA,
+ 0x0002EC,
+ 0x0002EE,
+ 0x00037F,
+ 0x000386,
+ 0x00038C,
+ 0x000559,
+ 0x0006D5,
+ 0x0006FF,
+ 0x000710,
+ 0x0007B1,
+ 0x0007FA,
+ 0x00081A,
+ 0x000824,
+ 0x000828,
+ 0x00093D,
+ 0x000950,
+ 0x0009B2,
+ 0x0009BD,
+ 0x0009CE,
+ 0x0009FC,
+ 0x000A5E,
+ 0x000ABD,
+ 0x000AD0,
+ 0x000AF9,
+ 0x000B3D,
+ 0x000B71,
+ 0x000B83,
+ 0x000B9C,
+ 0x000BD0,
+ 0x000C3D,
+ 0x000C5D,
+ 0x000C80,
+ 0x000CBD,
+ 0x000D3D,
+ 0x000D4E,
+ 0x000DBD,
+ 0x000E84,
+ 0x000EA5,
+ 0x000EBD,
+ 0x000EC6,
+ 0x000F00,
+ 0x00103F,
+ 0x001061,
+ 0x00108E,
+ 0x0010C7,
+ 0x0010CD,
+ 0x001258,
+ 0x0012C0,
+ 0x0017D7,
+ 0x0017DC,
+ 0x0018AA,
+ 0x001AA7,
+ 0x001CFA,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x001FBE,
+ 0x002071,
+ 0x00207F,
+ 0x002102,
+ 0x002107,
+ 0x002115,
+ 0x002124,
+ 0x002126,
+ 0x002128,
+ 0x00214E,
+ 0x002D27,
+ 0x002D2D,
+ 0x002D6F,
+ 0x00A7D3,
+ 0x00A8FB,
+ 0x00A9CF,
+ 0x00AA7A,
+ 0x00AAB1,
+ 0x00AAC0,
+ 0x00AAC2,
+ 0x00FB1D,
+ 0x00FB3E,
+ 0x010808,
+ 0x01083C,
+ 0x010A00,
+ 0x010F27,
+ 0x011075,
+ 0x011144,
+ 0x011147,
+ 0x011176,
+ 0x0111DA,
+ 0x0111DC,
+ 0x011288,
+ 0x01133D,
+ 0x011350,
+ 0x0114C7,
+ 0x011644,
+ 0x0116B8,
+ 0x011909,
+ 0x01193F,
+ 0x011941,
+ 0x0119E1,
+ 0x0119E3,
+ 0x011A00,
+ 0x011A3A,
+ 0x011A50,
+ 0x011A9D,
+ 0x011C40,
+ 0x011D46,
+ 0x011D98,
+ 0x011F02,
+ 0x011FB0,
+ 0x016F50,
+ 0x016FE3,
+ 0x01B132,
+ 0x01B155,
+ 0x01D4A2,
+ 0x01D4BB,
+ 0x01D546,
+ 0x01E14E,
+ 0x01E94B,
+ 0x01EE24,
+ 0x01EE27,
+ 0x01EE39,
+ 0x01EE3B,
+ 0x01EE42,
+ 0x01EE47,
+ 0x01EE49,
+ 0x01EE4B,
+ 0x01EE54,
+ 0x01EE57,
+ 0x01EE59,
+ 0x01EE5B,
+ 0x01EE5D,
+ 0x01EE5F,
+ 0x01EE64,
+ 0x01EE7E
+ ],
+ ranges: [
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000F6],
+ [0x0000F8, 0x0002C1],
+ [0x0002C6, 0x0002D1],
+ [0x0002E0, 0x0002E4],
+ [0x000370, 0x000374],
+ [0x000376, 0x000377],
+ [0x00037A, 0x00037D],
+ [0x000388, 0x00038A],
+ [0x00038E, 0x0003A1],
+ [0x0003A3, 0x0003F5],
+ [0x0003F7, 0x000481],
+ [0x00048A, 0x00052F],
+ [0x000531, 0x000556],
+ [0x000560, 0x000588],
+ [0x0005D0, 0x0005EA],
+ [0x0005EF, 0x0005F2],
+ [0x000620, 0x00064A],
+ [0x00066E, 0x00066F],
+ [0x000671, 0x0006D3],
+ [0x0006E5, 0x0006E6],
+ [0x0006EE, 0x0006EF],
+ [0x0006FA, 0x0006FC],
+ [0x000712, 0x00072F],
+ [0x00074D, 0x0007A5],
+ [0x0007CA, 0x0007EA],
+ [0x0007F4, 0x0007F5],
+ [0x000800, 0x000815],
+ [0x000840, 0x000858],
+ [0x000860, 0x00086A],
+ [0x000870, 0x000887],
+ [0x000889, 0x00088E],
+ [0x0008A0, 0x0008C9],
+ [0x000904, 0x000939],
+ [0x000958, 0x000961],
+ [0x000971, 0x000980],
+ [0x000985, 0x00098C],
+ [0x00098F, 0x000990],
+ [0x000993, 0x0009A8],
+ [0x0009AA, 0x0009B0],
+ [0x0009B6, 0x0009B9],
+ [0x0009DC, 0x0009DD],
+ [0x0009DF, 0x0009E1],
+ [0x0009F0, 0x0009F1],
+ [0x000A05, 0x000A0A],
+ [0x000A0F, 0x000A10],
+ [0x000A13, 0x000A28],
+ [0x000A2A, 0x000A30],
+ [0x000A32, 0x000A33],
+ [0x000A35, 0x000A36],
+ [0x000A38, 0x000A39],
+ [0x000A59, 0x000A5C],
+ [0x000A72, 0x000A74],
+ [0x000A85, 0x000A8D],
+ [0x000A8F, 0x000A91],
+ [0x000A93, 0x000AA8],
+ [0x000AAA, 0x000AB0],
+ [0x000AB2, 0x000AB3],
+ [0x000AB5, 0x000AB9],
+ [0x000AE0, 0x000AE1],
+ [0x000B05, 0x000B0C],
+ [0x000B0F, 0x000B10],
+ [0x000B13, 0x000B28],
+ [0x000B2A, 0x000B30],
+ [0x000B32, 0x000B33],
+ [0x000B35, 0x000B39],
+ [0x000B5C, 0x000B5D],
+ [0x000B5F, 0x000B61],
+ [0x000B85, 0x000B8A],
+ [0x000B8E, 0x000B90],
+ [0x000B92, 0x000B95],
+ [0x000B99, 0x000B9A],
+ [0x000B9E, 0x000B9F],
+ [0x000BA3, 0x000BA4],
+ [0x000BA8, 0x000BAA],
+ [0x000BAE, 0x000BB9],
+ [0x000C05, 0x000C0C],
+ [0x000C0E, 0x000C10],
+ [0x000C12, 0x000C28],
+ [0x000C2A, 0x000C39],
+ [0x000C58, 0x000C5A],
+ [0x000C60, 0x000C61],
+ [0x000C85, 0x000C8C],
+ [0x000C8E, 0x000C90],
+ [0x000C92, 0x000CA8],
+ [0x000CAA, 0x000CB3],
+ [0x000CB5, 0x000CB9],
+ [0x000CDD, 0x000CDE],
+ [0x000CE0, 0x000CE1],
+ [0x000CF1, 0x000CF2],
+ [0x000D04, 0x000D0C],
+ [0x000D0E, 0x000D10],
+ [0x000D12, 0x000D3A],
+ [0x000D54, 0x000D56],
+ [0x000D5F, 0x000D61],
+ [0x000D7A, 0x000D7F],
+ [0x000D85, 0x000D96],
+ [0x000D9A, 0x000DB1],
+ [0x000DB3, 0x000DBB],
+ [0x000DC0, 0x000DC6],
+ [0x000E01, 0x000E30],
+ [0x000E32, 0x000E33],
+ [0x000E40, 0x000E46],
+ [0x000E81, 0x000E82],
+ [0x000E86, 0x000E8A],
+ [0x000E8C, 0x000EA3],
+ [0x000EA7, 0x000EB0],
+ [0x000EB2, 0x000EB3],
+ [0x000EC0, 0x000EC4],
+ [0x000EDC, 0x000EDF],
+ [0x000F40, 0x000F47],
+ [0x000F49, 0x000F6C],
+ [0x000F88, 0x000F8C],
+ [0x001000, 0x00102A],
+ [0x001050, 0x001055],
+ [0x00105A, 0x00105D],
+ [0x001065, 0x001066],
+ [0x00106E, 0x001070],
+ [0x001075, 0x001081],
+ [0x0010A0, 0x0010C5],
+ [0x0010D0, 0x0010FA],
+ [0x0010FC, 0x001248],
+ [0x00124A, 0x00124D],
+ [0x001250, 0x001256],
+ [0x00125A, 0x00125D],
+ [0x001260, 0x001288],
+ [0x00128A, 0x00128D],
+ [0x001290, 0x0012B0],
+ [0x0012B2, 0x0012B5],
+ [0x0012B8, 0x0012BE],
+ [0x0012C2, 0x0012C5],
+ [0x0012C8, 0x0012D6],
+ [0x0012D8, 0x001310],
+ [0x001312, 0x001315],
+ [0x001318, 0x00135A],
+ [0x001380, 0x00138F],
+ [0x0013A0, 0x0013F5],
+ [0x0013F8, 0x0013FD],
+ [0x001401, 0x00166C],
+ [0x00166F, 0x00167F],
+ [0x001681, 0x00169A],
+ [0x0016A0, 0x0016EA],
+ [0x0016EE, 0x0016F8],
+ [0x001700, 0x001711],
+ [0x00171F, 0x001731],
+ [0x001740, 0x001751],
+ [0x001760, 0x00176C],
+ [0x00176E, 0x001770],
+ [0x001780, 0x0017B3],
+ [0x001820, 0x001878],
+ [0x001880, 0x0018A8],
+ [0x0018B0, 0x0018F5],
+ [0x001900, 0x00191E],
+ [0x001950, 0x00196D],
+ [0x001970, 0x001974],
+ [0x001980, 0x0019AB],
+ [0x0019B0, 0x0019C9],
+ [0x001A00, 0x001A16],
+ [0x001A20, 0x001A54],
+ [0x001B05, 0x001B33],
+ [0x001B45, 0x001B4C],
+ [0x001B83, 0x001BA0],
+ [0x001BAE, 0x001BAF],
+ [0x001BBA, 0x001BE5],
+ [0x001C00, 0x001C23],
+ [0x001C4D, 0x001C4F],
+ [0x001C5A, 0x001C7D],
+ [0x001C80, 0x001C88],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CBF],
+ [0x001CE9, 0x001CEC],
+ [0x001CEE, 0x001CF3],
+ [0x001CF5, 0x001CF6],
+ [0x001D00, 0x001DBF],
+ [0x001E00, 0x001F15],
+ [0x001F18, 0x001F1D],
+ [0x001F20, 0x001F45],
+ [0x001F48, 0x001F4D],
+ [0x001F50, 0x001F57],
+ [0x001F5F, 0x001F7D],
+ [0x001F80, 0x001FB4],
+ [0x001FB6, 0x001FBC],
+ [0x001FC2, 0x001FC4],
+ [0x001FC6, 0x001FCC],
+ [0x001FD0, 0x001FD3],
+ [0x001FD6, 0x001FDB],
+ [0x001FE0, 0x001FEC],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FFC],
+ [0x002090, 0x00209C],
+ [0x00210A, 0x002113],
+ [0x002118, 0x00211D],
+ [0x00212A, 0x002139],
+ [0x00213C, 0x00213F],
+ [0x002145, 0x002149],
+ [0x002160, 0x002188],
+ [0x002C00, 0x002CE4],
+ [0x002CEB, 0x002CEE],
+ [0x002CF2, 0x002CF3],
+ [0x002D00, 0x002D25],
+ [0x002D30, 0x002D67],
+ [0x002D80, 0x002D96],
+ [0x002DA0, 0x002DA6],
+ [0x002DA8, 0x002DAE],
+ [0x002DB0, 0x002DB6],
+ [0x002DB8, 0x002DBE],
+ [0x002DC0, 0x002DC6],
+ [0x002DC8, 0x002DCE],
+ [0x002DD0, 0x002DD6],
+ [0x002DD8, 0x002DDE],
+ [0x003005, 0x003007],
+ [0x003021, 0x003029],
+ [0x003031, 0x003035],
+ [0x003038, 0x00303C],
+ [0x003041, 0x003096],
+ [0x00309B, 0x00309F],
+ [0x0030A1, 0x0030FA],
+ [0x0030FC, 0x0030FF],
+ [0x003105, 0x00312F],
+ [0x003131, 0x00318E],
+ [0x0031A0, 0x0031BF],
+ [0x0031F0, 0x0031FF],
+ [0x003400, 0x004DBF],
+ [0x004E00, 0x00A48C],
+ [0x00A4D0, 0x00A4FD],
+ [0x00A500, 0x00A60C],
+ [0x00A610, 0x00A61F],
+ [0x00A62A, 0x00A62B],
+ [0x00A640, 0x00A66E],
+ [0x00A67F, 0x00A69D],
+ [0x00A6A0, 0x00A6EF],
+ [0x00A717, 0x00A71F],
+ [0x00A722, 0x00A788],
+ [0x00A78B, 0x00A7CA],
+ [0x00A7D0, 0x00A7D1],
+ [0x00A7D5, 0x00A7D9],
+ [0x00A7F2, 0x00A801],
+ [0x00A803, 0x00A805],
+ [0x00A807, 0x00A80A],
+ [0x00A80C, 0x00A822],
+ [0x00A840, 0x00A873],
+ [0x00A882, 0x00A8B3],
+ [0x00A8F2, 0x00A8F7],
+ [0x00A8FD, 0x00A8FE],
+ [0x00A90A, 0x00A925],
+ [0x00A930, 0x00A946],
+ [0x00A960, 0x00A97C],
+ [0x00A984, 0x00A9B2],
+ [0x00A9E0, 0x00A9E4],
+ [0x00A9E6, 0x00A9EF],
+ [0x00A9FA, 0x00A9FE],
+ [0x00AA00, 0x00AA28],
+ [0x00AA40, 0x00AA42],
+ [0x00AA44, 0x00AA4B],
+ [0x00AA60, 0x00AA76],
+ [0x00AA7E, 0x00AAAF],
+ [0x00AAB5, 0x00AAB6],
+ [0x00AAB9, 0x00AABD],
+ [0x00AADB, 0x00AADD],
+ [0x00AAE0, 0x00AAEA],
+ [0x00AAF2, 0x00AAF4],
+ [0x00AB01, 0x00AB06],
+ [0x00AB09, 0x00AB0E],
+ [0x00AB11, 0x00AB16],
+ [0x00AB20, 0x00AB26],
+ [0x00AB28, 0x00AB2E],
+ [0x00AB30, 0x00AB5A],
+ [0x00AB5C, 0x00AB69],
+ [0x00AB70, 0x00ABE2],
+ [0x00AC00, 0x00D7A3],
+ [0x00D7B0, 0x00D7C6],
+ [0x00D7CB, 0x00D7FB],
+ [0x00F900, 0x00FA6D],
+ [0x00FA70, 0x00FAD9],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FB1F, 0x00FB28],
+ [0x00FB2A, 0x00FB36],
+ [0x00FB38, 0x00FB3C],
+ [0x00FB40, 0x00FB41],
+ [0x00FB43, 0x00FB44],
+ [0x00FB46, 0x00FBB1],
+ [0x00FBD3, 0x00FD3D],
+ [0x00FD50, 0x00FD8F],
+ [0x00FD92, 0x00FDC7],
+ [0x00FDF0, 0x00FDFB],
+ [0x00FE70, 0x00FE74],
+ [0x00FE76, 0x00FEFC],
+ [0x00FF21, 0x00FF3A],
+ [0x00FF41, 0x00FF5A],
+ [0x00FF66, 0x00FFBE],
+ [0x00FFC2, 0x00FFC7],
+ [0x00FFCA, 0x00FFCF],
+ [0x00FFD2, 0x00FFD7],
+ [0x00FFDA, 0x00FFDC],
+ [0x010000, 0x01000B],
+ [0x01000D, 0x010026],
+ [0x010028, 0x01003A],
+ [0x01003C, 0x01003D],
+ [0x01003F, 0x01004D],
+ [0x010050, 0x01005D],
+ [0x010080, 0x0100FA],
+ [0x010140, 0x010174],
+ [0x010280, 0x01029C],
+ [0x0102A0, 0x0102D0],
+ [0x010300, 0x01031F],
+ [0x01032D, 0x01034A],
+ [0x010350, 0x010375],
+ [0x010380, 0x01039D],
+ [0x0103A0, 0x0103C3],
+ [0x0103C8, 0x0103CF],
+ [0x0103D1, 0x0103D5],
+ [0x010400, 0x01049D],
+ [0x0104B0, 0x0104D3],
+ [0x0104D8, 0x0104FB],
+ [0x010500, 0x010527],
+ [0x010530, 0x010563],
+ [0x010570, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC],
+ [0x010600, 0x010736],
+ [0x010740, 0x010755],
+ [0x010760, 0x010767],
+ [0x010780, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x010800, 0x010805],
+ [0x01080A, 0x010835],
+ [0x010837, 0x010838],
+ [0x01083F, 0x010855],
+ [0x010860, 0x010876],
+ [0x010880, 0x01089E],
+ [0x0108E0, 0x0108F2],
+ [0x0108F4, 0x0108F5],
+ [0x010900, 0x010915],
+ [0x010920, 0x010939],
+ [0x010980, 0x0109B7],
+ [0x0109BE, 0x0109BF],
+ [0x010A10, 0x010A13],
+ [0x010A15, 0x010A17],
+ [0x010A19, 0x010A35],
+ [0x010A60, 0x010A7C],
+ [0x010A80, 0x010A9C],
+ [0x010AC0, 0x010AC7],
+ [0x010AC9, 0x010AE4],
+ [0x010B00, 0x010B35],
+ [0x010B40, 0x010B55],
+ [0x010B60, 0x010B72],
+ [0x010B80, 0x010B91],
+ [0x010C00, 0x010C48],
+ [0x010C80, 0x010CB2],
+ [0x010CC0, 0x010CF2],
+ [0x010D00, 0x010D23],
+ [0x010E80, 0x010EA9],
+ [0x010EB0, 0x010EB1],
+ [0x010F00, 0x010F1C],
+ [0x010F30, 0x010F45],
+ [0x010F70, 0x010F81],
+ [0x010FB0, 0x010FC4],
+ [0x010FE0, 0x010FF6],
+ [0x011003, 0x011037],
+ [0x011071, 0x011072],
+ [0x011083, 0x0110AF],
+ [0x0110D0, 0x0110E8],
+ [0x011103, 0x011126],
+ [0x011150, 0x011172],
+ [0x011183, 0x0111B2],
+ [0x0111C1, 0x0111C4],
+ [0x011200, 0x011211],
+ [0x011213, 0x01122B],
+ [0x01123F, 0x011240],
+ [0x011280, 0x011286],
+ [0x01128A, 0x01128D],
+ [0x01128F, 0x01129D],
+ [0x01129F, 0x0112A8],
+ [0x0112B0, 0x0112DE],
+ [0x011305, 0x01130C],
+ [0x01130F, 0x011310],
+ [0x011313, 0x011328],
+ [0x01132A, 0x011330],
+ [0x011332, 0x011333],
+ [0x011335, 0x011339],
+ [0x01135D, 0x011361],
+ [0x011400, 0x011434],
+ [0x011447, 0x01144A],
+ [0x01145F, 0x011461],
+ [0x011480, 0x0114AF],
+ [0x0114C4, 0x0114C5],
+ [0x011580, 0x0115AE],
+ [0x0115D8, 0x0115DB],
+ [0x011600, 0x01162F],
+ [0x011680, 0x0116AA],
+ [0x011700, 0x01171A],
+ [0x011740, 0x011746],
+ [0x011800, 0x01182B],
+ [0x0118A0, 0x0118DF],
+ [0x0118FF, 0x011906],
+ [0x01190C, 0x011913],
+ [0x011915, 0x011916],
+ [0x011918, 0x01192F],
+ [0x0119A0, 0x0119A7],
+ [0x0119AA, 0x0119D0],
+ [0x011A0B, 0x011A32],
+ [0x011A5C, 0x011A89],
+ [0x011AB0, 0x011AF8],
+ [0x011C00, 0x011C08],
+ [0x011C0A, 0x011C2E],
+ [0x011C72, 0x011C8F],
+ [0x011D00, 0x011D06],
+ [0x011D08, 0x011D09],
+ [0x011D0B, 0x011D30],
+ [0x011D60, 0x011D65],
+ [0x011D67, 0x011D68],
+ [0x011D6A, 0x011D89],
+ [0x011EE0, 0x011EF2],
+ [0x011F04, 0x011F10],
+ [0x011F12, 0x011F33],
+ [0x012000, 0x012399],
+ [0x012400, 0x01246E],
+ [0x012480, 0x012543],
+ [0x012F90, 0x012FF0],
+ [0x013000, 0x01342F],
+ [0x013441, 0x013446],
+ [0x014400, 0x014646],
+ [0x016800, 0x016A38],
+ [0x016A40, 0x016A5E],
+ [0x016A70, 0x016ABE],
+ [0x016AD0, 0x016AED],
+ [0x016B00, 0x016B2F],
+ [0x016B40, 0x016B43],
+ [0x016B63, 0x016B77],
+ [0x016B7D, 0x016B8F],
+ [0x016E40, 0x016E7F],
+ [0x016F00, 0x016F4A],
+ [0x016F93, 0x016F9F],
+ [0x016FE0, 0x016FE1],
+ [0x017000, 0x0187F7],
+ [0x018800, 0x018CD5],
+ [0x018D00, 0x018D08],
+ [0x01AFF0, 0x01AFF3],
+ [0x01AFF5, 0x01AFFB],
+ [0x01AFFD, 0x01AFFE],
+ [0x01B000, 0x01B122],
+ [0x01B150, 0x01B152],
+ [0x01B164, 0x01B167],
+ [0x01B170, 0x01B2FB],
+ [0x01BC00, 0x01BC6A],
+ [0x01BC70, 0x01BC7C],
+ [0x01BC80, 0x01BC88],
+ [0x01BC90, 0x01BC99],
+ [0x01D400, 0x01D454],
+ [0x01D456, 0x01D49C],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D51E, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D552, 0x01D6A5],
+ [0x01D6A8, 0x01D6C0],
+ [0x01D6C2, 0x01D6DA],
+ [0x01D6DC, 0x01D6FA],
+ [0x01D6FC, 0x01D714],
+ [0x01D716, 0x01D734],
+ [0x01D736, 0x01D74E],
+ [0x01D750, 0x01D76E],
+ [0x01D770, 0x01D788],
+ [0x01D78A, 0x01D7A8],
+ [0x01D7AA, 0x01D7C2],
+ [0x01D7C4, 0x01D7CB],
+ [0x01DF00, 0x01DF1E],
+ [0x01DF25, 0x01DF2A],
+ [0x01E030, 0x01E06D],
+ [0x01E100, 0x01E12C],
+ [0x01E137, 0x01E13D],
+ [0x01E290, 0x01E2AD],
+ [0x01E2C0, 0x01E2EB],
+ [0x01E4D0, 0x01E4EB],
+ [0x01E7E0, 0x01E7E6],
+ [0x01E7E8, 0x01E7EB],
+ [0x01E7ED, 0x01E7EE],
+ [0x01E7F0, 0x01E7FE],
+ [0x01E800, 0x01E8C4],
+ [0x01E900, 0x01E943],
+ [0x01EE00, 0x01EE03],
+ [0x01EE05, 0x01EE1F],
+ [0x01EE21, 0x01EE22],
+ [0x01EE29, 0x01EE32],
+ [0x01EE34, 0x01EE37],
+ [0x01EE4D, 0x01EE4F],
+ [0x01EE51, 0x01EE52],
+ [0x01EE61, 0x01EE62],
+ [0x01EE67, 0x01EE6A],
+ [0x01EE6C, 0x01EE72],
+ [0x01EE74, 0x01EE77],
+ [0x01EE79, 0x01EE7C],
+ [0x01EE80, 0x01EE89],
+ [0x01EE8B, 0x01EE9B],
+ [0x01EEA1, 0x01EEA3],
+ [0x01EEA5, 0x01EEA9],
+ [0x01EEAB, 0x01EEBB],
+ [0x020000, 0x02A6DF],
+ [0x02A700, 0x02B739],
+ [0x02B740, 0x02B81D],
+ [0x02B820, 0x02CEA1],
+ [0x02CEB0, 0x02EBE0],
+ [0x02F800, 0x02FA1D],
+ [0x030000, 0x03134A],
+ [0x031350, 0x0323AF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{ID_Start}+$/u,
+ matchSymbols,
+ "\\p{ID_Start}"
+);
+testPropertyEscapes(
+ /^\p{IDS}+$/u,
+ matchSymbols,
+ "\\p{IDS}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000D7,
+ 0x0000F7,
+ 0x0002ED,
+ 0x000375,
+ 0x00037E,
+ 0x000387,
+ 0x00038B,
+ 0x00038D,
+ 0x0003A2,
+ 0x0003F6,
+ 0x000530,
+ 0x000670,
+ 0x0006D4,
+ 0x000711,
+ 0x000888,
+ 0x0009A9,
+ 0x0009B1,
+ 0x0009DE,
+ 0x000A29,
+ 0x000A31,
+ 0x000A34,
+ 0x000A37,
+ 0x000A5D,
+ 0x000A8E,
+ 0x000A92,
+ 0x000AA9,
+ 0x000AB1,
+ 0x000AB4,
+ 0x000B29,
+ 0x000B31,
+ 0x000B34,
+ 0x000B5E,
+ 0x000B84,
+ 0x000B91,
+ 0x000B9B,
+ 0x000B9D,
+ 0x000C0D,
+ 0x000C11,
+ 0x000C29,
+ 0x000C8D,
+ 0x000C91,
+ 0x000CA9,
+ 0x000CB4,
+ 0x000CDF,
+ 0x000D0D,
+ 0x000D11,
+ 0x000DB2,
+ 0x000DBC,
+ 0x000E31,
+ 0x000E83,
+ 0x000E85,
+ 0x000E8B,
+ 0x000EA4,
+ 0x000EA6,
+ 0x000EB1,
+ 0x000EC5,
+ 0x000F48,
+ 0x0010C6,
+ 0x0010FB,
+ 0x001249,
+ 0x001257,
+ 0x001259,
+ 0x001289,
+ 0x0012B1,
+ 0x0012BF,
+ 0x0012C1,
+ 0x0012D7,
+ 0x001311,
+ 0x001680,
+ 0x00176D,
+ 0x0018A9,
+ 0x001CED,
+ 0x001CF4,
+ 0x001F58,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x001FB5,
+ 0x001FBD,
+ 0x001FC5,
+ 0x001FF5,
+ 0x002114,
+ 0x002125,
+ 0x002127,
+ 0x002129,
+ 0x002D26,
+ 0x002DA7,
+ 0x002DAF,
+ 0x002DB7,
+ 0x002DBF,
+ 0x002DC7,
+ 0x002DCF,
+ 0x002DD7,
+ 0x0030A0,
+ 0x0030FB,
+ 0x003130,
+ 0x00A7D2,
+ 0x00A7D4,
+ 0x00A802,
+ 0x00A806,
+ 0x00A80B,
+ 0x00A8FC,
+ 0x00A9E5,
+ 0x00A9FF,
+ 0x00AA43,
+ 0x00AAB0,
+ 0x00AAC1,
+ 0x00AB27,
+ 0x00AB2F,
+ 0x00AB5B,
+ 0x00FB1E,
+ 0x00FB29,
+ 0x00FB37,
+ 0x00FB3D,
+ 0x00FB3F,
+ 0x00FB42,
+ 0x00FB45,
+ 0x00FE75,
+ 0x01000C,
+ 0x010027,
+ 0x01003B,
+ 0x01003E,
+ 0x0103D0,
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x010596,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA,
+ 0x010786,
+ 0x0107B1,
+ 0x010809,
+ 0x010836,
+ 0x0108F3,
+ 0x010A14,
+ 0x010A18,
+ 0x010AC8,
+ 0x0111DB,
+ 0x011212,
+ 0x011287,
+ 0x011289,
+ 0x01128E,
+ 0x01129E,
+ 0x011329,
+ 0x011331,
+ 0x011334,
+ 0x0114C6,
+ 0x011914,
+ 0x011917,
+ 0x011940,
+ 0x0119E2,
+ 0x011C09,
+ 0x011D07,
+ 0x011D0A,
+ 0x011D66,
+ 0x011D69,
+ 0x011F03,
+ 0x011F11,
+ 0x016FE2,
+ 0x01AFF4,
+ 0x01AFFC,
+ 0x01AFFF,
+ 0x01D455,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D506,
+ 0x01D515,
+ 0x01D51D,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545,
+ 0x01D551,
+ 0x01D6C1,
+ 0x01D6DB,
+ 0x01D6FB,
+ 0x01D715,
+ 0x01D735,
+ 0x01D74F,
+ 0x01D76F,
+ 0x01D789,
+ 0x01D7A9,
+ 0x01D7C3,
+ 0x01E7E7,
+ 0x01E7EC,
+ 0x01E7EF,
+ 0x01E7FF,
+ 0x01EE04,
+ 0x01EE20,
+ 0x01EE23,
+ 0x01EE28,
+ 0x01EE33,
+ 0x01EE38,
+ 0x01EE3A,
+ 0x01EE48,
+ 0x01EE4A,
+ 0x01EE4C,
+ 0x01EE50,
+ 0x01EE53,
+ 0x01EE58,
+ 0x01EE5A,
+ 0x01EE5C,
+ 0x01EE5E,
+ 0x01EE60,
+ 0x01EE63,
+ 0x01EE6B,
+ 0x01EE73,
+ 0x01EE78,
+ 0x01EE7D,
+ 0x01EE7F,
+ 0x01EE8A,
+ 0x01EEA4,
+ 0x01EEAA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000040],
+ [0x00005B, 0x000060],
+ [0x00007B, 0x0000A9],
+ [0x0000AB, 0x0000B4],
+ [0x0000B6, 0x0000B9],
+ [0x0000BB, 0x0000BF],
+ [0x0002C2, 0x0002C5],
+ [0x0002D2, 0x0002DF],
+ [0x0002E5, 0x0002EB],
+ [0x0002EF, 0x00036F],
+ [0x000378, 0x000379],
+ [0x000380, 0x000385],
+ [0x000482, 0x000489],
+ [0x000557, 0x000558],
+ [0x00055A, 0x00055F],
+ [0x000589, 0x0005CF],
+ [0x0005EB, 0x0005EE],
+ [0x0005F3, 0x00061F],
+ [0x00064B, 0x00066D],
+ [0x0006D6, 0x0006E4],
+ [0x0006E7, 0x0006ED],
+ [0x0006F0, 0x0006F9],
+ [0x0006FD, 0x0006FE],
+ [0x000700, 0x00070F],
+ [0x000730, 0x00074C],
+ [0x0007A6, 0x0007B0],
+ [0x0007B2, 0x0007C9],
+ [0x0007EB, 0x0007F3],
+ [0x0007F6, 0x0007F9],
+ [0x0007FB, 0x0007FF],
+ [0x000816, 0x000819],
+ [0x00081B, 0x000823],
+ [0x000825, 0x000827],
+ [0x000829, 0x00083F],
+ [0x000859, 0x00085F],
+ [0x00086B, 0x00086F],
+ [0x00088F, 0x00089F],
+ [0x0008CA, 0x000903],
+ [0x00093A, 0x00093C],
+ [0x00093E, 0x00094F],
+ [0x000951, 0x000957],
+ [0x000962, 0x000970],
+ [0x000981, 0x000984],
+ [0x00098D, 0x00098E],
+ [0x000991, 0x000992],
+ [0x0009B3, 0x0009B5],
+ [0x0009BA, 0x0009BC],
+ [0x0009BE, 0x0009CD],
+ [0x0009CF, 0x0009DB],
+ [0x0009E2, 0x0009EF],
+ [0x0009F2, 0x0009FB],
+ [0x0009FD, 0x000A04],
+ [0x000A0B, 0x000A0E],
+ [0x000A11, 0x000A12],
+ [0x000A3A, 0x000A58],
+ [0x000A5F, 0x000A71],
+ [0x000A75, 0x000A84],
+ [0x000ABA, 0x000ABC],
+ [0x000ABE, 0x000ACF],
+ [0x000AD1, 0x000ADF],
+ [0x000AE2, 0x000AF8],
+ [0x000AFA, 0x000B04],
+ [0x000B0D, 0x000B0E],
+ [0x000B11, 0x000B12],
+ [0x000B3A, 0x000B3C],
+ [0x000B3E, 0x000B5B],
+ [0x000B62, 0x000B70],
+ [0x000B72, 0x000B82],
+ [0x000B8B, 0x000B8D],
+ [0x000B96, 0x000B98],
+ [0x000BA0, 0x000BA2],
+ [0x000BA5, 0x000BA7],
+ [0x000BAB, 0x000BAD],
+ [0x000BBA, 0x000BCF],
+ [0x000BD1, 0x000C04],
+ [0x000C3A, 0x000C3C],
+ [0x000C3E, 0x000C57],
+ [0x000C5B, 0x000C5C],
+ [0x000C5E, 0x000C5F],
+ [0x000C62, 0x000C7F],
+ [0x000C81, 0x000C84],
+ [0x000CBA, 0x000CBC],
+ [0x000CBE, 0x000CDC],
+ [0x000CE2, 0x000CF0],
+ [0x000CF3, 0x000D03],
+ [0x000D3B, 0x000D3C],
+ [0x000D3E, 0x000D4D],
+ [0x000D4F, 0x000D53],
+ [0x000D57, 0x000D5E],
+ [0x000D62, 0x000D79],
+ [0x000D80, 0x000D84],
+ [0x000D97, 0x000D99],
+ [0x000DBE, 0x000DBF],
+ [0x000DC7, 0x000E00],
+ [0x000E34, 0x000E3F],
+ [0x000E47, 0x000E80],
+ [0x000EB4, 0x000EBC],
+ [0x000EBE, 0x000EBF],
+ [0x000EC7, 0x000EDB],
+ [0x000EE0, 0x000EFF],
+ [0x000F01, 0x000F3F],
+ [0x000F6D, 0x000F87],
+ [0x000F8D, 0x000FFF],
+ [0x00102B, 0x00103E],
+ [0x001040, 0x00104F],
+ [0x001056, 0x001059],
+ [0x00105E, 0x001060],
+ [0x001062, 0x001064],
+ [0x001067, 0x00106D],
+ [0x001071, 0x001074],
+ [0x001082, 0x00108D],
+ [0x00108F, 0x00109F],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x0010CF],
+ [0x00124E, 0x00124F],
+ [0x00125E, 0x00125F],
+ [0x00128E, 0x00128F],
+ [0x0012B6, 0x0012B7],
+ [0x0012C6, 0x0012C7],
+ [0x001316, 0x001317],
+ [0x00135B, 0x00137F],
+ [0x001390, 0x00139F],
+ [0x0013F6, 0x0013F7],
+ [0x0013FE, 0x001400],
+ [0x00166D, 0x00166E],
+ [0x00169B, 0x00169F],
+ [0x0016EB, 0x0016ED],
+ [0x0016F9, 0x0016FF],
+ [0x001712, 0x00171E],
+ [0x001732, 0x00173F],
+ [0x001752, 0x00175F],
+ [0x001771, 0x00177F],
+ [0x0017B4, 0x0017D6],
+ [0x0017D8, 0x0017DB],
+ [0x0017DD, 0x00181F],
+ [0x001879, 0x00187F],
+ [0x0018AB, 0x0018AF],
+ [0x0018F6, 0x0018FF],
+ [0x00191F, 0x00194F],
+ [0x00196E, 0x00196F],
+ [0x001975, 0x00197F],
+ [0x0019AC, 0x0019AF],
+ [0x0019CA, 0x0019FF],
+ [0x001A17, 0x001A1F],
+ [0x001A55, 0x001AA6],
+ [0x001AA8, 0x001B04],
+ [0x001B34, 0x001B44],
+ [0x001B4D, 0x001B82],
+ [0x001BA1, 0x001BAD],
+ [0x001BB0, 0x001BB9],
+ [0x001BE6, 0x001BFF],
+ [0x001C24, 0x001C4C],
+ [0x001C50, 0x001C59],
+ [0x001C7E, 0x001C7F],
+ [0x001C89, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC0, 0x001CE8],
+ [0x001CF7, 0x001CF9],
+ [0x001CFB, 0x001CFF],
+ [0x001DC0, 0x001DFF],
+ [0x001F16, 0x001F17],
+ [0x001F1E, 0x001F1F],
+ [0x001F46, 0x001F47],
+ [0x001F4E, 0x001F4F],
+ [0x001F7E, 0x001F7F],
+ [0x001FBF, 0x001FC1],
+ [0x001FCD, 0x001FCF],
+ [0x001FD4, 0x001FD5],
+ [0x001FDC, 0x001FDF],
+ [0x001FED, 0x001FF1],
+ [0x001FFD, 0x002070],
+ [0x002072, 0x00207E],
+ [0x002080, 0x00208F],
+ [0x00209D, 0x002101],
+ [0x002103, 0x002106],
+ [0x002108, 0x002109],
+ [0x002116, 0x002117],
+ [0x00211E, 0x002123],
+ [0x00213A, 0x00213B],
+ [0x002140, 0x002144],
+ [0x00214A, 0x00214D],
+ [0x00214F, 0x00215F],
+ [0x002189, 0x002BFF],
+ [0x002CE5, 0x002CEA],
+ [0x002CEF, 0x002CF1],
+ [0x002CF4, 0x002CFF],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x002D2F],
+ [0x002D68, 0x002D6E],
+ [0x002D70, 0x002D7F],
+ [0x002D97, 0x002D9F],
+ [0x002DDF, 0x003004],
+ [0x003008, 0x003020],
+ [0x00302A, 0x003030],
+ [0x003036, 0x003037],
+ [0x00303D, 0x003040],
+ [0x003097, 0x00309A],
+ [0x003100, 0x003104],
+ [0x00318F, 0x00319F],
+ [0x0031C0, 0x0031EF],
+ [0x003200, 0x0033FF],
+ [0x004DC0, 0x004DFF],
+ [0x00A48D, 0x00A4CF],
+ [0x00A4FE, 0x00A4FF],
+ [0x00A60D, 0x00A60F],
+ [0x00A620, 0x00A629],
+ [0x00A62C, 0x00A63F],
+ [0x00A66F, 0x00A67E],
+ [0x00A69E, 0x00A69F],
+ [0x00A6F0, 0x00A716],
+ [0x00A720, 0x00A721],
+ [0x00A789, 0x00A78A],
+ [0x00A7CB, 0x00A7CF],
+ [0x00A7DA, 0x00A7F1],
+ [0x00A823, 0x00A83F],
+ [0x00A874, 0x00A881],
+ [0x00A8B4, 0x00A8F1],
+ [0x00A8F8, 0x00A8FA],
+ [0x00A8FF, 0x00A909],
+ [0x00A926, 0x00A92F],
+ [0x00A947, 0x00A95F],
+ [0x00A97D, 0x00A983],
+ [0x00A9B3, 0x00A9CE],
+ [0x00A9D0, 0x00A9DF],
+ [0x00A9F0, 0x00A9F9],
+ [0x00AA29, 0x00AA3F],
+ [0x00AA4C, 0x00AA5F],
+ [0x00AA77, 0x00AA79],
+ [0x00AA7B, 0x00AA7D],
+ [0x00AAB2, 0x00AAB4],
+ [0x00AAB7, 0x00AAB8],
+ [0x00AABE, 0x00AABF],
+ [0x00AAC3, 0x00AADA],
+ [0x00AADE, 0x00AADF],
+ [0x00AAEB, 0x00AAF1],
+ [0x00AAF5, 0x00AB00],
+ [0x00AB07, 0x00AB08],
+ [0x00AB0F, 0x00AB10],
+ [0x00AB17, 0x00AB1F],
+ [0x00AB6A, 0x00AB6F],
+ [0x00ABE3, 0x00ABFF],
+ [0x00D7A4, 0x00D7AF],
+ [0x00D7C7, 0x00D7CA],
+ [0x00D7FC, 0x00DBFF],
+ [0x00E000, 0x00F8FF],
+ [0x00FA6E, 0x00FA6F],
+ [0x00FADA, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FB1C],
+ [0x00FBB2, 0x00FBD2],
+ [0x00FD3E, 0x00FD4F],
+ [0x00FD90, 0x00FD91],
+ [0x00FDC8, 0x00FDEF],
+ [0x00FDFC, 0x00FE6F],
+ [0x00FEFD, 0x00FF20],
+ [0x00FF3B, 0x00FF40],
+ [0x00FF5B, 0x00FF65],
+ [0x00FFBF, 0x00FFC1],
+ [0x00FFC8, 0x00FFC9],
+ [0x00FFD0, 0x00FFD1],
+ [0x00FFD8, 0x00FFD9],
+ [0x00FFDD, 0x00FFFF],
+ [0x01004E, 0x01004F],
+ [0x01005E, 0x01007F],
+ [0x0100FB, 0x01013F],
+ [0x010175, 0x01027F],
+ [0x01029D, 0x01029F],
+ [0x0102D1, 0x0102FF],
+ [0x010320, 0x01032C],
+ [0x01034B, 0x01034F],
+ [0x010376, 0x01037F],
+ [0x01039E, 0x01039F],
+ [0x0103C4, 0x0103C7],
+ [0x0103D6, 0x0103FF],
+ [0x01049E, 0x0104AF],
+ [0x0104D4, 0x0104D7],
+ [0x0104FC, 0x0104FF],
+ [0x010528, 0x01052F],
+ [0x010564, 0x01056F],
+ [0x0105BD, 0x0105FF],
+ [0x010737, 0x01073F],
+ [0x010756, 0x01075F],
+ [0x010768, 0x01077F],
+ [0x0107BB, 0x0107FF],
+ [0x010806, 0x010807],
+ [0x010839, 0x01083B],
+ [0x01083D, 0x01083E],
+ [0x010856, 0x01085F],
+ [0x010877, 0x01087F],
+ [0x01089F, 0x0108DF],
+ [0x0108F6, 0x0108FF],
+ [0x010916, 0x01091F],
+ [0x01093A, 0x01097F],
+ [0x0109B8, 0x0109BD],
+ [0x0109C0, 0x0109FF],
+ [0x010A01, 0x010A0F],
+ [0x010A36, 0x010A5F],
+ [0x010A7D, 0x010A7F],
+ [0x010A9D, 0x010ABF],
+ [0x010AE5, 0x010AFF],
+ [0x010B36, 0x010B3F],
+ [0x010B56, 0x010B5F],
+ [0x010B73, 0x010B7F],
+ [0x010B92, 0x010BFF],
+ [0x010C49, 0x010C7F],
+ [0x010CB3, 0x010CBF],
+ [0x010CF3, 0x010CFF],
+ [0x010D24, 0x010E7F],
+ [0x010EAA, 0x010EAF],
+ [0x010EB2, 0x010EFF],
+ [0x010F1D, 0x010F26],
+ [0x010F28, 0x010F2F],
+ [0x010F46, 0x010F6F],
+ [0x010F82, 0x010FAF],
+ [0x010FC5, 0x010FDF],
+ [0x010FF7, 0x011002],
+ [0x011038, 0x011070],
+ [0x011073, 0x011074],
+ [0x011076, 0x011082],
+ [0x0110B0, 0x0110CF],
+ [0x0110E9, 0x011102],
+ [0x011127, 0x011143],
+ [0x011145, 0x011146],
+ [0x011148, 0x01114F],
+ [0x011173, 0x011175],
+ [0x011177, 0x011182],
+ [0x0111B3, 0x0111C0],
+ [0x0111C5, 0x0111D9],
+ [0x0111DD, 0x0111FF],
+ [0x01122C, 0x01123E],
+ [0x011241, 0x01127F],
+ [0x0112A9, 0x0112AF],
+ [0x0112DF, 0x011304],
+ [0x01130D, 0x01130E],
+ [0x011311, 0x011312],
+ [0x01133A, 0x01133C],
+ [0x01133E, 0x01134F],
+ [0x011351, 0x01135C],
+ [0x011362, 0x0113FF],
+ [0x011435, 0x011446],
+ [0x01144B, 0x01145E],
+ [0x011462, 0x01147F],
+ [0x0114B0, 0x0114C3],
+ [0x0114C8, 0x01157F],
+ [0x0115AF, 0x0115D7],
+ [0x0115DC, 0x0115FF],
+ [0x011630, 0x011643],
+ [0x011645, 0x01167F],
+ [0x0116AB, 0x0116B7],
+ [0x0116B9, 0x0116FF],
+ [0x01171B, 0x01173F],
+ [0x011747, 0x0117FF],
+ [0x01182C, 0x01189F],
+ [0x0118E0, 0x0118FE],
+ [0x011907, 0x011908],
+ [0x01190A, 0x01190B],
+ [0x011930, 0x01193E],
+ [0x011942, 0x01199F],
+ [0x0119A8, 0x0119A9],
+ [0x0119D1, 0x0119E0],
+ [0x0119E4, 0x0119FF],
+ [0x011A01, 0x011A0A],
+ [0x011A33, 0x011A39],
+ [0x011A3B, 0x011A4F],
+ [0x011A51, 0x011A5B],
+ [0x011A8A, 0x011A9C],
+ [0x011A9E, 0x011AAF],
+ [0x011AF9, 0x011BFF],
+ [0x011C2F, 0x011C3F],
+ [0x011C41, 0x011C71],
+ [0x011C90, 0x011CFF],
+ [0x011D31, 0x011D45],
+ [0x011D47, 0x011D5F],
+ [0x011D8A, 0x011D97],
+ [0x011D99, 0x011EDF],
+ [0x011EF3, 0x011F01],
+ [0x011F34, 0x011FAF],
+ [0x011FB1, 0x011FFF],
+ [0x01239A, 0x0123FF],
+ [0x01246F, 0x01247F],
+ [0x012544, 0x012F8F],
+ [0x012FF1, 0x012FFF],
+ [0x013430, 0x013440],
+ [0x013447, 0x0143FF],
+ [0x014647, 0x0167FF],
+ [0x016A39, 0x016A3F],
+ [0x016A5F, 0x016A6F],
+ [0x016ABF, 0x016ACF],
+ [0x016AEE, 0x016AFF],
+ [0x016B30, 0x016B3F],
+ [0x016B44, 0x016B62],
+ [0x016B78, 0x016B7C],
+ [0x016B90, 0x016E3F],
+ [0x016E80, 0x016EFF],
+ [0x016F4B, 0x016F4F],
+ [0x016F51, 0x016F92],
+ [0x016FA0, 0x016FDF],
+ [0x016FE4, 0x016FFF],
+ [0x0187F8, 0x0187FF],
+ [0x018CD6, 0x018CFF],
+ [0x018D09, 0x01AFEF],
+ [0x01B123, 0x01B131],
+ [0x01B133, 0x01B14F],
+ [0x01B153, 0x01B154],
+ [0x01B156, 0x01B163],
+ [0x01B168, 0x01B16F],
+ [0x01B2FC, 0x01BBFF],
+ [0x01BC6B, 0x01BC6F],
+ [0x01BC7D, 0x01BC7F],
+ [0x01BC89, 0x01BC8F],
+ [0x01BC9A, 0x01D3FF],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D50B, 0x01D50C],
+ [0x01D547, 0x01D549],
+ [0x01D6A6, 0x01D6A7],
+ [0x01D7CC, 0x01DEFF],
+ [0x01DF1F, 0x01DF24],
+ [0x01DF2B, 0x01E02F],
+ [0x01E06E, 0x01E0FF],
+ [0x01E12D, 0x01E136],
+ [0x01E13E, 0x01E14D],
+ [0x01E14F, 0x01E28F],
+ [0x01E2AE, 0x01E2BF],
+ [0x01E2EC, 0x01E4CF],
+ [0x01E4EC, 0x01E7DF],
+ [0x01E8C5, 0x01E8FF],
+ [0x01E944, 0x01E94A],
+ [0x01E94C, 0x01EDFF],
+ [0x01EE25, 0x01EE26],
+ [0x01EE3C, 0x01EE41],
+ [0x01EE43, 0x01EE46],
+ [0x01EE55, 0x01EE56],
+ [0x01EE65, 0x01EE66],
+ [0x01EE9C, 0x01EEA0],
+ [0x01EEBC, 0x01FFFF],
+ [0x02A6E0, 0x02A6FF],
+ [0x02B73A, 0x02B73F],
+ [0x02B81E, 0x02B81F],
+ [0x02CEA2, 0x02CEAF],
+ [0x02EBE1, 0x02F7FF],
+ [0x02FA1E, 0x02FFFF],
+ [0x03134B, 0x03134F],
+ [0x0323B0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{ID_Start}+$/u,
+ nonMatchSymbols,
+ "\\P{ID_Start}"
+);
+testPropertyEscapes(
+ /^\P{IDS}+$/u,
+ nonMatchSymbols,
+ "\\P{IDS}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Ideographic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Ideographic.js
new file mode 100644
index 0000000000..6a10f8acfe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Ideographic.js
@@ -0,0 +1,92 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Ideographic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x016FE4
+ ],
+ ranges: [
+ [0x003006, 0x003007],
+ [0x003021, 0x003029],
+ [0x003038, 0x00303A],
+ [0x003400, 0x004DBF],
+ [0x004E00, 0x009FFF],
+ [0x00F900, 0x00FA6D],
+ [0x00FA70, 0x00FAD9],
+ [0x017000, 0x0187F7],
+ [0x018800, 0x018CD5],
+ [0x018D00, 0x018D08],
+ [0x01B170, 0x01B2FB],
+ [0x020000, 0x02A6DF],
+ [0x02A700, 0x02B739],
+ [0x02B740, 0x02B81D],
+ [0x02B820, 0x02CEA1],
+ [0x02CEB0, 0x02EBE0],
+ [0x02F800, 0x02FA1D],
+ [0x030000, 0x03134A],
+ [0x031350, 0x0323AF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Ideographic}+$/u,
+ matchSymbols,
+ "\\p{Ideographic}"
+);
+testPropertyEscapes(
+ /^\p{Ideo}+$/u,
+ matchSymbols,
+ "\\p{Ideo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x003005],
+ [0x003008, 0x003020],
+ [0x00302A, 0x003037],
+ [0x00303B, 0x0033FF],
+ [0x004DC0, 0x004DFF],
+ [0x00A000, 0x00DBFF],
+ [0x00E000, 0x00F8FF],
+ [0x00FA6E, 0x00FA6F],
+ [0x00FADA, 0x016FE3],
+ [0x016FE5, 0x016FFF],
+ [0x0187F8, 0x0187FF],
+ [0x018CD6, 0x018CFF],
+ [0x018D09, 0x01B16F],
+ [0x01B2FC, 0x01FFFF],
+ [0x02A6E0, 0x02A6FF],
+ [0x02B73A, 0x02B73F],
+ [0x02B81E, 0x02B81F],
+ [0x02CEA2, 0x02CEAF],
+ [0x02EBE1, 0x02F7FF],
+ [0x02FA1E, 0x02FFFF],
+ [0x03134B, 0x03134F],
+ [0x0323B0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Ideographic}+$/u,
+ nonMatchSymbols,
+ "\\P{Ideographic}"
+);
+testPropertyEscapes(
+ /^\P{Ideo}+$/u,
+ nonMatchSymbols,
+ "\\P{Ideo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Join_Control.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Join_Control.js
new file mode 100644
index 0000000000..4d0dffd4f3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Join_Control.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Join_Control`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00200C, 0x00200D]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Join_Control}+$/u,
+ matchSymbols,
+ "\\p{Join_Control}"
+);
+testPropertyEscapes(
+ /^\p{Join_C}+$/u,
+ matchSymbols,
+ "\\p{Join_C}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00200B],
+ [0x00200E, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Join_Control}+$/u,
+ nonMatchSymbols,
+ "\\P{Join_Control}"
+);
+testPropertyEscapes(
+ /^\P{Join_C}+$/u,
+ nonMatchSymbols,
+ "\\P{Join_C}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Logical_Order_Exception.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Logical_Order_Exception.js
new file mode 100644
index 0000000000..8704592db3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Logical_Order_Exception.js
@@ -0,0 +1,67 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Logical_Order_Exception`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0019BA,
+ 0x00AAB9
+ ],
+ ranges: [
+ [0x000E40, 0x000E44],
+ [0x000EC0, 0x000EC4],
+ [0x0019B5, 0x0019B7],
+ [0x00AAB5, 0x00AAB6],
+ [0x00AABB, 0x00AABC]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Logical_Order_Exception}+$/u,
+ matchSymbols,
+ "\\p{Logical_Order_Exception}"
+);
+testPropertyEscapes(
+ /^\p{LOE}+$/u,
+ matchSymbols,
+ "\\p{LOE}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00AABA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000E3F],
+ [0x000E45, 0x000EBF],
+ [0x000EC5, 0x0019B4],
+ [0x0019B8, 0x0019B9],
+ [0x0019BB, 0x00AAB4],
+ [0x00AAB7, 0x00AAB8],
+ [0x00AABD, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Logical_Order_Exception}+$/u,
+ nonMatchSymbols,
+ "\\P{Logical_Order_Exception}"
+);
+testPropertyEscapes(
+ /^\P{LOE}+$/u,
+ nonMatchSymbols,
+ "\\P{LOE}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Lowercase.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Lowercase.js
new file mode 100644
index 0000000000..d88d1a2a64
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Lowercase.js
@@ -0,0 +1,1395 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Lowercase`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000AA,
+ 0x0000B5,
+ 0x0000BA,
+ 0x000101,
+ 0x000103,
+ 0x000105,
+ 0x000107,
+ 0x000109,
+ 0x00010B,
+ 0x00010D,
+ 0x00010F,
+ 0x000111,
+ 0x000113,
+ 0x000115,
+ 0x000117,
+ 0x000119,
+ 0x00011B,
+ 0x00011D,
+ 0x00011F,
+ 0x000121,
+ 0x000123,
+ 0x000125,
+ 0x000127,
+ 0x000129,
+ 0x00012B,
+ 0x00012D,
+ 0x00012F,
+ 0x000131,
+ 0x000133,
+ 0x000135,
+ 0x00013A,
+ 0x00013C,
+ 0x00013E,
+ 0x000140,
+ 0x000142,
+ 0x000144,
+ 0x000146,
+ 0x00014B,
+ 0x00014D,
+ 0x00014F,
+ 0x000151,
+ 0x000153,
+ 0x000155,
+ 0x000157,
+ 0x000159,
+ 0x00015B,
+ 0x00015D,
+ 0x00015F,
+ 0x000161,
+ 0x000163,
+ 0x000165,
+ 0x000167,
+ 0x000169,
+ 0x00016B,
+ 0x00016D,
+ 0x00016F,
+ 0x000171,
+ 0x000173,
+ 0x000175,
+ 0x000177,
+ 0x00017A,
+ 0x00017C,
+ 0x000183,
+ 0x000185,
+ 0x000188,
+ 0x000192,
+ 0x000195,
+ 0x00019E,
+ 0x0001A1,
+ 0x0001A3,
+ 0x0001A5,
+ 0x0001A8,
+ 0x0001AD,
+ 0x0001B0,
+ 0x0001B4,
+ 0x0001B6,
+ 0x0001C6,
+ 0x0001C9,
+ 0x0001CC,
+ 0x0001CE,
+ 0x0001D0,
+ 0x0001D2,
+ 0x0001D4,
+ 0x0001D6,
+ 0x0001D8,
+ 0x0001DA,
+ 0x0001DF,
+ 0x0001E1,
+ 0x0001E3,
+ 0x0001E5,
+ 0x0001E7,
+ 0x0001E9,
+ 0x0001EB,
+ 0x0001ED,
+ 0x0001F3,
+ 0x0001F5,
+ 0x0001F9,
+ 0x0001FB,
+ 0x0001FD,
+ 0x0001FF,
+ 0x000201,
+ 0x000203,
+ 0x000205,
+ 0x000207,
+ 0x000209,
+ 0x00020B,
+ 0x00020D,
+ 0x00020F,
+ 0x000211,
+ 0x000213,
+ 0x000215,
+ 0x000217,
+ 0x000219,
+ 0x00021B,
+ 0x00021D,
+ 0x00021F,
+ 0x000221,
+ 0x000223,
+ 0x000225,
+ 0x000227,
+ 0x000229,
+ 0x00022B,
+ 0x00022D,
+ 0x00022F,
+ 0x000231,
+ 0x00023C,
+ 0x000242,
+ 0x000247,
+ 0x000249,
+ 0x00024B,
+ 0x00024D,
+ 0x000345,
+ 0x000371,
+ 0x000373,
+ 0x000377,
+ 0x000390,
+ 0x0003D9,
+ 0x0003DB,
+ 0x0003DD,
+ 0x0003DF,
+ 0x0003E1,
+ 0x0003E3,
+ 0x0003E5,
+ 0x0003E7,
+ 0x0003E9,
+ 0x0003EB,
+ 0x0003ED,
+ 0x0003F5,
+ 0x0003F8,
+ 0x000461,
+ 0x000463,
+ 0x000465,
+ 0x000467,
+ 0x000469,
+ 0x00046B,
+ 0x00046D,
+ 0x00046F,
+ 0x000471,
+ 0x000473,
+ 0x000475,
+ 0x000477,
+ 0x000479,
+ 0x00047B,
+ 0x00047D,
+ 0x00047F,
+ 0x000481,
+ 0x00048B,
+ 0x00048D,
+ 0x00048F,
+ 0x000491,
+ 0x000493,
+ 0x000495,
+ 0x000497,
+ 0x000499,
+ 0x00049B,
+ 0x00049D,
+ 0x00049F,
+ 0x0004A1,
+ 0x0004A3,
+ 0x0004A5,
+ 0x0004A7,
+ 0x0004A9,
+ 0x0004AB,
+ 0x0004AD,
+ 0x0004AF,
+ 0x0004B1,
+ 0x0004B3,
+ 0x0004B5,
+ 0x0004B7,
+ 0x0004B9,
+ 0x0004BB,
+ 0x0004BD,
+ 0x0004BF,
+ 0x0004C2,
+ 0x0004C4,
+ 0x0004C6,
+ 0x0004C8,
+ 0x0004CA,
+ 0x0004CC,
+ 0x0004D1,
+ 0x0004D3,
+ 0x0004D5,
+ 0x0004D7,
+ 0x0004D9,
+ 0x0004DB,
+ 0x0004DD,
+ 0x0004DF,
+ 0x0004E1,
+ 0x0004E3,
+ 0x0004E5,
+ 0x0004E7,
+ 0x0004E9,
+ 0x0004EB,
+ 0x0004ED,
+ 0x0004EF,
+ 0x0004F1,
+ 0x0004F3,
+ 0x0004F5,
+ 0x0004F7,
+ 0x0004F9,
+ 0x0004FB,
+ 0x0004FD,
+ 0x0004FF,
+ 0x000501,
+ 0x000503,
+ 0x000505,
+ 0x000507,
+ 0x000509,
+ 0x00050B,
+ 0x00050D,
+ 0x00050F,
+ 0x000511,
+ 0x000513,
+ 0x000515,
+ 0x000517,
+ 0x000519,
+ 0x00051B,
+ 0x00051D,
+ 0x00051F,
+ 0x000521,
+ 0x000523,
+ 0x000525,
+ 0x000527,
+ 0x000529,
+ 0x00052B,
+ 0x00052D,
+ 0x00052F,
+ 0x001E01,
+ 0x001E03,
+ 0x001E05,
+ 0x001E07,
+ 0x001E09,
+ 0x001E0B,
+ 0x001E0D,
+ 0x001E0F,
+ 0x001E11,
+ 0x001E13,
+ 0x001E15,
+ 0x001E17,
+ 0x001E19,
+ 0x001E1B,
+ 0x001E1D,
+ 0x001E1F,
+ 0x001E21,
+ 0x001E23,
+ 0x001E25,
+ 0x001E27,
+ 0x001E29,
+ 0x001E2B,
+ 0x001E2D,
+ 0x001E2F,
+ 0x001E31,
+ 0x001E33,
+ 0x001E35,
+ 0x001E37,
+ 0x001E39,
+ 0x001E3B,
+ 0x001E3D,
+ 0x001E3F,
+ 0x001E41,
+ 0x001E43,
+ 0x001E45,
+ 0x001E47,
+ 0x001E49,
+ 0x001E4B,
+ 0x001E4D,
+ 0x001E4F,
+ 0x001E51,
+ 0x001E53,
+ 0x001E55,
+ 0x001E57,
+ 0x001E59,
+ 0x001E5B,
+ 0x001E5D,
+ 0x001E5F,
+ 0x001E61,
+ 0x001E63,
+ 0x001E65,
+ 0x001E67,
+ 0x001E69,
+ 0x001E6B,
+ 0x001E6D,
+ 0x001E6F,
+ 0x001E71,
+ 0x001E73,
+ 0x001E75,
+ 0x001E77,
+ 0x001E79,
+ 0x001E7B,
+ 0x001E7D,
+ 0x001E7F,
+ 0x001E81,
+ 0x001E83,
+ 0x001E85,
+ 0x001E87,
+ 0x001E89,
+ 0x001E8B,
+ 0x001E8D,
+ 0x001E8F,
+ 0x001E91,
+ 0x001E93,
+ 0x001E9F,
+ 0x001EA1,
+ 0x001EA3,
+ 0x001EA5,
+ 0x001EA7,
+ 0x001EA9,
+ 0x001EAB,
+ 0x001EAD,
+ 0x001EAF,
+ 0x001EB1,
+ 0x001EB3,
+ 0x001EB5,
+ 0x001EB7,
+ 0x001EB9,
+ 0x001EBB,
+ 0x001EBD,
+ 0x001EBF,
+ 0x001EC1,
+ 0x001EC3,
+ 0x001EC5,
+ 0x001EC7,
+ 0x001EC9,
+ 0x001ECB,
+ 0x001ECD,
+ 0x001ECF,
+ 0x001ED1,
+ 0x001ED3,
+ 0x001ED5,
+ 0x001ED7,
+ 0x001ED9,
+ 0x001EDB,
+ 0x001EDD,
+ 0x001EDF,
+ 0x001EE1,
+ 0x001EE3,
+ 0x001EE5,
+ 0x001EE7,
+ 0x001EE9,
+ 0x001EEB,
+ 0x001EED,
+ 0x001EEF,
+ 0x001EF1,
+ 0x001EF3,
+ 0x001EF5,
+ 0x001EF7,
+ 0x001EF9,
+ 0x001EFB,
+ 0x001EFD,
+ 0x001FBE,
+ 0x002071,
+ 0x00207F,
+ 0x00210A,
+ 0x002113,
+ 0x00212F,
+ 0x002134,
+ 0x002139,
+ 0x00214E,
+ 0x002184,
+ 0x002C61,
+ 0x002C68,
+ 0x002C6A,
+ 0x002C6C,
+ 0x002C71,
+ 0x002C81,
+ 0x002C83,
+ 0x002C85,
+ 0x002C87,
+ 0x002C89,
+ 0x002C8B,
+ 0x002C8D,
+ 0x002C8F,
+ 0x002C91,
+ 0x002C93,
+ 0x002C95,
+ 0x002C97,
+ 0x002C99,
+ 0x002C9B,
+ 0x002C9D,
+ 0x002C9F,
+ 0x002CA1,
+ 0x002CA3,
+ 0x002CA5,
+ 0x002CA7,
+ 0x002CA9,
+ 0x002CAB,
+ 0x002CAD,
+ 0x002CAF,
+ 0x002CB1,
+ 0x002CB3,
+ 0x002CB5,
+ 0x002CB7,
+ 0x002CB9,
+ 0x002CBB,
+ 0x002CBD,
+ 0x002CBF,
+ 0x002CC1,
+ 0x002CC3,
+ 0x002CC5,
+ 0x002CC7,
+ 0x002CC9,
+ 0x002CCB,
+ 0x002CCD,
+ 0x002CCF,
+ 0x002CD1,
+ 0x002CD3,
+ 0x002CD5,
+ 0x002CD7,
+ 0x002CD9,
+ 0x002CDB,
+ 0x002CDD,
+ 0x002CDF,
+ 0x002CE1,
+ 0x002CEC,
+ 0x002CEE,
+ 0x002CF3,
+ 0x002D27,
+ 0x002D2D,
+ 0x00A641,
+ 0x00A643,
+ 0x00A645,
+ 0x00A647,
+ 0x00A649,
+ 0x00A64B,
+ 0x00A64D,
+ 0x00A64F,
+ 0x00A651,
+ 0x00A653,
+ 0x00A655,
+ 0x00A657,
+ 0x00A659,
+ 0x00A65B,
+ 0x00A65D,
+ 0x00A65F,
+ 0x00A661,
+ 0x00A663,
+ 0x00A665,
+ 0x00A667,
+ 0x00A669,
+ 0x00A66B,
+ 0x00A66D,
+ 0x00A681,
+ 0x00A683,
+ 0x00A685,
+ 0x00A687,
+ 0x00A689,
+ 0x00A68B,
+ 0x00A68D,
+ 0x00A68F,
+ 0x00A691,
+ 0x00A693,
+ 0x00A695,
+ 0x00A697,
+ 0x00A699,
+ 0x00A723,
+ 0x00A725,
+ 0x00A727,
+ 0x00A729,
+ 0x00A72B,
+ 0x00A72D,
+ 0x00A733,
+ 0x00A735,
+ 0x00A737,
+ 0x00A739,
+ 0x00A73B,
+ 0x00A73D,
+ 0x00A73F,
+ 0x00A741,
+ 0x00A743,
+ 0x00A745,
+ 0x00A747,
+ 0x00A749,
+ 0x00A74B,
+ 0x00A74D,
+ 0x00A74F,
+ 0x00A751,
+ 0x00A753,
+ 0x00A755,
+ 0x00A757,
+ 0x00A759,
+ 0x00A75B,
+ 0x00A75D,
+ 0x00A75F,
+ 0x00A761,
+ 0x00A763,
+ 0x00A765,
+ 0x00A767,
+ 0x00A769,
+ 0x00A76B,
+ 0x00A76D,
+ 0x00A77A,
+ 0x00A77C,
+ 0x00A77F,
+ 0x00A781,
+ 0x00A783,
+ 0x00A785,
+ 0x00A787,
+ 0x00A78C,
+ 0x00A78E,
+ 0x00A791,
+ 0x00A797,
+ 0x00A799,
+ 0x00A79B,
+ 0x00A79D,
+ 0x00A79F,
+ 0x00A7A1,
+ 0x00A7A3,
+ 0x00A7A5,
+ 0x00A7A7,
+ 0x00A7A9,
+ 0x00A7AF,
+ 0x00A7B5,
+ 0x00A7B7,
+ 0x00A7B9,
+ 0x00A7BB,
+ 0x00A7BD,
+ 0x00A7BF,
+ 0x00A7C1,
+ 0x00A7C3,
+ 0x00A7C8,
+ 0x00A7CA,
+ 0x00A7D1,
+ 0x00A7D3,
+ 0x00A7D5,
+ 0x00A7D7,
+ 0x00A7D9,
+ 0x00A7F6,
+ 0x010780,
+ 0x01D4BB,
+ 0x01D7CB
+ ],
+ ranges: [
+ [0x000061, 0x00007A],
+ [0x0000DF, 0x0000F6],
+ [0x0000F8, 0x0000FF],
+ [0x000137, 0x000138],
+ [0x000148, 0x000149],
+ [0x00017E, 0x000180],
+ [0x00018C, 0x00018D],
+ [0x000199, 0x00019B],
+ [0x0001AA, 0x0001AB],
+ [0x0001B9, 0x0001BA],
+ [0x0001BD, 0x0001BF],
+ [0x0001DC, 0x0001DD],
+ [0x0001EF, 0x0001F0],
+ [0x000233, 0x000239],
+ [0x00023F, 0x000240],
+ [0x00024F, 0x000293],
+ [0x000295, 0x0002B8],
+ [0x0002C0, 0x0002C1],
+ [0x0002E0, 0x0002E4],
+ [0x00037A, 0x00037D],
+ [0x0003AC, 0x0003CE],
+ [0x0003D0, 0x0003D1],
+ [0x0003D5, 0x0003D7],
+ [0x0003EF, 0x0003F3],
+ [0x0003FB, 0x0003FC],
+ [0x000430, 0x00045F],
+ [0x0004CE, 0x0004CF],
+ [0x000560, 0x000588],
+ [0x0010D0, 0x0010FA],
+ [0x0010FC, 0x0010FF],
+ [0x0013F8, 0x0013FD],
+ [0x001C80, 0x001C88],
+ [0x001D00, 0x001DBF],
+ [0x001E95, 0x001E9D],
+ [0x001EFF, 0x001F07],
+ [0x001F10, 0x001F15],
+ [0x001F20, 0x001F27],
+ [0x001F30, 0x001F37],
+ [0x001F40, 0x001F45],
+ [0x001F50, 0x001F57],
+ [0x001F60, 0x001F67],
+ [0x001F70, 0x001F7D],
+ [0x001F80, 0x001F87],
+ [0x001F90, 0x001F97],
+ [0x001FA0, 0x001FA7],
+ [0x001FB0, 0x001FB4],
+ [0x001FB6, 0x001FB7],
+ [0x001FC2, 0x001FC4],
+ [0x001FC6, 0x001FC7],
+ [0x001FD0, 0x001FD3],
+ [0x001FD6, 0x001FD7],
+ [0x001FE0, 0x001FE7],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FF7],
+ [0x002090, 0x00209C],
+ [0x00210E, 0x00210F],
+ [0x00213C, 0x00213D],
+ [0x002146, 0x002149],
+ [0x002170, 0x00217F],
+ [0x0024D0, 0x0024E9],
+ [0x002C30, 0x002C5F],
+ [0x002C65, 0x002C66],
+ [0x002C73, 0x002C74],
+ [0x002C76, 0x002C7D],
+ [0x002CE3, 0x002CE4],
+ [0x002D00, 0x002D25],
+ [0x00A69B, 0x00A69D],
+ [0x00A72F, 0x00A731],
+ [0x00A76F, 0x00A778],
+ [0x00A793, 0x00A795],
+ [0x00A7F2, 0x00A7F4],
+ [0x00A7F8, 0x00A7FA],
+ [0x00AB30, 0x00AB5A],
+ [0x00AB5C, 0x00AB69],
+ [0x00AB70, 0x00ABBF],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FF41, 0x00FF5A],
+ [0x010428, 0x01044F],
+ [0x0104D8, 0x0104FB],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC],
+ [0x010783, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x010CC0, 0x010CF2],
+ [0x0118C0, 0x0118DF],
+ [0x016E60, 0x016E7F],
+ [0x01D41A, 0x01D433],
+ [0x01D44E, 0x01D454],
+ [0x01D456, 0x01D467],
+ [0x01D482, 0x01D49B],
+ [0x01D4B6, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D4CF],
+ [0x01D4EA, 0x01D503],
+ [0x01D51E, 0x01D537],
+ [0x01D552, 0x01D56B],
+ [0x01D586, 0x01D59F],
+ [0x01D5BA, 0x01D5D3],
+ [0x01D5EE, 0x01D607],
+ [0x01D622, 0x01D63B],
+ [0x01D656, 0x01D66F],
+ [0x01D68A, 0x01D6A5],
+ [0x01D6C2, 0x01D6DA],
+ [0x01D6DC, 0x01D6E1],
+ [0x01D6FC, 0x01D714],
+ [0x01D716, 0x01D71B],
+ [0x01D736, 0x01D74E],
+ [0x01D750, 0x01D755],
+ [0x01D770, 0x01D788],
+ [0x01D78A, 0x01D78F],
+ [0x01D7AA, 0x01D7C2],
+ [0x01D7C4, 0x01D7C9],
+ [0x01DF00, 0x01DF09],
+ [0x01DF0B, 0x01DF1E],
+ [0x01DF25, 0x01DF2A],
+ [0x01E030, 0x01E06D],
+ [0x01E922, 0x01E943]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Lowercase}+$/u,
+ matchSymbols,
+ "\\p{Lowercase}"
+);
+testPropertyEscapes(
+ /^\p{Lower}+$/u,
+ matchSymbols,
+ "\\p{Lower}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000F7,
+ 0x000100,
+ 0x000102,
+ 0x000104,
+ 0x000106,
+ 0x000108,
+ 0x00010A,
+ 0x00010C,
+ 0x00010E,
+ 0x000110,
+ 0x000112,
+ 0x000114,
+ 0x000116,
+ 0x000118,
+ 0x00011A,
+ 0x00011C,
+ 0x00011E,
+ 0x000120,
+ 0x000122,
+ 0x000124,
+ 0x000126,
+ 0x000128,
+ 0x00012A,
+ 0x00012C,
+ 0x00012E,
+ 0x000130,
+ 0x000132,
+ 0x000134,
+ 0x000136,
+ 0x000139,
+ 0x00013B,
+ 0x00013D,
+ 0x00013F,
+ 0x000141,
+ 0x000143,
+ 0x000145,
+ 0x000147,
+ 0x00014A,
+ 0x00014C,
+ 0x00014E,
+ 0x000150,
+ 0x000152,
+ 0x000154,
+ 0x000156,
+ 0x000158,
+ 0x00015A,
+ 0x00015C,
+ 0x00015E,
+ 0x000160,
+ 0x000162,
+ 0x000164,
+ 0x000166,
+ 0x000168,
+ 0x00016A,
+ 0x00016C,
+ 0x00016E,
+ 0x000170,
+ 0x000172,
+ 0x000174,
+ 0x000176,
+ 0x00017B,
+ 0x00017D,
+ 0x000184,
+ 0x0001A2,
+ 0x0001A4,
+ 0x0001A9,
+ 0x0001AC,
+ 0x0001B5,
+ 0x0001CD,
+ 0x0001CF,
+ 0x0001D1,
+ 0x0001D3,
+ 0x0001D5,
+ 0x0001D7,
+ 0x0001D9,
+ 0x0001DB,
+ 0x0001DE,
+ 0x0001E0,
+ 0x0001E2,
+ 0x0001E4,
+ 0x0001E6,
+ 0x0001E8,
+ 0x0001EA,
+ 0x0001EC,
+ 0x0001EE,
+ 0x0001F4,
+ 0x0001FA,
+ 0x0001FC,
+ 0x0001FE,
+ 0x000200,
+ 0x000202,
+ 0x000204,
+ 0x000206,
+ 0x000208,
+ 0x00020A,
+ 0x00020C,
+ 0x00020E,
+ 0x000210,
+ 0x000212,
+ 0x000214,
+ 0x000216,
+ 0x000218,
+ 0x00021A,
+ 0x00021C,
+ 0x00021E,
+ 0x000220,
+ 0x000222,
+ 0x000224,
+ 0x000226,
+ 0x000228,
+ 0x00022A,
+ 0x00022C,
+ 0x00022E,
+ 0x000230,
+ 0x000232,
+ 0x000241,
+ 0x000248,
+ 0x00024A,
+ 0x00024C,
+ 0x00024E,
+ 0x000294,
+ 0x000372,
+ 0x0003CF,
+ 0x0003D8,
+ 0x0003DA,
+ 0x0003DC,
+ 0x0003DE,
+ 0x0003E0,
+ 0x0003E2,
+ 0x0003E4,
+ 0x0003E6,
+ 0x0003E8,
+ 0x0003EA,
+ 0x0003EC,
+ 0x0003EE,
+ 0x0003F4,
+ 0x000460,
+ 0x000462,
+ 0x000464,
+ 0x000466,
+ 0x000468,
+ 0x00046A,
+ 0x00046C,
+ 0x00046E,
+ 0x000470,
+ 0x000472,
+ 0x000474,
+ 0x000476,
+ 0x000478,
+ 0x00047A,
+ 0x00047C,
+ 0x00047E,
+ 0x000480,
+ 0x00048C,
+ 0x00048E,
+ 0x000490,
+ 0x000492,
+ 0x000494,
+ 0x000496,
+ 0x000498,
+ 0x00049A,
+ 0x00049C,
+ 0x00049E,
+ 0x0004A0,
+ 0x0004A2,
+ 0x0004A4,
+ 0x0004A6,
+ 0x0004A8,
+ 0x0004AA,
+ 0x0004AC,
+ 0x0004AE,
+ 0x0004B0,
+ 0x0004B2,
+ 0x0004B4,
+ 0x0004B6,
+ 0x0004B8,
+ 0x0004BA,
+ 0x0004BC,
+ 0x0004BE,
+ 0x0004C3,
+ 0x0004C5,
+ 0x0004C7,
+ 0x0004C9,
+ 0x0004CB,
+ 0x0004CD,
+ 0x0004D0,
+ 0x0004D2,
+ 0x0004D4,
+ 0x0004D6,
+ 0x0004D8,
+ 0x0004DA,
+ 0x0004DC,
+ 0x0004DE,
+ 0x0004E0,
+ 0x0004E2,
+ 0x0004E4,
+ 0x0004E6,
+ 0x0004E8,
+ 0x0004EA,
+ 0x0004EC,
+ 0x0004EE,
+ 0x0004F0,
+ 0x0004F2,
+ 0x0004F4,
+ 0x0004F6,
+ 0x0004F8,
+ 0x0004FA,
+ 0x0004FC,
+ 0x0004FE,
+ 0x000500,
+ 0x000502,
+ 0x000504,
+ 0x000506,
+ 0x000508,
+ 0x00050A,
+ 0x00050C,
+ 0x00050E,
+ 0x000510,
+ 0x000512,
+ 0x000514,
+ 0x000516,
+ 0x000518,
+ 0x00051A,
+ 0x00051C,
+ 0x00051E,
+ 0x000520,
+ 0x000522,
+ 0x000524,
+ 0x000526,
+ 0x000528,
+ 0x00052A,
+ 0x00052C,
+ 0x00052E,
+ 0x0010FB,
+ 0x001E02,
+ 0x001E04,
+ 0x001E06,
+ 0x001E08,
+ 0x001E0A,
+ 0x001E0C,
+ 0x001E0E,
+ 0x001E10,
+ 0x001E12,
+ 0x001E14,
+ 0x001E16,
+ 0x001E18,
+ 0x001E1A,
+ 0x001E1C,
+ 0x001E1E,
+ 0x001E20,
+ 0x001E22,
+ 0x001E24,
+ 0x001E26,
+ 0x001E28,
+ 0x001E2A,
+ 0x001E2C,
+ 0x001E2E,
+ 0x001E30,
+ 0x001E32,
+ 0x001E34,
+ 0x001E36,
+ 0x001E38,
+ 0x001E3A,
+ 0x001E3C,
+ 0x001E3E,
+ 0x001E40,
+ 0x001E42,
+ 0x001E44,
+ 0x001E46,
+ 0x001E48,
+ 0x001E4A,
+ 0x001E4C,
+ 0x001E4E,
+ 0x001E50,
+ 0x001E52,
+ 0x001E54,
+ 0x001E56,
+ 0x001E58,
+ 0x001E5A,
+ 0x001E5C,
+ 0x001E5E,
+ 0x001E60,
+ 0x001E62,
+ 0x001E64,
+ 0x001E66,
+ 0x001E68,
+ 0x001E6A,
+ 0x001E6C,
+ 0x001E6E,
+ 0x001E70,
+ 0x001E72,
+ 0x001E74,
+ 0x001E76,
+ 0x001E78,
+ 0x001E7A,
+ 0x001E7C,
+ 0x001E7E,
+ 0x001E80,
+ 0x001E82,
+ 0x001E84,
+ 0x001E86,
+ 0x001E88,
+ 0x001E8A,
+ 0x001E8C,
+ 0x001E8E,
+ 0x001E90,
+ 0x001E92,
+ 0x001E94,
+ 0x001E9E,
+ 0x001EA0,
+ 0x001EA2,
+ 0x001EA4,
+ 0x001EA6,
+ 0x001EA8,
+ 0x001EAA,
+ 0x001EAC,
+ 0x001EAE,
+ 0x001EB0,
+ 0x001EB2,
+ 0x001EB4,
+ 0x001EB6,
+ 0x001EB8,
+ 0x001EBA,
+ 0x001EBC,
+ 0x001EBE,
+ 0x001EC0,
+ 0x001EC2,
+ 0x001EC4,
+ 0x001EC6,
+ 0x001EC8,
+ 0x001ECA,
+ 0x001ECC,
+ 0x001ECE,
+ 0x001ED0,
+ 0x001ED2,
+ 0x001ED4,
+ 0x001ED6,
+ 0x001ED8,
+ 0x001EDA,
+ 0x001EDC,
+ 0x001EDE,
+ 0x001EE0,
+ 0x001EE2,
+ 0x001EE4,
+ 0x001EE6,
+ 0x001EE8,
+ 0x001EEA,
+ 0x001EEC,
+ 0x001EEE,
+ 0x001EF0,
+ 0x001EF2,
+ 0x001EF4,
+ 0x001EF6,
+ 0x001EF8,
+ 0x001EFA,
+ 0x001EFC,
+ 0x001EFE,
+ 0x001FB5,
+ 0x001FC5,
+ 0x001FF5,
+ 0x002C60,
+ 0x002C67,
+ 0x002C69,
+ 0x002C6B,
+ 0x002C72,
+ 0x002C75,
+ 0x002C82,
+ 0x002C84,
+ 0x002C86,
+ 0x002C88,
+ 0x002C8A,
+ 0x002C8C,
+ 0x002C8E,
+ 0x002C90,
+ 0x002C92,
+ 0x002C94,
+ 0x002C96,
+ 0x002C98,
+ 0x002C9A,
+ 0x002C9C,
+ 0x002C9E,
+ 0x002CA0,
+ 0x002CA2,
+ 0x002CA4,
+ 0x002CA6,
+ 0x002CA8,
+ 0x002CAA,
+ 0x002CAC,
+ 0x002CAE,
+ 0x002CB0,
+ 0x002CB2,
+ 0x002CB4,
+ 0x002CB6,
+ 0x002CB8,
+ 0x002CBA,
+ 0x002CBC,
+ 0x002CBE,
+ 0x002CC0,
+ 0x002CC2,
+ 0x002CC4,
+ 0x002CC6,
+ 0x002CC8,
+ 0x002CCA,
+ 0x002CCC,
+ 0x002CCE,
+ 0x002CD0,
+ 0x002CD2,
+ 0x002CD4,
+ 0x002CD6,
+ 0x002CD8,
+ 0x002CDA,
+ 0x002CDC,
+ 0x002CDE,
+ 0x002CE0,
+ 0x002CE2,
+ 0x002CED,
+ 0x002D26,
+ 0x00A642,
+ 0x00A644,
+ 0x00A646,
+ 0x00A648,
+ 0x00A64A,
+ 0x00A64C,
+ 0x00A64E,
+ 0x00A650,
+ 0x00A652,
+ 0x00A654,
+ 0x00A656,
+ 0x00A658,
+ 0x00A65A,
+ 0x00A65C,
+ 0x00A65E,
+ 0x00A660,
+ 0x00A662,
+ 0x00A664,
+ 0x00A666,
+ 0x00A668,
+ 0x00A66A,
+ 0x00A66C,
+ 0x00A682,
+ 0x00A684,
+ 0x00A686,
+ 0x00A688,
+ 0x00A68A,
+ 0x00A68C,
+ 0x00A68E,
+ 0x00A690,
+ 0x00A692,
+ 0x00A694,
+ 0x00A696,
+ 0x00A698,
+ 0x00A69A,
+ 0x00A724,
+ 0x00A726,
+ 0x00A728,
+ 0x00A72A,
+ 0x00A72C,
+ 0x00A72E,
+ 0x00A732,
+ 0x00A734,
+ 0x00A736,
+ 0x00A738,
+ 0x00A73A,
+ 0x00A73C,
+ 0x00A73E,
+ 0x00A740,
+ 0x00A742,
+ 0x00A744,
+ 0x00A746,
+ 0x00A748,
+ 0x00A74A,
+ 0x00A74C,
+ 0x00A74E,
+ 0x00A750,
+ 0x00A752,
+ 0x00A754,
+ 0x00A756,
+ 0x00A758,
+ 0x00A75A,
+ 0x00A75C,
+ 0x00A75E,
+ 0x00A760,
+ 0x00A762,
+ 0x00A764,
+ 0x00A766,
+ 0x00A768,
+ 0x00A76A,
+ 0x00A76C,
+ 0x00A76E,
+ 0x00A779,
+ 0x00A77B,
+ 0x00A780,
+ 0x00A782,
+ 0x00A784,
+ 0x00A786,
+ 0x00A78D,
+ 0x00A792,
+ 0x00A796,
+ 0x00A798,
+ 0x00A79A,
+ 0x00A79C,
+ 0x00A79E,
+ 0x00A7A0,
+ 0x00A7A2,
+ 0x00A7A4,
+ 0x00A7A6,
+ 0x00A7A8,
+ 0x00A7B6,
+ 0x00A7B8,
+ 0x00A7BA,
+ 0x00A7BC,
+ 0x00A7BE,
+ 0x00A7C0,
+ 0x00A7C2,
+ 0x00A7C9,
+ 0x00A7D2,
+ 0x00A7D4,
+ 0x00A7D6,
+ 0x00A7D8,
+ 0x00A7F5,
+ 0x00A7F7,
+ 0x00AB5B,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA,
+ 0x010786,
+ 0x0107B1,
+ 0x01D455,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D6DB,
+ 0x01D715,
+ 0x01D74F,
+ 0x01D789,
+ 0x01D7C3,
+ 0x01D7CA,
+ 0x01DF0A
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000060],
+ [0x00007B, 0x0000A9],
+ [0x0000AB, 0x0000B4],
+ [0x0000B6, 0x0000B9],
+ [0x0000BB, 0x0000DE],
+ [0x000178, 0x000179],
+ [0x000181, 0x000182],
+ [0x000186, 0x000187],
+ [0x000189, 0x00018B],
+ [0x00018E, 0x000191],
+ [0x000193, 0x000194],
+ [0x000196, 0x000198],
+ [0x00019C, 0x00019D],
+ [0x00019F, 0x0001A0],
+ [0x0001A6, 0x0001A7],
+ [0x0001AE, 0x0001AF],
+ [0x0001B1, 0x0001B3],
+ [0x0001B7, 0x0001B8],
+ [0x0001BB, 0x0001BC],
+ [0x0001C0, 0x0001C5],
+ [0x0001C7, 0x0001C8],
+ [0x0001CA, 0x0001CB],
+ [0x0001F1, 0x0001F2],
+ [0x0001F6, 0x0001F8],
+ [0x00023A, 0x00023B],
+ [0x00023D, 0x00023E],
+ [0x000243, 0x000246],
+ [0x0002B9, 0x0002BF],
+ [0x0002C2, 0x0002DF],
+ [0x0002E5, 0x000344],
+ [0x000346, 0x000370],
+ [0x000374, 0x000376],
+ [0x000378, 0x000379],
+ [0x00037E, 0x00038F],
+ [0x000391, 0x0003AB],
+ [0x0003D2, 0x0003D4],
+ [0x0003F6, 0x0003F7],
+ [0x0003F9, 0x0003FA],
+ [0x0003FD, 0x00042F],
+ [0x000482, 0x00048A],
+ [0x0004C0, 0x0004C1],
+ [0x000530, 0x00055F],
+ [0x000589, 0x0010CF],
+ [0x001100, 0x0013F7],
+ [0x0013FE, 0x001C7F],
+ [0x001C89, 0x001CFF],
+ [0x001DC0, 0x001E00],
+ [0x001F08, 0x001F0F],
+ [0x001F16, 0x001F1F],
+ [0x001F28, 0x001F2F],
+ [0x001F38, 0x001F3F],
+ [0x001F46, 0x001F4F],
+ [0x001F58, 0x001F5F],
+ [0x001F68, 0x001F6F],
+ [0x001F7E, 0x001F7F],
+ [0x001F88, 0x001F8F],
+ [0x001F98, 0x001F9F],
+ [0x001FA8, 0x001FAF],
+ [0x001FB8, 0x001FBD],
+ [0x001FBF, 0x001FC1],
+ [0x001FC8, 0x001FCF],
+ [0x001FD4, 0x001FD5],
+ [0x001FD8, 0x001FDF],
+ [0x001FE8, 0x001FF1],
+ [0x001FF8, 0x002070],
+ [0x002072, 0x00207E],
+ [0x002080, 0x00208F],
+ [0x00209D, 0x002109],
+ [0x00210B, 0x00210D],
+ [0x002110, 0x002112],
+ [0x002114, 0x00212E],
+ [0x002130, 0x002133],
+ [0x002135, 0x002138],
+ [0x00213A, 0x00213B],
+ [0x00213E, 0x002145],
+ [0x00214A, 0x00214D],
+ [0x00214F, 0x00216F],
+ [0x002180, 0x002183],
+ [0x002185, 0x0024CF],
+ [0x0024EA, 0x002C2F],
+ [0x002C62, 0x002C64],
+ [0x002C6D, 0x002C70],
+ [0x002C7E, 0x002C80],
+ [0x002CE5, 0x002CEB],
+ [0x002CEF, 0x002CF2],
+ [0x002CF4, 0x002CFF],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x00A640],
+ [0x00A66E, 0x00A680],
+ [0x00A69E, 0x00A722],
+ [0x00A77D, 0x00A77E],
+ [0x00A788, 0x00A78B],
+ [0x00A78F, 0x00A790],
+ [0x00A7AA, 0x00A7AE],
+ [0x00A7B0, 0x00A7B4],
+ [0x00A7C4, 0x00A7C7],
+ [0x00A7CB, 0x00A7D0],
+ [0x00A7DA, 0x00A7F1],
+ [0x00A7FB, 0x00AB2F],
+ [0x00AB6A, 0x00AB6F],
+ [0x00ABC0, 0x00DBFF],
+ [0x00E000, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FF40],
+ [0x00FF5B, 0x010427],
+ [0x010450, 0x0104D7],
+ [0x0104FC, 0x010596],
+ [0x0105BD, 0x01077F],
+ [0x010781, 0x010782],
+ [0x0107BB, 0x010CBF],
+ [0x010CF3, 0x0118BF],
+ [0x0118E0, 0x016E5F],
+ [0x016E80, 0x01D419],
+ [0x01D434, 0x01D44D],
+ [0x01D468, 0x01D481],
+ [0x01D49C, 0x01D4B5],
+ [0x01D4D0, 0x01D4E9],
+ [0x01D504, 0x01D51D],
+ [0x01D538, 0x01D551],
+ [0x01D56C, 0x01D585],
+ [0x01D5A0, 0x01D5B9],
+ [0x01D5D4, 0x01D5ED],
+ [0x01D608, 0x01D621],
+ [0x01D63C, 0x01D655],
+ [0x01D670, 0x01D689],
+ [0x01D6A6, 0x01D6C1],
+ [0x01D6E2, 0x01D6FB],
+ [0x01D71C, 0x01D735],
+ [0x01D756, 0x01D76F],
+ [0x01D790, 0x01D7A9],
+ [0x01D7CC, 0x01DEFF],
+ [0x01DF1F, 0x01DF24],
+ [0x01DF2B, 0x01E02F],
+ [0x01E06E, 0x01E921],
+ [0x01E944, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Lowercase}+$/u,
+ nonMatchSymbols,
+ "\\P{Lowercase}"
+);
+testPropertyEscapes(
+ /^\P{Lower}+$/u,
+ nonMatchSymbols,
+ "\\P{Lower}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Math.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Math.js
new file mode 100644
index 0000000000..a18b4d06dd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Math.js
@@ -0,0 +1,319 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Math`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00002B,
+ 0x00005E,
+ 0x00007C,
+ 0x00007E,
+ 0x0000AC,
+ 0x0000B1,
+ 0x0000D7,
+ 0x0000F7,
+ 0x0003D5,
+ 0x002016,
+ 0x002040,
+ 0x002044,
+ 0x002052,
+ 0x0020E1,
+ 0x002102,
+ 0x002107,
+ 0x002115,
+ 0x002124,
+ 0x00214B,
+ 0x0021DD,
+ 0x00237C,
+ 0x0023B7,
+ 0x0023D0,
+ 0x0025E2,
+ 0x0025E4,
+ 0x002640,
+ 0x002642,
+ 0x00FB29,
+ 0x00FE68,
+ 0x00FF0B,
+ 0x00FF3C,
+ 0x00FF3E,
+ 0x00FF5C,
+ 0x00FF5E,
+ 0x00FFE2,
+ 0x01D4A2,
+ 0x01D4BB,
+ 0x01D546,
+ 0x01EE24,
+ 0x01EE27,
+ 0x01EE39,
+ 0x01EE3B,
+ 0x01EE42,
+ 0x01EE47,
+ 0x01EE49,
+ 0x01EE4B,
+ 0x01EE54,
+ 0x01EE57,
+ 0x01EE59,
+ 0x01EE5B,
+ 0x01EE5D,
+ 0x01EE5F,
+ 0x01EE64,
+ 0x01EE7E
+ ],
+ ranges: [
+ [0x00003C, 0x00003E],
+ [0x0003D0, 0x0003D2],
+ [0x0003F0, 0x0003F1],
+ [0x0003F4, 0x0003F6],
+ [0x000606, 0x000608],
+ [0x002032, 0x002034],
+ [0x002061, 0x002064],
+ [0x00207A, 0x00207E],
+ [0x00208A, 0x00208E],
+ [0x0020D0, 0x0020DC],
+ [0x0020E5, 0x0020E6],
+ [0x0020EB, 0x0020EF],
+ [0x00210A, 0x002113],
+ [0x002118, 0x00211D],
+ [0x002128, 0x002129],
+ [0x00212C, 0x00212D],
+ [0x00212F, 0x002131],
+ [0x002133, 0x002138],
+ [0x00213C, 0x002149],
+ [0x002190, 0x0021A7],
+ [0x0021A9, 0x0021AE],
+ [0x0021B0, 0x0021B1],
+ [0x0021B6, 0x0021B7],
+ [0x0021BC, 0x0021DB],
+ [0x0021E4, 0x0021E5],
+ [0x0021F4, 0x0022FF],
+ [0x002308, 0x00230B],
+ [0x002320, 0x002321],
+ [0x00239B, 0x0023B5],
+ [0x0023DC, 0x0023E2],
+ [0x0025A0, 0x0025A1],
+ [0x0025AE, 0x0025B7],
+ [0x0025BC, 0x0025C1],
+ [0x0025C6, 0x0025C7],
+ [0x0025CA, 0x0025CB],
+ [0x0025CF, 0x0025D3],
+ [0x0025E7, 0x0025EC],
+ [0x0025F8, 0x0025FF],
+ [0x002605, 0x002606],
+ [0x002660, 0x002663],
+ [0x00266D, 0x00266F],
+ [0x0027C0, 0x0027FF],
+ [0x002900, 0x002AFF],
+ [0x002B30, 0x002B44],
+ [0x002B47, 0x002B4C],
+ [0x00FE61, 0x00FE66],
+ [0x00FF1C, 0x00FF1E],
+ [0x00FFE9, 0x00FFEC],
+ [0x01D400, 0x01D454],
+ [0x01D456, 0x01D49C],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D51E, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D552, 0x01D6A5],
+ [0x01D6A8, 0x01D7CB],
+ [0x01D7CE, 0x01D7FF],
+ [0x01EE00, 0x01EE03],
+ [0x01EE05, 0x01EE1F],
+ [0x01EE21, 0x01EE22],
+ [0x01EE29, 0x01EE32],
+ [0x01EE34, 0x01EE37],
+ [0x01EE4D, 0x01EE4F],
+ [0x01EE51, 0x01EE52],
+ [0x01EE61, 0x01EE62],
+ [0x01EE67, 0x01EE6A],
+ [0x01EE6C, 0x01EE72],
+ [0x01EE74, 0x01EE77],
+ [0x01EE79, 0x01EE7C],
+ [0x01EE80, 0x01EE89],
+ [0x01EE8B, 0x01EE9B],
+ [0x01EEA1, 0x01EEA3],
+ [0x01EEA5, 0x01EEA9],
+ [0x01EEAB, 0x01EEBB],
+ [0x01EEF0, 0x01EEF1]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Math}+$/u,
+ matchSymbols,
+ "\\p{Math}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00007D,
+ 0x002114,
+ 0x00212E,
+ 0x002132,
+ 0x00214A,
+ 0x0021A8,
+ 0x0021AF,
+ 0x0021DC,
+ 0x0023B6,
+ 0x0025E3,
+ 0x002641,
+ 0x00FE67,
+ 0x00FF3D,
+ 0x00FF5D,
+ 0x01D455,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D506,
+ 0x01D515,
+ 0x01D51D,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545,
+ 0x01D551,
+ 0x01EE04,
+ 0x01EE20,
+ 0x01EE23,
+ 0x01EE28,
+ 0x01EE33,
+ 0x01EE38,
+ 0x01EE3A,
+ 0x01EE48,
+ 0x01EE4A,
+ 0x01EE4C,
+ 0x01EE50,
+ 0x01EE53,
+ 0x01EE58,
+ 0x01EE5A,
+ 0x01EE5C,
+ 0x01EE5E,
+ 0x01EE60,
+ 0x01EE63,
+ 0x01EE6B,
+ 0x01EE73,
+ 0x01EE78,
+ 0x01EE7D,
+ 0x01EE7F,
+ 0x01EE8A,
+ 0x01EEA4,
+ 0x01EEAA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00002A],
+ [0x00002C, 0x00003B],
+ [0x00003F, 0x00005D],
+ [0x00005F, 0x00007B],
+ [0x00007F, 0x0000AB],
+ [0x0000AD, 0x0000B0],
+ [0x0000B2, 0x0000D6],
+ [0x0000D8, 0x0000F6],
+ [0x0000F8, 0x0003CF],
+ [0x0003D3, 0x0003D4],
+ [0x0003D6, 0x0003EF],
+ [0x0003F2, 0x0003F3],
+ [0x0003F7, 0x000605],
+ [0x000609, 0x002015],
+ [0x002017, 0x002031],
+ [0x002035, 0x00203F],
+ [0x002041, 0x002043],
+ [0x002045, 0x002051],
+ [0x002053, 0x002060],
+ [0x002065, 0x002079],
+ [0x00207F, 0x002089],
+ [0x00208F, 0x0020CF],
+ [0x0020DD, 0x0020E0],
+ [0x0020E2, 0x0020E4],
+ [0x0020E7, 0x0020EA],
+ [0x0020F0, 0x002101],
+ [0x002103, 0x002106],
+ [0x002108, 0x002109],
+ [0x002116, 0x002117],
+ [0x00211E, 0x002123],
+ [0x002125, 0x002127],
+ [0x00212A, 0x00212B],
+ [0x002139, 0x00213B],
+ [0x00214C, 0x00218F],
+ [0x0021B2, 0x0021B5],
+ [0x0021B8, 0x0021BB],
+ [0x0021DE, 0x0021E3],
+ [0x0021E6, 0x0021F3],
+ [0x002300, 0x002307],
+ [0x00230C, 0x00231F],
+ [0x002322, 0x00237B],
+ [0x00237D, 0x00239A],
+ [0x0023B8, 0x0023CF],
+ [0x0023D1, 0x0023DB],
+ [0x0023E3, 0x00259F],
+ [0x0025A2, 0x0025AD],
+ [0x0025B8, 0x0025BB],
+ [0x0025C2, 0x0025C5],
+ [0x0025C8, 0x0025C9],
+ [0x0025CC, 0x0025CE],
+ [0x0025D4, 0x0025E1],
+ [0x0025E5, 0x0025E6],
+ [0x0025ED, 0x0025F7],
+ [0x002600, 0x002604],
+ [0x002607, 0x00263F],
+ [0x002643, 0x00265F],
+ [0x002664, 0x00266C],
+ [0x002670, 0x0027BF],
+ [0x002800, 0x0028FF],
+ [0x002B00, 0x002B2F],
+ [0x002B45, 0x002B46],
+ [0x002B4D, 0x00DBFF],
+ [0x00E000, 0x00FB28],
+ [0x00FB2A, 0x00FE60],
+ [0x00FE69, 0x00FF0A],
+ [0x00FF0C, 0x00FF1B],
+ [0x00FF1F, 0x00FF3B],
+ [0x00FF3F, 0x00FF5B],
+ [0x00FF5F, 0x00FFE1],
+ [0x00FFE3, 0x00FFE8],
+ [0x00FFED, 0x01D3FF],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D50B, 0x01D50C],
+ [0x01D547, 0x01D549],
+ [0x01D6A6, 0x01D6A7],
+ [0x01D7CC, 0x01D7CD],
+ [0x01D800, 0x01EDFF],
+ [0x01EE25, 0x01EE26],
+ [0x01EE3C, 0x01EE41],
+ [0x01EE43, 0x01EE46],
+ [0x01EE55, 0x01EE56],
+ [0x01EE65, 0x01EE66],
+ [0x01EE9C, 0x01EEA0],
+ [0x01EEBC, 0x01EEEF],
+ [0x01EEF2, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Math}+$/u,
+ nonMatchSymbols,
+ "\\P{Math}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Noncharacter_Code_Point.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Noncharacter_Code_Point.js
new file mode 100644
index 0000000000..ccab9ec2b4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Noncharacter_Code_Point.js
@@ -0,0 +1,86 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Noncharacter_Code_Point`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00FDD0, 0x00FDEF],
+ [0x00FFFE, 0x00FFFF],
+ [0x01FFFE, 0x01FFFF],
+ [0x02FFFE, 0x02FFFF],
+ [0x03FFFE, 0x03FFFF],
+ [0x04FFFE, 0x04FFFF],
+ [0x05FFFE, 0x05FFFF],
+ [0x06FFFE, 0x06FFFF],
+ [0x07FFFE, 0x07FFFF],
+ [0x08FFFE, 0x08FFFF],
+ [0x09FFFE, 0x09FFFF],
+ [0x0AFFFE, 0x0AFFFF],
+ [0x0BFFFE, 0x0BFFFF],
+ [0x0CFFFE, 0x0CFFFF],
+ [0x0DFFFE, 0x0DFFFF],
+ [0x0EFFFE, 0x0EFFFF],
+ [0x0FFFFE, 0x0FFFFF],
+ [0x10FFFE, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Noncharacter_Code_Point}+$/u,
+ matchSymbols,
+ "\\p{Noncharacter_Code_Point}"
+);
+testPropertyEscapes(
+ /^\p{NChar}+$/u,
+ matchSymbols,
+ "\\p{NChar}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x00FDCF],
+ [0x00FDF0, 0x00FFFD],
+ [0x010000, 0x01FFFD],
+ [0x020000, 0x02FFFD],
+ [0x030000, 0x03FFFD],
+ [0x040000, 0x04FFFD],
+ [0x050000, 0x05FFFD],
+ [0x060000, 0x06FFFD],
+ [0x070000, 0x07FFFD],
+ [0x080000, 0x08FFFD],
+ [0x090000, 0x09FFFD],
+ [0x0A0000, 0x0AFFFD],
+ [0x0B0000, 0x0BFFFD],
+ [0x0C0000, 0x0CFFFD],
+ [0x0D0000, 0x0DFFFD],
+ [0x0E0000, 0x0EFFFD],
+ [0x0F0000, 0x0FFFFD],
+ [0x100000, 0x10FFFD]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Noncharacter_Code_Point}+$/u,
+ nonMatchSymbols,
+ "\\P{Noncharacter_Code_Point}"
+);
+testPropertyEscapes(
+ /^\P{NChar}+$/u,
+ nonMatchSymbols,
+ "\\P{NChar}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Pattern_Syntax.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Pattern_Syntax.js
new file mode 100644
index 0000000000..6fd908921a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Pattern_Syntax.js
@@ -0,0 +1,109 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Pattern_Syntax`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000060,
+ 0x0000A9,
+ 0x0000AE,
+ 0x0000B6,
+ 0x0000BB,
+ 0x0000BF,
+ 0x0000D7,
+ 0x0000F7,
+ 0x003030
+ ],
+ ranges: [
+ [0x000021, 0x00002F],
+ [0x00003A, 0x000040],
+ [0x00005B, 0x00005E],
+ [0x00007B, 0x00007E],
+ [0x0000A1, 0x0000A7],
+ [0x0000AB, 0x0000AC],
+ [0x0000B0, 0x0000B1],
+ [0x002010, 0x002027],
+ [0x002030, 0x00203E],
+ [0x002041, 0x002053],
+ [0x002055, 0x00205E],
+ [0x002190, 0x00245F],
+ [0x002500, 0x002775],
+ [0x002794, 0x002BFF],
+ [0x002E00, 0x002E7F],
+ [0x003001, 0x003003],
+ [0x003008, 0x003020],
+ [0x00FD3E, 0x00FD3F],
+ [0x00FE45, 0x00FE46]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Pattern_Syntax}+$/u,
+ matchSymbols,
+ "\\p{Pattern_Syntax}"
+);
+testPropertyEscapes(
+ /^\p{Pat_Syn}+$/u,
+ matchSymbols,
+ "\\p{Pat_Syn}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00005F,
+ 0x0000A8,
+ 0x0000AA,
+ 0x0000AD,
+ 0x0000AF,
+ 0x002054
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000020],
+ [0x000030, 0x000039],
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ [0x00007F, 0x0000A0],
+ [0x0000B2, 0x0000B5],
+ [0x0000B7, 0x0000BA],
+ [0x0000BC, 0x0000BE],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000F6],
+ [0x0000F8, 0x00200F],
+ [0x002028, 0x00202F],
+ [0x00203F, 0x002040],
+ [0x00205F, 0x00218F],
+ [0x002460, 0x0024FF],
+ [0x002776, 0x002793],
+ [0x002C00, 0x002DFF],
+ [0x002E80, 0x003000],
+ [0x003004, 0x003007],
+ [0x003021, 0x00302F],
+ [0x003031, 0x00DBFF],
+ [0x00E000, 0x00FD3D],
+ [0x00FD40, 0x00FE44],
+ [0x00FE47, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Pattern_Syntax}+$/u,
+ nonMatchSymbols,
+ "\\P{Pattern_Syntax}"
+);
+testPropertyEscapes(
+ /^\P{Pat_Syn}+$/u,
+ nonMatchSymbols,
+ "\\P{Pat_Syn}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Pattern_White_Space.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Pattern_White_Space.js
new file mode 100644
index 0000000000..7bbf688b1e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Pattern_White_Space.js
@@ -0,0 +1,62 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Pattern_White_Space`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000020,
+ 0x000085
+ ],
+ ranges: [
+ [0x000009, 0x00000D],
+ [0x00200E, 0x00200F],
+ [0x002028, 0x002029]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Pattern_White_Space}+$/u,
+ matchSymbols,
+ "\\p{Pattern_White_Space}"
+);
+testPropertyEscapes(
+ /^\p{Pat_WS}+$/u,
+ matchSymbols,
+ "\\p{Pat_WS}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000008],
+ [0x00000E, 0x00001F],
+ [0x000021, 0x000084],
+ [0x000086, 0x00200D],
+ [0x002010, 0x002027],
+ [0x00202A, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Pattern_White_Space}+$/u,
+ nonMatchSymbols,
+ "\\P{Pattern_White_Space}"
+);
+testPropertyEscapes(
+ /^\P{Pat_WS}+$/u,
+ nonMatchSymbols,
+ "\\P{Pat_WS}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Quotation_Mark.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Quotation_Mark.js
new file mode 100644
index 0000000000..bf9e0c957e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Quotation_Mark.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Quotation_Mark`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000022,
+ 0x000027,
+ 0x0000AB,
+ 0x0000BB,
+ 0x002E42,
+ 0x00FF02,
+ 0x00FF07
+ ],
+ ranges: [
+ [0x002018, 0x00201F],
+ [0x002039, 0x00203A],
+ [0x00300C, 0x00300F],
+ [0x00301D, 0x00301F],
+ [0x00FE41, 0x00FE44],
+ [0x00FF62, 0x00FF63]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Quotation_Mark}+$/u,
+ matchSymbols,
+ "\\p{Quotation_Mark}"
+);
+testPropertyEscapes(
+ /^\p{QMark}+$/u,
+ matchSymbols,
+ "\\p{QMark}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000021],
+ [0x000023, 0x000026],
+ [0x000028, 0x0000AA],
+ [0x0000AC, 0x0000BA],
+ [0x0000BC, 0x002017],
+ [0x002020, 0x002038],
+ [0x00203B, 0x002E41],
+ [0x002E43, 0x00300B],
+ [0x003010, 0x00301C],
+ [0x003020, 0x00DBFF],
+ [0x00E000, 0x00FE40],
+ [0x00FE45, 0x00FF01],
+ [0x00FF03, 0x00FF06],
+ [0x00FF08, 0x00FF61],
+ [0x00FF64, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Quotation_Mark}+$/u,
+ nonMatchSymbols,
+ "\\P{Quotation_Mark}"
+);
+testPropertyEscapes(
+ /^\P{QMark}+$/u,
+ nonMatchSymbols,
+ "\\P{QMark}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Radical.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Radical.js
new file mode 100644
index 0000000000..62ca4c5fbc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Radical.js
@@ -0,0 +1,48 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Radical`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x002E80, 0x002E99],
+ [0x002E9B, 0x002EF3],
+ [0x002F00, 0x002FD5]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Radical}+$/u,
+ matchSymbols,
+ "\\p{Radical}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x002E9A
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x002E7F],
+ [0x002EF4, 0x002EFF],
+ [0x002FD6, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Radical}+$/u,
+ nonMatchSymbols,
+ "\\P{Radical}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Regional_Indicator.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Regional_Indicator.js
new file mode 100644
index 0000000000..6b9c0de042
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Regional_Indicator.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Regional_Indicator`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x01F1E6, 0x01F1FF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Regional_Indicator}+$/u,
+ matchSymbols,
+ "\\p{Regional_Indicator}"
+);
+testPropertyEscapes(
+ /^\p{RI}+$/u,
+ matchSymbols,
+ "\\p{RI}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01F1E5],
+ [0x01F200, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Regional_Indicator}+$/u,
+ nonMatchSymbols,
+ "\\P{Regional_Indicator}"
+);
+testPropertyEscapes(
+ /^\P{RI}+$/u,
+ nonMatchSymbols,
+ "\\P{RI}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Adlam.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Adlam.js
new file mode 100644
index 0000000000..a5dc5c9a61
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Adlam.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Adlam`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x01E900, 0x01E94B],
+ [0x01E950, 0x01E959],
+ [0x01E95E, 0x01E95F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Adlam}+$/u,
+ matchSymbols,
+ "\\p{Script=Adlam}"
+);
+testPropertyEscapes(
+ /^\p{Script=Adlm}+$/u,
+ matchSymbols,
+ "\\p{Script=Adlm}"
+);
+testPropertyEscapes(
+ /^\p{sc=Adlam}+$/u,
+ matchSymbols,
+ "\\p{sc=Adlam}"
+);
+testPropertyEscapes(
+ /^\p{sc=Adlm}+$/u,
+ matchSymbols,
+ "\\p{sc=Adlm}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01E8FF],
+ [0x01E94C, 0x01E94F],
+ [0x01E95A, 0x01E95D],
+ [0x01E960, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Adlam}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Adlam}"
+);
+testPropertyEscapes(
+ /^\P{Script=Adlm}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Adlm}"
+);
+testPropertyEscapes(
+ /^\P{sc=Adlam}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Adlam}"
+);
+testPropertyEscapes(
+ /^\P{sc=Adlm}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Adlm}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ahom.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ahom.js
new file mode 100644
index 0000000000..6e7ca9ff4b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ahom.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Ahom`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011700, 0x01171A],
+ [0x01171D, 0x01172B],
+ [0x011730, 0x011746]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Ahom}+$/u,
+ matchSymbols,
+ "\\p{Script=Ahom}"
+);
+testPropertyEscapes(
+ /^\p{Script=Ahom}+$/u,
+ matchSymbols,
+ "\\p{Script=Ahom}"
+);
+testPropertyEscapes(
+ /^\p{sc=Ahom}+$/u,
+ matchSymbols,
+ "\\p{sc=Ahom}"
+);
+testPropertyEscapes(
+ /^\p{sc=Ahom}+$/u,
+ matchSymbols,
+ "\\p{sc=Ahom}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0116FF],
+ [0x01171B, 0x01171C],
+ [0x01172C, 0x01172F],
+ [0x011747, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Ahom}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Ahom}"
+);
+testPropertyEscapes(
+ /^\P{Script=Ahom}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Ahom}"
+);
+testPropertyEscapes(
+ /^\P{sc=Ahom}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Ahom}"
+);
+testPropertyEscapes(
+ /^\P{sc=Ahom}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Ahom}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Anatolian_Hieroglyphs.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Anatolian_Hieroglyphs.js
new file mode 100644
index 0000000000..65ed44e3ea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Anatolian_Hieroglyphs.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Anatolian_Hieroglyphs`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x014400, 0x014646]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Anatolian_Hieroglyphs}+$/u,
+ matchSymbols,
+ "\\p{Script=Anatolian_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\p{Script=Hluw}+$/u,
+ matchSymbols,
+ "\\p{Script=Hluw}"
+);
+testPropertyEscapes(
+ /^\p{sc=Anatolian_Hieroglyphs}+$/u,
+ matchSymbols,
+ "\\p{sc=Anatolian_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\p{sc=Hluw}+$/u,
+ matchSymbols,
+ "\\p{sc=Hluw}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0143FF],
+ [0x014647, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Anatolian_Hieroglyphs}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Anatolian_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\P{Script=Hluw}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Hluw}"
+);
+testPropertyEscapes(
+ /^\P{sc=Anatolian_Hieroglyphs}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Anatolian_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\P{sc=Hluw}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Hluw}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Arabic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Arabic.js
new file mode 100644
index 0000000000..1596f0933a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Arabic.js
@@ -0,0 +1,189 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Arabic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00FDCF,
+ 0x01EE24,
+ 0x01EE27,
+ 0x01EE39,
+ 0x01EE3B,
+ 0x01EE42,
+ 0x01EE47,
+ 0x01EE49,
+ 0x01EE4B,
+ 0x01EE54,
+ 0x01EE57,
+ 0x01EE59,
+ 0x01EE5B,
+ 0x01EE5D,
+ 0x01EE5F,
+ 0x01EE64,
+ 0x01EE7E
+ ],
+ ranges: [
+ [0x000600, 0x000604],
+ [0x000606, 0x00060B],
+ [0x00060D, 0x00061A],
+ [0x00061C, 0x00061E],
+ [0x000620, 0x00063F],
+ [0x000641, 0x00064A],
+ [0x000656, 0x00066F],
+ [0x000671, 0x0006DC],
+ [0x0006DE, 0x0006FF],
+ [0x000750, 0x00077F],
+ [0x000870, 0x00088E],
+ [0x000890, 0x000891],
+ [0x000898, 0x0008E1],
+ [0x0008E3, 0x0008FF],
+ [0x00FB50, 0x00FBC2],
+ [0x00FBD3, 0x00FD3D],
+ [0x00FD40, 0x00FD8F],
+ [0x00FD92, 0x00FDC7],
+ [0x00FDF0, 0x00FDFF],
+ [0x00FE70, 0x00FE74],
+ [0x00FE76, 0x00FEFC],
+ [0x010E60, 0x010E7E],
+ [0x010EFD, 0x010EFF],
+ [0x01EE00, 0x01EE03],
+ [0x01EE05, 0x01EE1F],
+ [0x01EE21, 0x01EE22],
+ [0x01EE29, 0x01EE32],
+ [0x01EE34, 0x01EE37],
+ [0x01EE4D, 0x01EE4F],
+ [0x01EE51, 0x01EE52],
+ [0x01EE61, 0x01EE62],
+ [0x01EE67, 0x01EE6A],
+ [0x01EE6C, 0x01EE72],
+ [0x01EE74, 0x01EE77],
+ [0x01EE79, 0x01EE7C],
+ [0x01EE80, 0x01EE89],
+ [0x01EE8B, 0x01EE9B],
+ [0x01EEA1, 0x01EEA3],
+ [0x01EEA5, 0x01EEA9],
+ [0x01EEAB, 0x01EEBB],
+ [0x01EEF0, 0x01EEF1]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Arabic}+$/u,
+ matchSymbols,
+ "\\p{Script=Arabic}"
+);
+testPropertyEscapes(
+ /^\p{Script=Arab}+$/u,
+ matchSymbols,
+ "\\p{Script=Arab}"
+);
+testPropertyEscapes(
+ /^\p{sc=Arabic}+$/u,
+ matchSymbols,
+ "\\p{sc=Arabic}"
+);
+testPropertyEscapes(
+ /^\p{sc=Arab}+$/u,
+ matchSymbols,
+ "\\p{sc=Arab}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000605,
+ 0x00060C,
+ 0x00061B,
+ 0x00061F,
+ 0x000640,
+ 0x000670,
+ 0x0006DD,
+ 0x00088F,
+ 0x0008E2,
+ 0x00FE75,
+ 0x01EE04,
+ 0x01EE20,
+ 0x01EE23,
+ 0x01EE28,
+ 0x01EE33,
+ 0x01EE38,
+ 0x01EE3A,
+ 0x01EE48,
+ 0x01EE4A,
+ 0x01EE4C,
+ 0x01EE50,
+ 0x01EE53,
+ 0x01EE58,
+ 0x01EE5A,
+ 0x01EE5C,
+ 0x01EE5E,
+ 0x01EE60,
+ 0x01EE63,
+ 0x01EE6B,
+ 0x01EE73,
+ 0x01EE78,
+ 0x01EE7D,
+ 0x01EE7F,
+ 0x01EE8A,
+ 0x01EEA4,
+ 0x01EEAA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0005FF],
+ [0x00064B, 0x000655],
+ [0x000700, 0x00074F],
+ [0x000780, 0x00086F],
+ [0x000892, 0x000897],
+ [0x000900, 0x00DBFF],
+ [0x00E000, 0x00FB4F],
+ [0x00FBC3, 0x00FBD2],
+ [0x00FD3E, 0x00FD3F],
+ [0x00FD90, 0x00FD91],
+ [0x00FDC8, 0x00FDCE],
+ [0x00FDD0, 0x00FDEF],
+ [0x00FE00, 0x00FE6F],
+ [0x00FEFD, 0x010E5F],
+ [0x010E7F, 0x010EFC],
+ [0x010F00, 0x01EDFF],
+ [0x01EE25, 0x01EE26],
+ [0x01EE3C, 0x01EE41],
+ [0x01EE43, 0x01EE46],
+ [0x01EE55, 0x01EE56],
+ [0x01EE65, 0x01EE66],
+ [0x01EE9C, 0x01EEA0],
+ [0x01EEBC, 0x01EEEF],
+ [0x01EEF2, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Arabic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Arabic}"
+);
+testPropertyEscapes(
+ /^\P{Script=Arab}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Arab}"
+);
+testPropertyEscapes(
+ /^\P{sc=Arabic}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Arabic}"
+);
+testPropertyEscapes(
+ /^\P{sc=Arab}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Arab}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Armenian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Armenian.js
new file mode 100644
index 0000000000..a900fbc828
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Armenian.js
@@ -0,0 +1,79 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Armenian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000531, 0x000556],
+ [0x000559, 0x00058A],
+ [0x00058D, 0x00058F],
+ [0x00FB13, 0x00FB17]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Armenian}+$/u,
+ matchSymbols,
+ "\\p{Script=Armenian}"
+);
+testPropertyEscapes(
+ /^\p{Script=Armn}+$/u,
+ matchSymbols,
+ "\\p{Script=Armn}"
+);
+testPropertyEscapes(
+ /^\p{sc=Armenian}+$/u,
+ matchSymbols,
+ "\\p{sc=Armenian}"
+);
+testPropertyEscapes(
+ /^\p{sc=Armn}+$/u,
+ matchSymbols,
+ "\\p{sc=Armn}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000530],
+ [0x000557, 0x000558],
+ [0x00058B, 0x00058C],
+ [0x000590, 0x00DBFF],
+ [0x00E000, 0x00FB12],
+ [0x00FB18, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Armenian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Armenian}"
+);
+testPropertyEscapes(
+ /^\P{Script=Armn}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Armn}"
+);
+testPropertyEscapes(
+ /^\P{sc=Armenian}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Armenian}"
+);
+testPropertyEscapes(
+ /^\P{sc=Armn}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Armn}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Avestan.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Avestan.js
new file mode 100644
index 0000000000..0498938a87
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Avestan.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Avestan`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010B00, 0x010B35],
+ [0x010B39, 0x010B3F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Avestan}+$/u,
+ matchSymbols,
+ "\\p{Script=Avestan}"
+);
+testPropertyEscapes(
+ /^\p{Script=Avst}+$/u,
+ matchSymbols,
+ "\\p{Script=Avst}"
+);
+testPropertyEscapes(
+ /^\p{sc=Avestan}+$/u,
+ matchSymbols,
+ "\\p{sc=Avestan}"
+);
+testPropertyEscapes(
+ /^\p{sc=Avst}+$/u,
+ matchSymbols,
+ "\\p{sc=Avst}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010AFF],
+ [0x010B36, 0x010B38],
+ [0x010B40, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Avestan}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Avestan}"
+);
+testPropertyEscapes(
+ /^\P{Script=Avst}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Avst}"
+);
+testPropertyEscapes(
+ /^\P{sc=Avestan}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Avestan}"
+);
+testPropertyEscapes(
+ /^\P{sc=Avst}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Avst}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Balinese.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Balinese.js
new file mode 100644
index 0000000000..7262a48c09
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Balinese.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Balinese`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001B00, 0x001B4C],
+ [0x001B50, 0x001B7E]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Balinese}+$/u,
+ matchSymbols,
+ "\\p{Script=Balinese}"
+);
+testPropertyEscapes(
+ /^\p{Script=Bali}+$/u,
+ matchSymbols,
+ "\\p{Script=Bali}"
+);
+testPropertyEscapes(
+ /^\p{sc=Balinese}+$/u,
+ matchSymbols,
+ "\\p{sc=Balinese}"
+);
+testPropertyEscapes(
+ /^\p{sc=Bali}+$/u,
+ matchSymbols,
+ "\\p{sc=Bali}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x001AFF],
+ [0x001B4D, 0x001B4F],
+ [0x001B7F, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Balinese}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Balinese}"
+);
+testPropertyEscapes(
+ /^\P{Script=Bali}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Bali}"
+);
+testPropertyEscapes(
+ /^\P{sc=Balinese}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Balinese}"
+);
+testPropertyEscapes(
+ /^\P{sc=Bali}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Bali}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bamum.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bamum.js
new file mode 100644
index 0000000000..0f1140a727
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bamum.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Bamum`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00A6A0, 0x00A6F7],
+ [0x016800, 0x016A38]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Bamum}+$/u,
+ matchSymbols,
+ "\\p{Script=Bamum}"
+);
+testPropertyEscapes(
+ /^\p{Script=Bamu}+$/u,
+ matchSymbols,
+ "\\p{Script=Bamu}"
+);
+testPropertyEscapes(
+ /^\p{sc=Bamum}+$/u,
+ matchSymbols,
+ "\\p{sc=Bamum}"
+);
+testPropertyEscapes(
+ /^\p{sc=Bamu}+$/u,
+ matchSymbols,
+ "\\p{sc=Bamu}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A69F],
+ [0x00A6F8, 0x00DBFF],
+ [0x00E000, 0x0167FF],
+ [0x016A39, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Bamum}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Bamum}"
+);
+testPropertyEscapes(
+ /^\P{Script=Bamu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Bamu}"
+);
+testPropertyEscapes(
+ /^\P{sc=Bamum}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Bamum}"
+);
+testPropertyEscapes(
+ /^\P{sc=Bamu}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Bamu}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bassa_Vah.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bassa_Vah.js
new file mode 100644
index 0000000000..e82715a77d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bassa_Vah.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Bassa_Vah`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x016AD0, 0x016AED],
+ [0x016AF0, 0x016AF5]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Bassa_Vah}+$/u,
+ matchSymbols,
+ "\\p{Script=Bassa_Vah}"
+);
+testPropertyEscapes(
+ /^\p{Script=Bass}+$/u,
+ matchSymbols,
+ "\\p{Script=Bass}"
+);
+testPropertyEscapes(
+ /^\p{sc=Bassa_Vah}+$/u,
+ matchSymbols,
+ "\\p{sc=Bassa_Vah}"
+);
+testPropertyEscapes(
+ /^\p{sc=Bass}+$/u,
+ matchSymbols,
+ "\\p{sc=Bass}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016ACF],
+ [0x016AEE, 0x016AEF],
+ [0x016AF6, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Bassa_Vah}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Bassa_Vah}"
+);
+testPropertyEscapes(
+ /^\P{Script=Bass}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Bass}"
+);
+testPropertyEscapes(
+ /^\P{sc=Bassa_Vah}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Bassa_Vah}"
+);
+testPropertyEscapes(
+ /^\P{sc=Bass}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Bass}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Batak.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Batak.js
new file mode 100644
index 0000000000..923df55ef1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Batak.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Batak`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001BC0, 0x001BF3],
+ [0x001BFC, 0x001BFF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Batak}+$/u,
+ matchSymbols,
+ "\\p{Script=Batak}"
+);
+testPropertyEscapes(
+ /^\p{Script=Batk}+$/u,
+ matchSymbols,
+ "\\p{Script=Batk}"
+);
+testPropertyEscapes(
+ /^\p{sc=Batak}+$/u,
+ matchSymbols,
+ "\\p{sc=Batak}"
+);
+testPropertyEscapes(
+ /^\p{sc=Batk}+$/u,
+ matchSymbols,
+ "\\p{sc=Batk}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x001BBF],
+ [0x001BF4, 0x001BFB],
+ [0x001C00, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Batak}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Batak}"
+);
+testPropertyEscapes(
+ /^\P{Script=Batk}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Batk}"
+);
+testPropertyEscapes(
+ /^\P{sc=Batak}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Batak}"
+);
+testPropertyEscapes(
+ /^\P{sc=Batk}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Batk}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bengali.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bengali.js
new file mode 100644
index 0000000000..5317969eeb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bengali.js
@@ -0,0 +1,101 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Bengali`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0009B2,
+ 0x0009D7
+ ],
+ ranges: [
+ [0x000980, 0x000983],
+ [0x000985, 0x00098C],
+ [0x00098F, 0x000990],
+ [0x000993, 0x0009A8],
+ [0x0009AA, 0x0009B0],
+ [0x0009B6, 0x0009B9],
+ [0x0009BC, 0x0009C4],
+ [0x0009C7, 0x0009C8],
+ [0x0009CB, 0x0009CE],
+ [0x0009DC, 0x0009DD],
+ [0x0009DF, 0x0009E3],
+ [0x0009E6, 0x0009FE]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Bengali}+$/u,
+ matchSymbols,
+ "\\p{Script=Bengali}"
+);
+testPropertyEscapes(
+ /^\p{Script=Beng}+$/u,
+ matchSymbols,
+ "\\p{Script=Beng}"
+);
+testPropertyEscapes(
+ /^\p{sc=Bengali}+$/u,
+ matchSymbols,
+ "\\p{sc=Bengali}"
+);
+testPropertyEscapes(
+ /^\p{sc=Beng}+$/u,
+ matchSymbols,
+ "\\p{sc=Beng}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000984,
+ 0x0009A9,
+ 0x0009B1,
+ 0x0009DE
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00097F],
+ [0x00098D, 0x00098E],
+ [0x000991, 0x000992],
+ [0x0009B3, 0x0009B5],
+ [0x0009BA, 0x0009BB],
+ [0x0009C5, 0x0009C6],
+ [0x0009C9, 0x0009CA],
+ [0x0009CF, 0x0009D6],
+ [0x0009D8, 0x0009DB],
+ [0x0009E4, 0x0009E5],
+ [0x0009FF, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Bengali}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Bengali}"
+);
+testPropertyEscapes(
+ /^\P{Script=Beng}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Beng}"
+);
+testPropertyEscapes(
+ /^\P{sc=Bengali}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Bengali}"
+);
+testPropertyEscapes(
+ /^\P{sc=Beng}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Beng}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bhaiksuki.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bhaiksuki.js
new file mode 100644
index 0000000000..ee2d09ecf8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bhaiksuki.js
@@ -0,0 +1,80 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Bhaiksuki`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011C00, 0x011C08],
+ [0x011C0A, 0x011C36],
+ [0x011C38, 0x011C45],
+ [0x011C50, 0x011C6C]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Bhaiksuki}+$/u,
+ matchSymbols,
+ "\\p{Script=Bhaiksuki}"
+);
+testPropertyEscapes(
+ /^\p{Script=Bhks}+$/u,
+ matchSymbols,
+ "\\p{Script=Bhks}"
+);
+testPropertyEscapes(
+ /^\p{sc=Bhaiksuki}+$/u,
+ matchSymbols,
+ "\\p{sc=Bhaiksuki}"
+);
+testPropertyEscapes(
+ /^\p{sc=Bhks}+$/u,
+ matchSymbols,
+ "\\p{sc=Bhks}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011C09,
+ 0x011C37
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x011BFF],
+ [0x011C46, 0x011C4F],
+ [0x011C6D, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Bhaiksuki}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Bhaiksuki}"
+);
+testPropertyEscapes(
+ /^\P{Script=Bhks}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Bhks}"
+);
+testPropertyEscapes(
+ /^\P{sc=Bhaiksuki}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Bhaiksuki}"
+);
+testPropertyEscapes(
+ /^\P{sc=Bhks}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Bhks}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bopomofo.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bopomofo.js
new file mode 100644
index 0000000000..420a80c75c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Bopomofo.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Bopomofo`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0002EA, 0x0002EB],
+ [0x003105, 0x00312F],
+ [0x0031A0, 0x0031BF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Bopomofo}+$/u,
+ matchSymbols,
+ "\\p{Script=Bopomofo}"
+);
+testPropertyEscapes(
+ /^\p{Script=Bopo}+$/u,
+ matchSymbols,
+ "\\p{Script=Bopo}"
+);
+testPropertyEscapes(
+ /^\p{sc=Bopomofo}+$/u,
+ matchSymbols,
+ "\\p{sc=Bopomofo}"
+);
+testPropertyEscapes(
+ /^\p{sc=Bopo}+$/u,
+ matchSymbols,
+ "\\p{sc=Bopo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0002E9],
+ [0x0002EC, 0x003104],
+ [0x003130, 0x00319F],
+ [0x0031C0, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Bopomofo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Bopomofo}"
+);
+testPropertyEscapes(
+ /^\P{Script=Bopo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Bopo}"
+);
+testPropertyEscapes(
+ /^\P{sc=Bopomofo}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Bopomofo}"
+);
+testPropertyEscapes(
+ /^\P{sc=Bopo}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Bopo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Brahmi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Brahmi.js
new file mode 100644
index 0000000000..2eaa5dd301
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Brahmi.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Brahmi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x01107F
+ ],
+ ranges: [
+ [0x011000, 0x01104D],
+ [0x011052, 0x011075]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Brahmi}+$/u,
+ matchSymbols,
+ "\\p{Script=Brahmi}"
+);
+testPropertyEscapes(
+ /^\p{Script=Brah}+$/u,
+ matchSymbols,
+ "\\p{Script=Brah}"
+);
+testPropertyEscapes(
+ /^\p{sc=Brahmi}+$/u,
+ matchSymbols,
+ "\\p{sc=Brahmi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Brah}+$/u,
+ matchSymbols,
+ "\\p{sc=Brah}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010FFF],
+ [0x01104E, 0x011051],
+ [0x011076, 0x01107E],
+ [0x011080, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Brahmi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Brahmi}"
+);
+testPropertyEscapes(
+ /^\P{Script=Brah}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Brah}"
+);
+testPropertyEscapes(
+ /^\P{sc=Brahmi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Brahmi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Brah}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Brah}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Braille.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Braille.js
new file mode 100644
index 0000000000..de6d47fec9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Braille.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Braille`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x002800, 0x0028FF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Braille}+$/u,
+ matchSymbols,
+ "\\p{Script=Braille}"
+);
+testPropertyEscapes(
+ /^\p{Script=Brai}+$/u,
+ matchSymbols,
+ "\\p{Script=Brai}"
+);
+testPropertyEscapes(
+ /^\p{sc=Braille}+$/u,
+ matchSymbols,
+ "\\p{sc=Braille}"
+);
+testPropertyEscapes(
+ /^\p{sc=Brai}+$/u,
+ matchSymbols,
+ "\\p{sc=Brai}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0027FF],
+ [0x002900, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Braille}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Braille}"
+);
+testPropertyEscapes(
+ /^\P{Script=Brai}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Brai}"
+);
+testPropertyEscapes(
+ /^\P{sc=Braille}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Braille}"
+);
+testPropertyEscapes(
+ /^\P{sc=Brai}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Brai}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Buginese.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Buginese.js
new file mode 100644
index 0000000000..98b8611db9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Buginese.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Buginese`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001A00, 0x001A1B],
+ [0x001A1E, 0x001A1F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Buginese}+$/u,
+ matchSymbols,
+ "\\p{Script=Buginese}"
+);
+testPropertyEscapes(
+ /^\p{Script=Bugi}+$/u,
+ matchSymbols,
+ "\\p{Script=Bugi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Buginese}+$/u,
+ matchSymbols,
+ "\\p{sc=Buginese}"
+);
+testPropertyEscapes(
+ /^\p{sc=Bugi}+$/u,
+ matchSymbols,
+ "\\p{sc=Bugi}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0019FF],
+ [0x001A1C, 0x001A1D],
+ [0x001A20, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Buginese}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Buginese}"
+);
+testPropertyEscapes(
+ /^\P{Script=Bugi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Bugi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Buginese}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Buginese}"
+);
+testPropertyEscapes(
+ /^\P{sc=Bugi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Bugi}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Buhid.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Buhid.js
new file mode 100644
index 0000000000..5a566140b0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Buhid.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Buhid`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001740, 0x001753]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Buhid}+$/u,
+ matchSymbols,
+ "\\p{Script=Buhid}"
+);
+testPropertyEscapes(
+ /^\p{Script=Buhd}+$/u,
+ matchSymbols,
+ "\\p{Script=Buhd}"
+);
+testPropertyEscapes(
+ /^\p{sc=Buhid}+$/u,
+ matchSymbols,
+ "\\p{sc=Buhid}"
+);
+testPropertyEscapes(
+ /^\p{sc=Buhd}+$/u,
+ matchSymbols,
+ "\\p{sc=Buhd}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00173F],
+ [0x001754, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Buhid}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Buhid}"
+);
+testPropertyEscapes(
+ /^\P{Script=Buhd}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Buhd}"
+);
+testPropertyEscapes(
+ /^\P{sc=Buhid}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Buhid}"
+);
+testPropertyEscapes(
+ /^\P{sc=Buhd}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Buhd}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Canadian_Aboriginal.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Canadian_Aboriginal.js
new file mode 100644
index 0000000000..79a000f85b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Canadian_Aboriginal.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Canadian_Aboriginal`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001400, 0x00167F],
+ [0x0018B0, 0x0018F5],
+ [0x011AB0, 0x011ABF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Canadian_Aboriginal}+$/u,
+ matchSymbols,
+ "\\p{Script=Canadian_Aboriginal}"
+);
+testPropertyEscapes(
+ /^\p{Script=Cans}+$/u,
+ matchSymbols,
+ "\\p{Script=Cans}"
+);
+testPropertyEscapes(
+ /^\p{sc=Canadian_Aboriginal}+$/u,
+ matchSymbols,
+ "\\p{sc=Canadian_Aboriginal}"
+);
+testPropertyEscapes(
+ /^\p{sc=Cans}+$/u,
+ matchSymbols,
+ "\\p{sc=Cans}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0013FF],
+ [0x001680, 0x0018AF],
+ [0x0018F6, 0x00DBFF],
+ [0x00E000, 0x011AAF],
+ [0x011AC0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Canadian_Aboriginal}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Canadian_Aboriginal}"
+);
+testPropertyEscapes(
+ /^\P{Script=Cans}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Cans}"
+);
+testPropertyEscapes(
+ /^\P{sc=Canadian_Aboriginal}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Canadian_Aboriginal}"
+);
+testPropertyEscapes(
+ /^\P{sc=Cans}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Cans}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Carian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Carian.js
new file mode 100644
index 0000000000..2e9500c55d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Carian.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Carian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0102A0, 0x0102D0]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Carian}+$/u,
+ matchSymbols,
+ "\\p{Script=Carian}"
+);
+testPropertyEscapes(
+ /^\p{Script=Cari}+$/u,
+ matchSymbols,
+ "\\p{Script=Cari}"
+);
+testPropertyEscapes(
+ /^\p{sc=Carian}+$/u,
+ matchSymbols,
+ "\\p{sc=Carian}"
+);
+testPropertyEscapes(
+ /^\p{sc=Cari}+$/u,
+ matchSymbols,
+ "\\p{sc=Cari}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01029F],
+ [0x0102D1, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Carian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Carian}"
+);
+testPropertyEscapes(
+ /^\P{Script=Cari}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Cari}"
+);
+testPropertyEscapes(
+ /^\P{sc=Carian}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Carian}"
+);
+testPropertyEscapes(
+ /^\P{sc=Cari}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Cari}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Caucasian_Albanian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Caucasian_Albanian.js
new file mode 100644
index 0000000000..eab4b264f9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Caucasian_Albanian.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Caucasian_Albanian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x01056F
+ ],
+ ranges: [
+ [0x010530, 0x010563]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Caucasian_Albanian}+$/u,
+ matchSymbols,
+ "\\p{Script=Caucasian_Albanian}"
+);
+testPropertyEscapes(
+ /^\p{Script=Aghb}+$/u,
+ matchSymbols,
+ "\\p{Script=Aghb}"
+);
+testPropertyEscapes(
+ /^\p{sc=Caucasian_Albanian}+$/u,
+ matchSymbols,
+ "\\p{sc=Caucasian_Albanian}"
+);
+testPropertyEscapes(
+ /^\p{sc=Aghb}+$/u,
+ matchSymbols,
+ "\\p{sc=Aghb}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01052F],
+ [0x010564, 0x01056E],
+ [0x010570, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Caucasian_Albanian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Caucasian_Albanian}"
+);
+testPropertyEscapes(
+ /^\P{Script=Aghb}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Aghb}"
+);
+testPropertyEscapes(
+ /^\P{sc=Caucasian_Albanian}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Caucasian_Albanian}"
+);
+testPropertyEscapes(
+ /^\P{sc=Aghb}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Aghb}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Chakma.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Chakma.js
new file mode 100644
index 0000000000..373f225531
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Chakma.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Chakma`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011100, 0x011134],
+ [0x011136, 0x011147]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Chakma}+$/u,
+ matchSymbols,
+ "\\p{Script=Chakma}"
+);
+testPropertyEscapes(
+ /^\p{Script=Cakm}+$/u,
+ matchSymbols,
+ "\\p{Script=Cakm}"
+);
+testPropertyEscapes(
+ /^\p{sc=Chakma}+$/u,
+ matchSymbols,
+ "\\p{sc=Chakma}"
+);
+testPropertyEscapes(
+ /^\p{sc=Cakm}+$/u,
+ matchSymbols,
+ "\\p{sc=Cakm}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011135
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0110FF],
+ [0x011148, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Chakma}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Chakma}"
+);
+testPropertyEscapes(
+ /^\P{Script=Cakm}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Cakm}"
+);
+testPropertyEscapes(
+ /^\P{sc=Chakma}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Chakma}"
+);
+testPropertyEscapes(
+ /^\P{sc=Cakm}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Cakm}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cham.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cham.js
new file mode 100644
index 0000000000..50cd26e777
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cham.js
@@ -0,0 +1,79 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Cham`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00AA00, 0x00AA36],
+ [0x00AA40, 0x00AA4D],
+ [0x00AA50, 0x00AA59],
+ [0x00AA5C, 0x00AA5F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Cham}+$/u,
+ matchSymbols,
+ "\\p{Script=Cham}"
+);
+testPropertyEscapes(
+ /^\p{Script=Cham}+$/u,
+ matchSymbols,
+ "\\p{Script=Cham}"
+);
+testPropertyEscapes(
+ /^\p{sc=Cham}+$/u,
+ matchSymbols,
+ "\\p{sc=Cham}"
+);
+testPropertyEscapes(
+ /^\p{sc=Cham}+$/u,
+ matchSymbols,
+ "\\p{sc=Cham}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A9FF],
+ [0x00AA37, 0x00AA3F],
+ [0x00AA4E, 0x00AA4F],
+ [0x00AA5A, 0x00AA5B],
+ [0x00AA60, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Cham}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Cham}"
+);
+testPropertyEscapes(
+ /^\P{Script=Cham}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Cham}"
+);
+testPropertyEscapes(
+ /^\P{sc=Cham}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Cham}"
+);
+testPropertyEscapes(
+ /^\P{sc=Cham}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Cham}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cherokee.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cherokee.js
new file mode 100644
index 0000000000..ced62328be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cherokee.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Cherokee`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0013A0, 0x0013F5],
+ [0x0013F8, 0x0013FD],
+ [0x00AB70, 0x00ABBF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Cherokee}+$/u,
+ matchSymbols,
+ "\\p{Script=Cherokee}"
+);
+testPropertyEscapes(
+ /^\p{Script=Cher}+$/u,
+ matchSymbols,
+ "\\p{Script=Cher}"
+);
+testPropertyEscapes(
+ /^\p{sc=Cherokee}+$/u,
+ matchSymbols,
+ "\\p{sc=Cherokee}"
+);
+testPropertyEscapes(
+ /^\p{sc=Cher}+$/u,
+ matchSymbols,
+ "\\p{sc=Cher}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00139F],
+ [0x0013F6, 0x0013F7],
+ [0x0013FE, 0x00AB6F],
+ [0x00ABC0, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Cherokee}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Cherokee}"
+);
+testPropertyEscapes(
+ /^\P{Script=Cher}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Cher}"
+);
+testPropertyEscapes(
+ /^\P{sc=Cherokee}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Cherokee}"
+);
+testPropertyEscapes(
+ /^\P{sc=Cher}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Cher}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Chorasmian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Chorasmian.js
new file mode 100644
index 0000000000..50b78d15f0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Chorasmian.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Chorasmian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010FB0, 0x010FCB]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Chorasmian}+$/u,
+ matchSymbols,
+ "\\p{Script=Chorasmian}"
+);
+testPropertyEscapes(
+ /^\p{Script=Chrs}+$/u,
+ matchSymbols,
+ "\\p{Script=Chrs}"
+);
+testPropertyEscapes(
+ /^\p{sc=Chorasmian}+$/u,
+ matchSymbols,
+ "\\p{sc=Chorasmian}"
+);
+testPropertyEscapes(
+ /^\p{sc=Chrs}+$/u,
+ matchSymbols,
+ "\\p{sc=Chrs}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010FAF],
+ [0x010FCC, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Chorasmian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Chorasmian}"
+);
+testPropertyEscapes(
+ /^\P{Script=Chrs}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Chrs}"
+);
+testPropertyEscapes(
+ /^\P{sc=Chorasmian}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Chorasmian}"
+);
+testPropertyEscapes(
+ /^\P{sc=Chrs}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Chrs}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Common.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Common.js
new file mode 100644
index 0000000000..de47aa2374
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Common.js
@@ -0,0 +1,418 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Common`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000D7,
+ 0x0000F7,
+ 0x000374,
+ 0x00037E,
+ 0x000385,
+ 0x000387,
+ 0x000605,
+ 0x00060C,
+ 0x00061B,
+ 0x00061F,
+ 0x000640,
+ 0x0006DD,
+ 0x0008E2,
+ 0x000E3F,
+ 0x0010FB,
+ 0x001805,
+ 0x001CD3,
+ 0x001CE1,
+ 0x001CFA,
+ 0x003006,
+ 0x0030A0,
+ 0x0032FF,
+ 0x00A92E,
+ 0x00A9CF,
+ 0x00AB5B,
+ 0x00FEFF,
+ 0x00FF70,
+ 0x01D4A2,
+ 0x01D4BB,
+ 0x01D546,
+ 0x01F7F0,
+ 0x0E0001
+ ],
+ ranges: [
+ [0x000000, 0x000040],
+ [0x00005B, 0x000060],
+ [0x00007B, 0x0000A9],
+ [0x0000AB, 0x0000B9],
+ [0x0000BB, 0x0000BF],
+ [0x0002B9, 0x0002DF],
+ [0x0002E5, 0x0002E9],
+ [0x0002EC, 0x0002FF],
+ [0x000964, 0x000965],
+ [0x000FD5, 0x000FD8],
+ [0x0016EB, 0x0016ED],
+ [0x001735, 0x001736],
+ [0x001802, 0x001803],
+ [0x001CE9, 0x001CEC],
+ [0x001CEE, 0x001CF3],
+ [0x001CF5, 0x001CF7],
+ [0x002000, 0x00200B],
+ [0x00200E, 0x002064],
+ [0x002066, 0x002070],
+ [0x002074, 0x00207E],
+ [0x002080, 0x00208E],
+ [0x0020A0, 0x0020C0],
+ [0x002100, 0x002125],
+ [0x002127, 0x002129],
+ [0x00212C, 0x002131],
+ [0x002133, 0x00214D],
+ [0x00214F, 0x00215F],
+ [0x002189, 0x00218B],
+ [0x002190, 0x002426],
+ [0x002440, 0x00244A],
+ [0x002460, 0x0027FF],
+ [0x002900, 0x002B73],
+ [0x002B76, 0x002B95],
+ [0x002B97, 0x002BFF],
+ [0x002E00, 0x002E5D],
+ [0x002FF0, 0x002FFB],
+ [0x003000, 0x003004],
+ [0x003008, 0x003020],
+ [0x003030, 0x003037],
+ [0x00303C, 0x00303F],
+ [0x00309B, 0x00309C],
+ [0x0030FB, 0x0030FC],
+ [0x003190, 0x00319F],
+ [0x0031C0, 0x0031E3],
+ [0x003220, 0x00325F],
+ [0x00327F, 0x0032CF],
+ [0x003358, 0x0033FF],
+ [0x004DC0, 0x004DFF],
+ [0x00A700, 0x00A721],
+ [0x00A788, 0x00A78A],
+ [0x00A830, 0x00A839],
+ [0x00AB6A, 0x00AB6B],
+ [0x00FD3E, 0x00FD3F],
+ [0x00FE10, 0x00FE19],
+ [0x00FE30, 0x00FE52],
+ [0x00FE54, 0x00FE66],
+ [0x00FE68, 0x00FE6B],
+ [0x00FF01, 0x00FF20],
+ [0x00FF3B, 0x00FF40],
+ [0x00FF5B, 0x00FF65],
+ [0x00FF9E, 0x00FF9F],
+ [0x00FFE0, 0x00FFE6],
+ [0x00FFE8, 0x00FFEE],
+ [0x00FFF9, 0x00FFFD],
+ [0x010100, 0x010102],
+ [0x010107, 0x010133],
+ [0x010137, 0x01013F],
+ [0x010190, 0x01019C],
+ [0x0101D0, 0x0101FC],
+ [0x0102E1, 0x0102FB],
+ [0x01BCA0, 0x01BCA3],
+ [0x01CF50, 0x01CFC3],
+ [0x01D000, 0x01D0F5],
+ [0x01D100, 0x01D126],
+ [0x01D129, 0x01D166],
+ [0x01D16A, 0x01D17A],
+ [0x01D183, 0x01D184],
+ [0x01D18C, 0x01D1A9],
+ [0x01D1AE, 0x01D1EA],
+ [0x01D2C0, 0x01D2D3],
+ [0x01D2E0, 0x01D2F3],
+ [0x01D300, 0x01D356],
+ [0x01D360, 0x01D378],
+ [0x01D400, 0x01D454],
+ [0x01D456, 0x01D49C],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D51E, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D552, 0x01D6A5],
+ [0x01D6A8, 0x01D7CB],
+ [0x01D7CE, 0x01D7FF],
+ [0x01EC71, 0x01ECB4],
+ [0x01ED01, 0x01ED3D],
+ [0x01F000, 0x01F02B],
+ [0x01F030, 0x01F093],
+ [0x01F0A0, 0x01F0AE],
+ [0x01F0B1, 0x01F0BF],
+ [0x01F0C1, 0x01F0CF],
+ [0x01F0D1, 0x01F0F5],
+ [0x01F100, 0x01F1AD],
+ [0x01F1E6, 0x01F1FF],
+ [0x01F201, 0x01F202],
+ [0x01F210, 0x01F23B],
+ [0x01F240, 0x01F248],
+ [0x01F250, 0x01F251],
+ [0x01F260, 0x01F265],
+ [0x01F300, 0x01F6D7],
+ [0x01F6DC, 0x01F6EC],
+ [0x01F6F0, 0x01F6FC],
+ [0x01F700, 0x01F776],
+ [0x01F77B, 0x01F7D9],
+ [0x01F7E0, 0x01F7EB],
+ [0x01F800, 0x01F80B],
+ [0x01F810, 0x01F847],
+ [0x01F850, 0x01F859],
+ [0x01F860, 0x01F887],
+ [0x01F890, 0x01F8AD],
+ [0x01F8B0, 0x01F8B1],
+ [0x01F900, 0x01FA53],
+ [0x01FA60, 0x01FA6D],
+ [0x01FA70, 0x01FA7C],
+ [0x01FA80, 0x01FA88],
+ [0x01FA90, 0x01FABD],
+ [0x01FABF, 0x01FAC5],
+ [0x01FACE, 0x01FADB],
+ [0x01FAE0, 0x01FAE8],
+ [0x01FAF0, 0x01FAF8],
+ [0x01FB00, 0x01FB92],
+ [0x01FB94, 0x01FBCA],
+ [0x01FBF0, 0x01FBF9],
+ [0x0E0020, 0x0E007F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Common}+$/u,
+ matchSymbols,
+ "\\p{Script=Common}"
+);
+testPropertyEscapes(
+ /^\p{Script=Zyyy}+$/u,
+ matchSymbols,
+ "\\p{Script=Zyyy}"
+);
+testPropertyEscapes(
+ /^\p{sc=Common}+$/u,
+ matchSymbols,
+ "\\p{sc=Common}"
+);
+testPropertyEscapes(
+ /^\p{sc=Zyyy}+$/u,
+ matchSymbols,
+ "\\p{sc=Zyyy}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000AA,
+ 0x0000BA,
+ 0x000386,
+ 0x001804,
+ 0x001CED,
+ 0x001CF4,
+ 0x002065,
+ 0x00207F,
+ 0x002126,
+ 0x002132,
+ 0x00214E,
+ 0x002B96,
+ 0x003005,
+ 0x003007,
+ 0x00FE53,
+ 0x00FE67,
+ 0x00FF00,
+ 0x00FFE7,
+ 0x01D455,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D506,
+ 0x01D515,
+ 0x01D51D,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545,
+ 0x01D551,
+ 0x01F0C0,
+ 0x01F0D0,
+ 0x01F200,
+ 0x01FABE,
+ 0x01FB93
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000F6],
+ [0x0000F8, 0x0002B8],
+ [0x0002E0, 0x0002E4],
+ [0x0002EA, 0x0002EB],
+ [0x000300, 0x000373],
+ [0x000375, 0x00037D],
+ [0x00037F, 0x000384],
+ [0x000388, 0x000604],
+ [0x000606, 0x00060B],
+ [0x00060D, 0x00061A],
+ [0x00061C, 0x00061E],
+ [0x000620, 0x00063F],
+ [0x000641, 0x0006DC],
+ [0x0006DE, 0x0008E1],
+ [0x0008E3, 0x000963],
+ [0x000966, 0x000E3E],
+ [0x000E40, 0x000FD4],
+ [0x000FD9, 0x0010FA],
+ [0x0010FC, 0x0016EA],
+ [0x0016EE, 0x001734],
+ [0x001737, 0x001801],
+ [0x001806, 0x001CD2],
+ [0x001CD4, 0x001CE0],
+ [0x001CE2, 0x001CE8],
+ [0x001CF8, 0x001CF9],
+ [0x001CFB, 0x001FFF],
+ [0x00200C, 0x00200D],
+ [0x002071, 0x002073],
+ [0x00208F, 0x00209F],
+ [0x0020C1, 0x0020FF],
+ [0x00212A, 0x00212B],
+ [0x002160, 0x002188],
+ [0x00218C, 0x00218F],
+ [0x002427, 0x00243F],
+ [0x00244B, 0x00245F],
+ [0x002800, 0x0028FF],
+ [0x002B74, 0x002B75],
+ [0x002C00, 0x002DFF],
+ [0x002E5E, 0x002FEF],
+ [0x002FFC, 0x002FFF],
+ [0x003021, 0x00302F],
+ [0x003038, 0x00303B],
+ [0x003040, 0x00309A],
+ [0x00309D, 0x00309F],
+ [0x0030A1, 0x0030FA],
+ [0x0030FD, 0x00318F],
+ [0x0031A0, 0x0031BF],
+ [0x0031E4, 0x00321F],
+ [0x003260, 0x00327E],
+ [0x0032D0, 0x0032FE],
+ [0x003300, 0x003357],
+ [0x003400, 0x004DBF],
+ [0x004E00, 0x00A6FF],
+ [0x00A722, 0x00A787],
+ [0x00A78B, 0x00A82F],
+ [0x00A83A, 0x00A92D],
+ [0x00A92F, 0x00A9CE],
+ [0x00A9D0, 0x00AB5A],
+ [0x00AB5C, 0x00AB69],
+ [0x00AB6C, 0x00DBFF],
+ [0x00E000, 0x00FD3D],
+ [0x00FD40, 0x00FE0F],
+ [0x00FE1A, 0x00FE2F],
+ [0x00FE6C, 0x00FEFE],
+ [0x00FF21, 0x00FF3A],
+ [0x00FF41, 0x00FF5A],
+ [0x00FF66, 0x00FF6F],
+ [0x00FF71, 0x00FF9D],
+ [0x00FFA0, 0x00FFDF],
+ [0x00FFEF, 0x00FFF8],
+ [0x00FFFE, 0x0100FF],
+ [0x010103, 0x010106],
+ [0x010134, 0x010136],
+ [0x010140, 0x01018F],
+ [0x01019D, 0x0101CF],
+ [0x0101FD, 0x0102E0],
+ [0x0102FC, 0x01BC9F],
+ [0x01BCA4, 0x01CF4F],
+ [0x01CFC4, 0x01CFFF],
+ [0x01D0F6, 0x01D0FF],
+ [0x01D127, 0x01D128],
+ [0x01D167, 0x01D169],
+ [0x01D17B, 0x01D182],
+ [0x01D185, 0x01D18B],
+ [0x01D1AA, 0x01D1AD],
+ [0x01D1EB, 0x01D2BF],
+ [0x01D2D4, 0x01D2DF],
+ [0x01D2F4, 0x01D2FF],
+ [0x01D357, 0x01D35F],
+ [0x01D379, 0x01D3FF],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D50B, 0x01D50C],
+ [0x01D547, 0x01D549],
+ [0x01D6A6, 0x01D6A7],
+ [0x01D7CC, 0x01D7CD],
+ [0x01D800, 0x01EC70],
+ [0x01ECB5, 0x01ED00],
+ [0x01ED3E, 0x01EFFF],
+ [0x01F02C, 0x01F02F],
+ [0x01F094, 0x01F09F],
+ [0x01F0AF, 0x01F0B0],
+ [0x01F0F6, 0x01F0FF],
+ [0x01F1AE, 0x01F1E5],
+ [0x01F203, 0x01F20F],
+ [0x01F23C, 0x01F23F],
+ [0x01F249, 0x01F24F],
+ [0x01F252, 0x01F25F],
+ [0x01F266, 0x01F2FF],
+ [0x01F6D8, 0x01F6DB],
+ [0x01F6ED, 0x01F6EF],
+ [0x01F6FD, 0x01F6FF],
+ [0x01F777, 0x01F77A],
+ [0x01F7DA, 0x01F7DF],
+ [0x01F7EC, 0x01F7EF],
+ [0x01F7F1, 0x01F7FF],
+ [0x01F80C, 0x01F80F],
+ [0x01F848, 0x01F84F],
+ [0x01F85A, 0x01F85F],
+ [0x01F888, 0x01F88F],
+ [0x01F8AE, 0x01F8AF],
+ [0x01F8B2, 0x01F8FF],
+ [0x01FA54, 0x01FA5F],
+ [0x01FA6E, 0x01FA6F],
+ [0x01FA7D, 0x01FA7F],
+ [0x01FA89, 0x01FA8F],
+ [0x01FAC6, 0x01FACD],
+ [0x01FADC, 0x01FADF],
+ [0x01FAE9, 0x01FAEF],
+ [0x01FAF9, 0x01FAFF],
+ [0x01FBCB, 0x01FBEF],
+ [0x01FBFA, 0x0E0000],
+ [0x0E0002, 0x0E001F],
+ [0x0E0080, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Common}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Common}"
+);
+testPropertyEscapes(
+ /^\P{Script=Zyyy}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Zyyy}"
+);
+testPropertyEscapes(
+ /^\P{sc=Common}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Common}"
+);
+testPropertyEscapes(
+ /^\P{sc=Zyyy}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Zyyy}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Coptic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Coptic.js
new file mode 100644
index 0000000000..999cc08d2f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Coptic.js
@@ -0,0 +1,97 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Coptic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0003E2, 0x0003EF],
+ [0x002C80, 0x002CF3],
+ [0x002CF9, 0x002CFF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Coptic}+$/u,
+ matchSymbols,
+ "\\p{Script=Coptic}"
+);
+testPropertyEscapes(
+ /^\p{Script=Copt}+$/u,
+ matchSymbols,
+ "\\p{Script=Copt}"
+);
+testPropertyEscapes(
+ /^\p{Script=Qaac}+$/u,
+ matchSymbols,
+ "\\p{Script=Qaac}"
+);
+testPropertyEscapes(
+ /^\p{sc=Coptic}+$/u,
+ matchSymbols,
+ "\\p{sc=Coptic}"
+);
+testPropertyEscapes(
+ /^\p{sc=Copt}+$/u,
+ matchSymbols,
+ "\\p{sc=Copt}"
+);
+testPropertyEscapes(
+ /^\p{sc=Qaac}+$/u,
+ matchSymbols,
+ "\\p{sc=Qaac}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0003E1],
+ [0x0003F0, 0x002C7F],
+ [0x002CF4, 0x002CF8],
+ [0x002D00, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Coptic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Coptic}"
+);
+testPropertyEscapes(
+ /^\P{Script=Copt}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Copt}"
+);
+testPropertyEscapes(
+ /^\P{Script=Qaac}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Qaac}"
+);
+testPropertyEscapes(
+ /^\P{sc=Coptic}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Coptic}"
+);
+testPropertyEscapes(
+ /^\P{sc=Copt}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Copt}"
+);
+testPropertyEscapes(
+ /^\P{sc=Qaac}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Qaac}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cuneiform.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cuneiform.js
new file mode 100644
index 0000000000..9d93e62965
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cuneiform.js
@@ -0,0 +1,80 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Cuneiform`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x012000, 0x012399],
+ [0x012400, 0x01246E],
+ [0x012470, 0x012474],
+ [0x012480, 0x012543]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Cuneiform}+$/u,
+ matchSymbols,
+ "\\p{Script=Cuneiform}"
+);
+testPropertyEscapes(
+ /^\p{Script=Xsux}+$/u,
+ matchSymbols,
+ "\\p{Script=Xsux}"
+);
+testPropertyEscapes(
+ /^\p{sc=Cuneiform}+$/u,
+ matchSymbols,
+ "\\p{sc=Cuneiform}"
+);
+testPropertyEscapes(
+ /^\p{sc=Xsux}+$/u,
+ matchSymbols,
+ "\\p{sc=Xsux}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x01246F
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x011FFF],
+ [0x01239A, 0x0123FF],
+ [0x012475, 0x01247F],
+ [0x012544, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Cuneiform}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Cuneiform}"
+);
+testPropertyEscapes(
+ /^\P{Script=Xsux}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Xsux}"
+);
+testPropertyEscapes(
+ /^\P{sc=Cuneiform}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Cuneiform}"
+);
+testPropertyEscapes(
+ /^\P{sc=Xsux}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Xsux}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cypriot.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cypriot.js
new file mode 100644
index 0000000000..a5bcd6cba3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cypriot.js
@@ -0,0 +1,85 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Cypriot`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x010808,
+ 0x01083C,
+ 0x01083F
+ ],
+ ranges: [
+ [0x010800, 0x010805],
+ [0x01080A, 0x010835],
+ [0x010837, 0x010838]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Cypriot}+$/u,
+ matchSymbols,
+ "\\p{Script=Cypriot}"
+);
+testPropertyEscapes(
+ /^\p{Script=Cprt}+$/u,
+ matchSymbols,
+ "\\p{Script=Cprt}"
+);
+testPropertyEscapes(
+ /^\p{sc=Cypriot}+$/u,
+ matchSymbols,
+ "\\p{sc=Cypriot}"
+);
+testPropertyEscapes(
+ /^\p{sc=Cprt}+$/u,
+ matchSymbols,
+ "\\p{sc=Cprt}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x010809,
+ 0x010836
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0107FF],
+ [0x010806, 0x010807],
+ [0x010839, 0x01083B],
+ [0x01083D, 0x01083E],
+ [0x010840, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Cypriot}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Cypriot}"
+);
+testPropertyEscapes(
+ /^\P{Script=Cprt}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Cprt}"
+);
+testPropertyEscapes(
+ /^\P{sc=Cypriot}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Cypriot}"
+);
+testPropertyEscapes(
+ /^\P{sc=Cprt}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Cprt}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cypro_Minoan.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cypro_Minoan.js
new file mode 100644
index 0000000000..ad99828e8a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cypro_Minoan.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Cypro_Minoan`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x012F90, 0x012FF2]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Cypro_Minoan}+$/u,
+ matchSymbols,
+ "\\p{Script=Cypro_Minoan}"
+);
+testPropertyEscapes(
+ /^\p{Script=Cpmn}+$/u,
+ matchSymbols,
+ "\\p{Script=Cpmn}"
+);
+testPropertyEscapes(
+ /^\p{sc=Cypro_Minoan}+$/u,
+ matchSymbols,
+ "\\p{sc=Cypro_Minoan}"
+);
+testPropertyEscapes(
+ /^\p{sc=Cpmn}+$/u,
+ matchSymbols,
+ "\\p{sc=Cpmn}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x012F8F],
+ [0x012FF3, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Cypro_Minoan}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Cypro_Minoan}"
+);
+testPropertyEscapes(
+ /^\P{Script=Cpmn}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Cpmn}"
+);
+testPropertyEscapes(
+ /^\P{sc=Cypro_Minoan}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Cypro_Minoan}"
+);
+testPropertyEscapes(
+ /^\P{sc=Cpmn}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Cpmn}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cyrillic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cyrillic.js
new file mode 100644
index 0000000000..34a7845c4d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Cyrillic.js
@@ -0,0 +1,92 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Cyrillic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x001D2B,
+ 0x001D78,
+ 0x01E08F
+ ],
+ ranges: [
+ [0x000400, 0x000484],
+ [0x000487, 0x00052F],
+ [0x001C80, 0x001C88],
+ [0x002DE0, 0x002DFF],
+ [0x00A640, 0x00A69F],
+ [0x00FE2E, 0x00FE2F],
+ [0x01E030, 0x01E06D]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Cyrillic}+$/u,
+ matchSymbols,
+ "\\p{Script=Cyrillic}"
+);
+testPropertyEscapes(
+ /^\p{Script=Cyrl}+$/u,
+ matchSymbols,
+ "\\p{Script=Cyrl}"
+);
+testPropertyEscapes(
+ /^\p{sc=Cyrillic}+$/u,
+ matchSymbols,
+ "\\p{sc=Cyrillic}"
+);
+testPropertyEscapes(
+ /^\p{sc=Cyrl}+$/u,
+ matchSymbols,
+ "\\p{sc=Cyrl}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0003FF],
+ [0x000485, 0x000486],
+ [0x000530, 0x001C7F],
+ [0x001C89, 0x001D2A],
+ [0x001D2C, 0x001D77],
+ [0x001D79, 0x002DDF],
+ [0x002E00, 0x00A63F],
+ [0x00A6A0, 0x00DBFF],
+ [0x00E000, 0x00FE2D],
+ [0x00FE30, 0x01E02F],
+ [0x01E06E, 0x01E08E],
+ [0x01E090, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Cyrillic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Cyrillic}"
+);
+testPropertyEscapes(
+ /^\P{Script=Cyrl}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Cyrl}"
+);
+testPropertyEscapes(
+ /^\P{sc=Cyrillic}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Cyrillic}"
+);
+testPropertyEscapes(
+ /^\P{sc=Cyrl}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Cyrl}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Deseret.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Deseret.js
new file mode 100644
index 0000000000..90f70df2bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Deseret.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Deseret`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010400, 0x01044F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Deseret}+$/u,
+ matchSymbols,
+ "\\p{Script=Deseret}"
+);
+testPropertyEscapes(
+ /^\p{Script=Dsrt}+$/u,
+ matchSymbols,
+ "\\p{Script=Dsrt}"
+);
+testPropertyEscapes(
+ /^\p{sc=Deseret}+$/u,
+ matchSymbols,
+ "\\p{sc=Deseret}"
+);
+testPropertyEscapes(
+ /^\p{sc=Dsrt}+$/u,
+ matchSymbols,
+ "\\p{sc=Dsrt}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0103FF],
+ [0x010450, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Deseret}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Deseret}"
+);
+testPropertyEscapes(
+ /^\P{Script=Dsrt}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Dsrt}"
+);
+testPropertyEscapes(
+ /^\P{sc=Deseret}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Deseret}"
+);
+testPropertyEscapes(
+ /^\P{sc=Dsrt}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Dsrt}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Devanagari.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Devanagari.js
new file mode 100644
index 0000000000..6dd892a5f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Devanagari.js
@@ -0,0 +1,81 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Devanagari`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000900, 0x000950],
+ [0x000955, 0x000963],
+ [0x000966, 0x00097F],
+ [0x00A8E0, 0x00A8FF],
+ [0x011B00, 0x011B09]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Devanagari}+$/u,
+ matchSymbols,
+ "\\p{Script=Devanagari}"
+);
+testPropertyEscapes(
+ /^\p{Script=Deva}+$/u,
+ matchSymbols,
+ "\\p{Script=Deva}"
+);
+testPropertyEscapes(
+ /^\p{sc=Devanagari}+$/u,
+ matchSymbols,
+ "\\p{sc=Devanagari}"
+);
+testPropertyEscapes(
+ /^\p{sc=Deva}+$/u,
+ matchSymbols,
+ "\\p{sc=Deva}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0008FF],
+ [0x000951, 0x000954],
+ [0x000964, 0x000965],
+ [0x000980, 0x00A8DF],
+ [0x00A900, 0x00DBFF],
+ [0x00E000, 0x011AFF],
+ [0x011B0A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Devanagari}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Devanagari}"
+);
+testPropertyEscapes(
+ /^\P{Script=Deva}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Deva}"
+);
+testPropertyEscapes(
+ /^\P{sc=Devanagari}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Devanagari}"
+);
+testPropertyEscapes(
+ /^\P{sc=Deva}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Deva}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Dives_Akuru.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Dives_Akuru.js
new file mode 100644
index 0000000000..f8d3c984f3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Dives_Akuru.js
@@ -0,0 +1,89 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Dives_Akuru`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x011909
+ ],
+ ranges: [
+ [0x011900, 0x011906],
+ [0x01190C, 0x011913],
+ [0x011915, 0x011916],
+ [0x011918, 0x011935],
+ [0x011937, 0x011938],
+ [0x01193B, 0x011946],
+ [0x011950, 0x011959]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Dives_Akuru}+$/u,
+ matchSymbols,
+ "\\p{Script=Dives_Akuru}"
+);
+testPropertyEscapes(
+ /^\p{Script=Diak}+$/u,
+ matchSymbols,
+ "\\p{Script=Diak}"
+);
+testPropertyEscapes(
+ /^\p{sc=Dives_Akuru}+$/u,
+ matchSymbols,
+ "\\p{sc=Dives_Akuru}"
+);
+testPropertyEscapes(
+ /^\p{sc=Diak}+$/u,
+ matchSymbols,
+ "\\p{sc=Diak}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011914,
+ 0x011917,
+ 0x011936
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0118FF],
+ [0x011907, 0x011908],
+ [0x01190A, 0x01190B],
+ [0x011939, 0x01193A],
+ [0x011947, 0x01194F],
+ [0x01195A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Dives_Akuru}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Dives_Akuru}"
+);
+testPropertyEscapes(
+ /^\P{Script=Diak}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Diak}"
+);
+testPropertyEscapes(
+ /^\P{sc=Dives_Akuru}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Dives_Akuru}"
+);
+testPropertyEscapes(
+ /^\P{sc=Diak}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Diak}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Dogra.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Dogra.js
new file mode 100644
index 0000000000..1bff72a4d2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Dogra.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Dogra`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011800, 0x01183B]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Dogra}+$/u,
+ matchSymbols,
+ "\\p{Script=Dogra}"
+);
+testPropertyEscapes(
+ /^\p{Script=Dogr}+$/u,
+ matchSymbols,
+ "\\p{Script=Dogr}"
+);
+testPropertyEscapes(
+ /^\p{sc=Dogra}+$/u,
+ matchSymbols,
+ "\\p{sc=Dogra}"
+);
+testPropertyEscapes(
+ /^\p{sc=Dogr}+$/u,
+ matchSymbols,
+ "\\p{sc=Dogr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0117FF],
+ [0x01183C, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Dogra}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Dogra}"
+);
+testPropertyEscapes(
+ /^\P{Script=Dogr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Dogr}"
+);
+testPropertyEscapes(
+ /^\P{sc=Dogra}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Dogra}"
+);
+testPropertyEscapes(
+ /^\P{sc=Dogr}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Dogr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Duployan.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Duployan.js
new file mode 100644
index 0000000000..7e322e4a65
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Duployan.js
@@ -0,0 +1,81 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Duployan`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x01BC00, 0x01BC6A],
+ [0x01BC70, 0x01BC7C],
+ [0x01BC80, 0x01BC88],
+ [0x01BC90, 0x01BC99],
+ [0x01BC9C, 0x01BC9F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Duployan}+$/u,
+ matchSymbols,
+ "\\p{Script=Duployan}"
+);
+testPropertyEscapes(
+ /^\p{Script=Dupl}+$/u,
+ matchSymbols,
+ "\\p{Script=Dupl}"
+);
+testPropertyEscapes(
+ /^\p{sc=Duployan}+$/u,
+ matchSymbols,
+ "\\p{sc=Duployan}"
+);
+testPropertyEscapes(
+ /^\p{sc=Dupl}+$/u,
+ matchSymbols,
+ "\\p{sc=Dupl}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01BBFF],
+ [0x01BC6B, 0x01BC6F],
+ [0x01BC7D, 0x01BC7F],
+ [0x01BC89, 0x01BC8F],
+ [0x01BC9A, 0x01BC9B],
+ [0x01BCA0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Duployan}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Duployan}"
+);
+testPropertyEscapes(
+ /^\P{Script=Dupl}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Dupl}"
+);
+testPropertyEscapes(
+ /^\P{sc=Duployan}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Duployan}"
+);
+testPropertyEscapes(
+ /^\P{sc=Dupl}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Dupl}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Egyptian_Hieroglyphs.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Egyptian_Hieroglyphs.js
new file mode 100644
index 0000000000..83e4e44878
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Egyptian_Hieroglyphs.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Egyptian_Hieroglyphs`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x013000, 0x013455]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Egyptian_Hieroglyphs}+$/u,
+ matchSymbols,
+ "\\p{Script=Egyptian_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\p{Script=Egyp}+$/u,
+ matchSymbols,
+ "\\p{Script=Egyp}"
+);
+testPropertyEscapes(
+ /^\p{sc=Egyptian_Hieroglyphs}+$/u,
+ matchSymbols,
+ "\\p{sc=Egyptian_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\p{sc=Egyp}+$/u,
+ matchSymbols,
+ "\\p{sc=Egyp}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x012FFF],
+ [0x013456, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Egyptian_Hieroglyphs}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Egyptian_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\P{Script=Egyp}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Egyp}"
+);
+testPropertyEscapes(
+ /^\P{sc=Egyptian_Hieroglyphs}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Egyptian_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\P{sc=Egyp}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Egyp}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Elbasan.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Elbasan.js
new file mode 100644
index 0000000000..ad76e9d9ad
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Elbasan.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Elbasan`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010500, 0x010527]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Elbasan}+$/u,
+ matchSymbols,
+ "\\p{Script=Elbasan}"
+);
+testPropertyEscapes(
+ /^\p{Script=Elba}+$/u,
+ matchSymbols,
+ "\\p{Script=Elba}"
+);
+testPropertyEscapes(
+ /^\p{sc=Elbasan}+$/u,
+ matchSymbols,
+ "\\p{sc=Elbasan}"
+);
+testPropertyEscapes(
+ /^\p{sc=Elba}+$/u,
+ matchSymbols,
+ "\\p{sc=Elba}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0104FF],
+ [0x010528, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Elbasan}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Elbasan}"
+);
+testPropertyEscapes(
+ /^\P{Script=Elba}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Elba}"
+);
+testPropertyEscapes(
+ /^\P{sc=Elbasan}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Elbasan}"
+);
+testPropertyEscapes(
+ /^\P{sc=Elba}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Elba}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Elymaic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Elymaic.js
new file mode 100644
index 0000000000..10db777992
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Elymaic.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Elymaic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010FE0, 0x010FF6]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Elymaic}+$/u,
+ matchSymbols,
+ "\\p{Script=Elymaic}"
+);
+testPropertyEscapes(
+ /^\p{Script=Elym}+$/u,
+ matchSymbols,
+ "\\p{Script=Elym}"
+);
+testPropertyEscapes(
+ /^\p{sc=Elymaic}+$/u,
+ matchSymbols,
+ "\\p{sc=Elymaic}"
+);
+testPropertyEscapes(
+ /^\p{sc=Elym}+$/u,
+ matchSymbols,
+ "\\p{sc=Elym}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010FDF],
+ [0x010FF7, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Elymaic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Elymaic}"
+);
+testPropertyEscapes(
+ /^\P{Script=Elym}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Elym}"
+);
+testPropertyEscapes(
+ /^\P{sc=Elymaic}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Elymaic}"
+);
+testPropertyEscapes(
+ /^\P{sc=Elym}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Elym}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ethiopic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ethiopic.js
new file mode 100644
index 0000000000..874a880384
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ethiopic.js
@@ -0,0 +1,145 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Ethiopic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x001258,
+ 0x0012C0
+ ],
+ ranges: [
+ [0x001200, 0x001248],
+ [0x00124A, 0x00124D],
+ [0x001250, 0x001256],
+ [0x00125A, 0x00125D],
+ [0x001260, 0x001288],
+ [0x00128A, 0x00128D],
+ [0x001290, 0x0012B0],
+ [0x0012B2, 0x0012B5],
+ [0x0012B8, 0x0012BE],
+ [0x0012C2, 0x0012C5],
+ [0x0012C8, 0x0012D6],
+ [0x0012D8, 0x001310],
+ [0x001312, 0x001315],
+ [0x001318, 0x00135A],
+ [0x00135D, 0x00137C],
+ [0x001380, 0x001399],
+ [0x002D80, 0x002D96],
+ [0x002DA0, 0x002DA6],
+ [0x002DA8, 0x002DAE],
+ [0x002DB0, 0x002DB6],
+ [0x002DB8, 0x002DBE],
+ [0x002DC0, 0x002DC6],
+ [0x002DC8, 0x002DCE],
+ [0x002DD0, 0x002DD6],
+ [0x002DD8, 0x002DDE],
+ [0x00AB01, 0x00AB06],
+ [0x00AB09, 0x00AB0E],
+ [0x00AB11, 0x00AB16],
+ [0x00AB20, 0x00AB26],
+ [0x00AB28, 0x00AB2E],
+ [0x01E7E0, 0x01E7E6],
+ [0x01E7E8, 0x01E7EB],
+ [0x01E7ED, 0x01E7EE],
+ [0x01E7F0, 0x01E7FE]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Ethiopic}+$/u,
+ matchSymbols,
+ "\\p{Script=Ethiopic}"
+);
+testPropertyEscapes(
+ /^\p{Script=Ethi}+$/u,
+ matchSymbols,
+ "\\p{Script=Ethi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Ethiopic}+$/u,
+ matchSymbols,
+ "\\p{sc=Ethiopic}"
+);
+testPropertyEscapes(
+ /^\p{sc=Ethi}+$/u,
+ matchSymbols,
+ "\\p{sc=Ethi}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x001249,
+ 0x001257,
+ 0x001259,
+ 0x001289,
+ 0x0012B1,
+ 0x0012BF,
+ 0x0012C1,
+ 0x0012D7,
+ 0x001311,
+ 0x002DA7,
+ 0x002DAF,
+ 0x002DB7,
+ 0x002DBF,
+ 0x002DC7,
+ 0x002DCF,
+ 0x002DD7,
+ 0x00AB27,
+ 0x01E7E7,
+ 0x01E7EC,
+ 0x01E7EF
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0011FF],
+ [0x00124E, 0x00124F],
+ [0x00125E, 0x00125F],
+ [0x00128E, 0x00128F],
+ [0x0012B6, 0x0012B7],
+ [0x0012C6, 0x0012C7],
+ [0x001316, 0x001317],
+ [0x00135B, 0x00135C],
+ [0x00137D, 0x00137F],
+ [0x00139A, 0x002D7F],
+ [0x002D97, 0x002D9F],
+ [0x002DDF, 0x00AB00],
+ [0x00AB07, 0x00AB08],
+ [0x00AB0F, 0x00AB10],
+ [0x00AB17, 0x00AB1F],
+ [0x00AB2F, 0x00DBFF],
+ [0x00E000, 0x01E7DF],
+ [0x01E7FF, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Ethiopic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Ethiopic}"
+);
+testPropertyEscapes(
+ /^\P{Script=Ethi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Ethi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Ethiopic}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Ethiopic}"
+);
+testPropertyEscapes(
+ /^\P{sc=Ethi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Ethi}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Georgian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Georgian.js
new file mode 100644
index 0000000000..d7acea54af
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Georgian.js
@@ -0,0 +1,93 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Georgian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0010C7,
+ 0x0010CD,
+ 0x002D27,
+ 0x002D2D
+ ],
+ ranges: [
+ [0x0010A0, 0x0010C5],
+ [0x0010D0, 0x0010FA],
+ [0x0010FC, 0x0010FF],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CBF],
+ [0x002D00, 0x002D25]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Georgian}+$/u,
+ matchSymbols,
+ "\\p{Script=Georgian}"
+);
+testPropertyEscapes(
+ /^\p{Script=Geor}+$/u,
+ matchSymbols,
+ "\\p{Script=Geor}"
+);
+testPropertyEscapes(
+ /^\p{sc=Georgian}+$/u,
+ matchSymbols,
+ "\\p{sc=Georgian}"
+);
+testPropertyEscapes(
+ /^\p{sc=Geor}+$/u,
+ matchSymbols,
+ "\\p{sc=Geor}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0010C6,
+ 0x0010FB,
+ 0x002D26
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00109F],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x0010CF],
+ [0x001100, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC0, 0x002CFF],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Georgian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Georgian}"
+);
+testPropertyEscapes(
+ /^\P{Script=Geor}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Geor}"
+);
+testPropertyEscapes(
+ /^\P{sc=Georgian}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Georgian}"
+);
+testPropertyEscapes(
+ /^\P{sc=Geor}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Geor}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Glagolitic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Glagolitic.js
new file mode 100644
index 0000000000..8c5eeff0d9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Glagolitic.js
@@ -0,0 +1,84 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Glagolitic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x002C00, 0x002C5F],
+ [0x01E000, 0x01E006],
+ [0x01E008, 0x01E018],
+ [0x01E01B, 0x01E021],
+ [0x01E023, 0x01E024],
+ [0x01E026, 0x01E02A]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Glagolitic}+$/u,
+ matchSymbols,
+ "\\p{Script=Glagolitic}"
+);
+testPropertyEscapes(
+ /^\p{Script=Glag}+$/u,
+ matchSymbols,
+ "\\p{Script=Glag}"
+);
+testPropertyEscapes(
+ /^\p{sc=Glagolitic}+$/u,
+ matchSymbols,
+ "\\p{sc=Glagolitic}"
+);
+testPropertyEscapes(
+ /^\p{sc=Glag}+$/u,
+ matchSymbols,
+ "\\p{sc=Glag}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x01E007,
+ 0x01E022,
+ 0x01E025
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x002BFF],
+ [0x002C60, 0x00DBFF],
+ [0x00E000, 0x01DFFF],
+ [0x01E019, 0x01E01A],
+ [0x01E02B, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Glagolitic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Glagolitic}"
+);
+testPropertyEscapes(
+ /^\P{Script=Glag}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Glag}"
+);
+testPropertyEscapes(
+ /^\P{sc=Glagolitic}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Glagolitic}"
+);
+testPropertyEscapes(
+ /^\P{sc=Glag}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Glag}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Gothic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Gothic.js
new file mode 100644
index 0000000000..e46e494a8a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Gothic.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Gothic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010330, 0x01034A]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Gothic}+$/u,
+ matchSymbols,
+ "\\p{Script=Gothic}"
+);
+testPropertyEscapes(
+ /^\p{Script=Goth}+$/u,
+ matchSymbols,
+ "\\p{Script=Goth}"
+);
+testPropertyEscapes(
+ /^\p{sc=Gothic}+$/u,
+ matchSymbols,
+ "\\p{sc=Gothic}"
+);
+testPropertyEscapes(
+ /^\p{sc=Goth}+$/u,
+ matchSymbols,
+ "\\p{sc=Goth}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01032F],
+ [0x01034B, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Gothic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Gothic}"
+);
+testPropertyEscapes(
+ /^\P{Script=Goth}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Goth}"
+);
+testPropertyEscapes(
+ /^\P{sc=Gothic}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Gothic}"
+);
+testPropertyEscapes(
+ /^\P{sc=Goth}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Goth}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Grantha.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Grantha.js
new file mode 100644
index 0000000000..013457acd1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Grantha.js
@@ -0,0 +1,103 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Grantha`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x011350,
+ 0x011357
+ ],
+ ranges: [
+ [0x011300, 0x011303],
+ [0x011305, 0x01130C],
+ [0x01130F, 0x011310],
+ [0x011313, 0x011328],
+ [0x01132A, 0x011330],
+ [0x011332, 0x011333],
+ [0x011335, 0x011339],
+ [0x01133C, 0x011344],
+ [0x011347, 0x011348],
+ [0x01134B, 0x01134D],
+ [0x01135D, 0x011363],
+ [0x011366, 0x01136C],
+ [0x011370, 0x011374]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Grantha}+$/u,
+ matchSymbols,
+ "\\p{Script=Grantha}"
+);
+testPropertyEscapes(
+ /^\p{Script=Gran}+$/u,
+ matchSymbols,
+ "\\p{Script=Gran}"
+);
+testPropertyEscapes(
+ /^\p{sc=Grantha}+$/u,
+ matchSymbols,
+ "\\p{sc=Grantha}"
+);
+testPropertyEscapes(
+ /^\p{sc=Gran}+$/u,
+ matchSymbols,
+ "\\p{sc=Gran}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011304,
+ 0x011329,
+ 0x011331,
+ 0x011334
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0112FF],
+ [0x01130D, 0x01130E],
+ [0x011311, 0x011312],
+ [0x01133A, 0x01133B],
+ [0x011345, 0x011346],
+ [0x011349, 0x01134A],
+ [0x01134E, 0x01134F],
+ [0x011351, 0x011356],
+ [0x011358, 0x01135C],
+ [0x011364, 0x011365],
+ [0x01136D, 0x01136F],
+ [0x011375, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Grantha}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Grantha}"
+);
+testPropertyEscapes(
+ /^\P{Script=Gran}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Gran}"
+);
+testPropertyEscapes(
+ /^\P{sc=Grantha}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Grantha}"
+);
+testPropertyEscapes(
+ /^\P{sc=Gran}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Gran}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Greek.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Greek.js
new file mode 100644
index 0000000000..d6c810a618
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Greek.js
@@ -0,0 +1,145 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Greek`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00037F,
+ 0x000384,
+ 0x000386,
+ 0x00038C,
+ 0x001DBF,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x002126,
+ 0x00AB65,
+ 0x0101A0
+ ],
+ ranges: [
+ [0x000370, 0x000373],
+ [0x000375, 0x000377],
+ [0x00037A, 0x00037D],
+ [0x000388, 0x00038A],
+ [0x00038E, 0x0003A1],
+ [0x0003A3, 0x0003E1],
+ [0x0003F0, 0x0003FF],
+ [0x001D26, 0x001D2A],
+ [0x001D5D, 0x001D61],
+ [0x001D66, 0x001D6A],
+ [0x001F00, 0x001F15],
+ [0x001F18, 0x001F1D],
+ [0x001F20, 0x001F45],
+ [0x001F48, 0x001F4D],
+ [0x001F50, 0x001F57],
+ [0x001F5F, 0x001F7D],
+ [0x001F80, 0x001FB4],
+ [0x001FB6, 0x001FC4],
+ [0x001FC6, 0x001FD3],
+ [0x001FD6, 0x001FDB],
+ [0x001FDD, 0x001FEF],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FFE],
+ [0x010140, 0x01018E],
+ [0x01D200, 0x01D245]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Greek}+$/u,
+ matchSymbols,
+ "\\p{Script=Greek}"
+);
+testPropertyEscapes(
+ /^\p{Script=Grek}+$/u,
+ matchSymbols,
+ "\\p{Script=Grek}"
+);
+testPropertyEscapes(
+ /^\p{sc=Greek}+$/u,
+ matchSymbols,
+ "\\p{sc=Greek}"
+);
+testPropertyEscapes(
+ /^\p{sc=Grek}+$/u,
+ matchSymbols,
+ "\\p{sc=Grek}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000374,
+ 0x00037E,
+ 0x000385,
+ 0x000387,
+ 0x00038B,
+ 0x00038D,
+ 0x0003A2,
+ 0x001F58,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x001FB5,
+ 0x001FC5,
+ 0x001FDC,
+ 0x001FF5
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00036F],
+ [0x000378, 0x000379],
+ [0x000380, 0x000383],
+ [0x0003E2, 0x0003EF],
+ [0x000400, 0x001D25],
+ [0x001D2B, 0x001D5C],
+ [0x001D62, 0x001D65],
+ [0x001D6B, 0x001DBE],
+ [0x001DC0, 0x001EFF],
+ [0x001F16, 0x001F17],
+ [0x001F1E, 0x001F1F],
+ [0x001F46, 0x001F47],
+ [0x001F4E, 0x001F4F],
+ [0x001F7E, 0x001F7F],
+ [0x001FD4, 0x001FD5],
+ [0x001FF0, 0x001FF1],
+ [0x001FFF, 0x002125],
+ [0x002127, 0x00AB64],
+ [0x00AB66, 0x00DBFF],
+ [0x00E000, 0x01013F],
+ [0x01018F, 0x01019F],
+ [0x0101A1, 0x01D1FF],
+ [0x01D246, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Greek}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Greek}"
+);
+testPropertyEscapes(
+ /^\P{Script=Grek}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Grek}"
+);
+testPropertyEscapes(
+ /^\P{sc=Greek}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Greek}"
+);
+testPropertyEscapes(
+ /^\P{sc=Grek}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Grek}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Gujarati.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Gujarati.js
new file mode 100644
index 0000000000..baf22e91e3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Gujarati.js
@@ -0,0 +1,101 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Gujarati`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000AD0
+ ],
+ ranges: [
+ [0x000A81, 0x000A83],
+ [0x000A85, 0x000A8D],
+ [0x000A8F, 0x000A91],
+ [0x000A93, 0x000AA8],
+ [0x000AAA, 0x000AB0],
+ [0x000AB2, 0x000AB3],
+ [0x000AB5, 0x000AB9],
+ [0x000ABC, 0x000AC5],
+ [0x000AC7, 0x000AC9],
+ [0x000ACB, 0x000ACD],
+ [0x000AE0, 0x000AE3],
+ [0x000AE6, 0x000AF1],
+ [0x000AF9, 0x000AFF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Gujarati}+$/u,
+ matchSymbols,
+ "\\p{Script=Gujarati}"
+);
+testPropertyEscapes(
+ /^\p{Script=Gujr}+$/u,
+ matchSymbols,
+ "\\p{Script=Gujr}"
+);
+testPropertyEscapes(
+ /^\p{sc=Gujarati}+$/u,
+ matchSymbols,
+ "\\p{sc=Gujarati}"
+);
+testPropertyEscapes(
+ /^\p{sc=Gujr}+$/u,
+ matchSymbols,
+ "\\p{sc=Gujr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000A84,
+ 0x000A8E,
+ 0x000A92,
+ 0x000AA9,
+ 0x000AB1,
+ 0x000AB4,
+ 0x000AC6,
+ 0x000ACA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000A80],
+ [0x000ABA, 0x000ABB],
+ [0x000ACE, 0x000ACF],
+ [0x000AD1, 0x000ADF],
+ [0x000AE4, 0x000AE5],
+ [0x000AF2, 0x000AF8],
+ [0x000B00, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Gujarati}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Gujarati}"
+);
+testPropertyEscapes(
+ /^\P{Script=Gujr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Gujr}"
+);
+testPropertyEscapes(
+ /^\P{sc=Gujarati}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Gujarati}"
+);
+testPropertyEscapes(
+ /^\P{sc=Gujr}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Gujr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Gunjala_Gondi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Gunjala_Gondi.js
new file mode 100644
index 0000000000..e9c242d2cb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Gunjala_Gondi.js
@@ -0,0 +1,84 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Gunjala_Gondi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011D60, 0x011D65],
+ [0x011D67, 0x011D68],
+ [0x011D6A, 0x011D8E],
+ [0x011D90, 0x011D91],
+ [0x011D93, 0x011D98],
+ [0x011DA0, 0x011DA9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Gunjala_Gondi}+$/u,
+ matchSymbols,
+ "\\p{Script=Gunjala_Gondi}"
+);
+testPropertyEscapes(
+ /^\p{Script=Gong}+$/u,
+ matchSymbols,
+ "\\p{Script=Gong}"
+);
+testPropertyEscapes(
+ /^\p{sc=Gunjala_Gondi}+$/u,
+ matchSymbols,
+ "\\p{sc=Gunjala_Gondi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Gong}+$/u,
+ matchSymbols,
+ "\\p{sc=Gong}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011D66,
+ 0x011D69,
+ 0x011D8F,
+ 0x011D92
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x011D5F],
+ [0x011D99, 0x011D9F],
+ [0x011DAA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Gunjala_Gondi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Gunjala_Gondi}"
+);
+testPropertyEscapes(
+ /^\P{Script=Gong}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Gong}"
+);
+testPropertyEscapes(
+ /^\P{sc=Gunjala_Gondi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Gunjala_Gondi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Gong}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Gong}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Gurmukhi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Gurmukhi.js
new file mode 100644
index 0000000000..0b12236e66
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Gurmukhi.js
@@ -0,0 +1,105 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Gurmukhi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000A3C,
+ 0x000A51,
+ 0x000A5E
+ ],
+ ranges: [
+ [0x000A01, 0x000A03],
+ [0x000A05, 0x000A0A],
+ [0x000A0F, 0x000A10],
+ [0x000A13, 0x000A28],
+ [0x000A2A, 0x000A30],
+ [0x000A32, 0x000A33],
+ [0x000A35, 0x000A36],
+ [0x000A38, 0x000A39],
+ [0x000A3E, 0x000A42],
+ [0x000A47, 0x000A48],
+ [0x000A4B, 0x000A4D],
+ [0x000A59, 0x000A5C],
+ [0x000A66, 0x000A76]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Gurmukhi}+$/u,
+ matchSymbols,
+ "\\p{Script=Gurmukhi}"
+);
+testPropertyEscapes(
+ /^\p{Script=Guru}+$/u,
+ matchSymbols,
+ "\\p{Script=Guru}"
+);
+testPropertyEscapes(
+ /^\p{sc=Gurmukhi}+$/u,
+ matchSymbols,
+ "\\p{sc=Gurmukhi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Guru}+$/u,
+ matchSymbols,
+ "\\p{sc=Guru}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000A04,
+ 0x000A29,
+ 0x000A31,
+ 0x000A34,
+ 0x000A37,
+ 0x000A3D,
+ 0x000A5D
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000A00],
+ [0x000A0B, 0x000A0E],
+ [0x000A11, 0x000A12],
+ [0x000A3A, 0x000A3B],
+ [0x000A43, 0x000A46],
+ [0x000A49, 0x000A4A],
+ [0x000A4E, 0x000A50],
+ [0x000A52, 0x000A58],
+ [0x000A5F, 0x000A65],
+ [0x000A77, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Gurmukhi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Gurmukhi}"
+);
+testPropertyEscapes(
+ /^\P{Script=Guru}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Guru}"
+);
+testPropertyEscapes(
+ /^\P{sc=Gurmukhi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Gurmukhi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Guru}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Guru}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Han.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Han.js
new file mode 100644
index 0000000000..98dcdda8a9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Han.js
@@ -0,0 +1,115 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Han`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x003005,
+ 0x003007
+ ],
+ ranges: [
+ [0x002E80, 0x002E99],
+ [0x002E9B, 0x002EF3],
+ [0x002F00, 0x002FD5],
+ [0x003021, 0x003029],
+ [0x003038, 0x00303B],
+ [0x003400, 0x004DBF],
+ [0x004E00, 0x009FFF],
+ [0x00F900, 0x00FA6D],
+ [0x00FA70, 0x00FAD9],
+ [0x016FE2, 0x016FE3],
+ [0x016FF0, 0x016FF1],
+ [0x020000, 0x02A6DF],
+ [0x02A700, 0x02B739],
+ [0x02B740, 0x02B81D],
+ [0x02B820, 0x02CEA1],
+ [0x02CEB0, 0x02EBE0],
+ [0x02F800, 0x02FA1D],
+ [0x030000, 0x03134A],
+ [0x031350, 0x0323AF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Han}+$/u,
+ matchSymbols,
+ "\\p{Script=Han}"
+);
+testPropertyEscapes(
+ /^\p{Script=Hani}+$/u,
+ matchSymbols,
+ "\\p{Script=Hani}"
+);
+testPropertyEscapes(
+ /^\p{sc=Han}+$/u,
+ matchSymbols,
+ "\\p{sc=Han}"
+);
+testPropertyEscapes(
+ /^\p{sc=Hani}+$/u,
+ matchSymbols,
+ "\\p{sc=Hani}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x002E9A,
+ 0x003006
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x002E7F],
+ [0x002EF4, 0x002EFF],
+ [0x002FD6, 0x003004],
+ [0x003008, 0x003020],
+ [0x00302A, 0x003037],
+ [0x00303C, 0x0033FF],
+ [0x004DC0, 0x004DFF],
+ [0x00A000, 0x00DBFF],
+ [0x00E000, 0x00F8FF],
+ [0x00FA6E, 0x00FA6F],
+ [0x00FADA, 0x016FE1],
+ [0x016FE4, 0x016FEF],
+ [0x016FF2, 0x01FFFF],
+ [0x02A6E0, 0x02A6FF],
+ [0x02B73A, 0x02B73F],
+ [0x02B81E, 0x02B81F],
+ [0x02CEA2, 0x02CEAF],
+ [0x02EBE1, 0x02F7FF],
+ [0x02FA1E, 0x02FFFF],
+ [0x03134B, 0x03134F],
+ [0x0323B0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Han}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Han}"
+);
+testPropertyEscapes(
+ /^\P{Script=Hani}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Hani}"
+);
+testPropertyEscapes(
+ /^\P{sc=Han}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Han}"
+);
+testPropertyEscapes(
+ /^\P{sc=Hani}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Hani}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hangul.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hangul.js
new file mode 100644
index 0000000000..0c31fa8816
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hangul.js
@@ -0,0 +1,99 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Hangul`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001100, 0x0011FF],
+ [0x00302E, 0x00302F],
+ [0x003131, 0x00318E],
+ [0x003200, 0x00321E],
+ [0x003260, 0x00327E],
+ [0x00A960, 0x00A97C],
+ [0x00AC00, 0x00D7A3],
+ [0x00D7B0, 0x00D7C6],
+ [0x00D7CB, 0x00D7FB],
+ [0x00FFA0, 0x00FFBE],
+ [0x00FFC2, 0x00FFC7],
+ [0x00FFCA, 0x00FFCF],
+ [0x00FFD2, 0x00FFD7],
+ [0x00FFDA, 0x00FFDC]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Hangul}+$/u,
+ matchSymbols,
+ "\\p{Script=Hangul}"
+);
+testPropertyEscapes(
+ /^\p{Script=Hang}+$/u,
+ matchSymbols,
+ "\\p{Script=Hang}"
+);
+testPropertyEscapes(
+ /^\p{sc=Hangul}+$/u,
+ matchSymbols,
+ "\\p{sc=Hangul}"
+);
+testPropertyEscapes(
+ /^\p{sc=Hang}+$/u,
+ matchSymbols,
+ "\\p{sc=Hang}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0010FF],
+ [0x001200, 0x00302D],
+ [0x003030, 0x003130],
+ [0x00318F, 0x0031FF],
+ [0x00321F, 0x00325F],
+ [0x00327F, 0x00A95F],
+ [0x00A97D, 0x00ABFF],
+ [0x00D7A4, 0x00D7AF],
+ [0x00D7C7, 0x00D7CA],
+ [0x00D7FC, 0x00DBFF],
+ [0x00E000, 0x00FF9F],
+ [0x00FFBF, 0x00FFC1],
+ [0x00FFC8, 0x00FFC9],
+ [0x00FFD0, 0x00FFD1],
+ [0x00FFD8, 0x00FFD9],
+ [0x00FFDD, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Hangul}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Hangul}"
+);
+testPropertyEscapes(
+ /^\P{Script=Hang}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Hang}"
+);
+testPropertyEscapes(
+ /^\P{sc=Hangul}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Hangul}"
+);
+testPropertyEscapes(
+ /^\P{sc=Hang}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Hang}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hanifi_Rohingya.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hanifi_Rohingya.js
new file mode 100644
index 0000000000..f22d8922c6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hanifi_Rohingya.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Hanifi_Rohingya`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010D00, 0x010D27],
+ [0x010D30, 0x010D39]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Hanifi_Rohingya}+$/u,
+ matchSymbols,
+ "\\p{Script=Hanifi_Rohingya}"
+);
+testPropertyEscapes(
+ /^\p{Script=Rohg}+$/u,
+ matchSymbols,
+ "\\p{Script=Rohg}"
+);
+testPropertyEscapes(
+ /^\p{sc=Hanifi_Rohingya}+$/u,
+ matchSymbols,
+ "\\p{sc=Hanifi_Rohingya}"
+);
+testPropertyEscapes(
+ /^\p{sc=Rohg}+$/u,
+ matchSymbols,
+ "\\p{sc=Rohg}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010CFF],
+ [0x010D28, 0x010D2F],
+ [0x010D3A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Hanifi_Rohingya}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Hanifi_Rohingya}"
+);
+testPropertyEscapes(
+ /^\P{Script=Rohg}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Rohg}"
+);
+testPropertyEscapes(
+ /^\P{sc=Hanifi_Rohingya}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Hanifi_Rohingya}"
+);
+testPropertyEscapes(
+ /^\P{sc=Rohg}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Rohg}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hanunoo.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hanunoo.js
new file mode 100644
index 0000000000..b48a8da513
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hanunoo.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Hanunoo`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001720, 0x001734]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Hanunoo}+$/u,
+ matchSymbols,
+ "\\p{Script=Hanunoo}"
+);
+testPropertyEscapes(
+ /^\p{Script=Hano}+$/u,
+ matchSymbols,
+ "\\p{Script=Hano}"
+);
+testPropertyEscapes(
+ /^\p{sc=Hanunoo}+$/u,
+ matchSymbols,
+ "\\p{sc=Hanunoo}"
+);
+testPropertyEscapes(
+ /^\p{sc=Hano}+$/u,
+ matchSymbols,
+ "\\p{sc=Hano}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00171F],
+ [0x001735, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Hanunoo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Hanunoo}"
+);
+testPropertyEscapes(
+ /^\P{Script=Hano}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Hano}"
+);
+testPropertyEscapes(
+ /^\P{sc=Hanunoo}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Hanunoo}"
+);
+testPropertyEscapes(
+ /^\P{sc=Hano}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Hano}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hatran.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hatran.js
new file mode 100644
index 0000000000..d285e518ba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hatran.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Hatran`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0108E0, 0x0108F2],
+ [0x0108F4, 0x0108F5],
+ [0x0108FB, 0x0108FF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Hatran}+$/u,
+ matchSymbols,
+ "\\p{Script=Hatran}"
+);
+testPropertyEscapes(
+ /^\p{Script=Hatr}+$/u,
+ matchSymbols,
+ "\\p{Script=Hatr}"
+);
+testPropertyEscapes(
+ /^\p{sc=Hatran}+$/u,
+ matchSymbols,
+ "\\p{sc=Hatran}"
+);
+testPropertyEscapes(
+ /^\p{sc=Hatr}+$/u,
+ matchSymbols,
+ "\\p{sc=Hatr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0108F3
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0108DF],
+ [0x0108F6, 0x0108FA],
+ [0x010900, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Hatran}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Hatran}"
+);
+testPropertyEscapes(
+ /^\P{Script=Hatr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Hatr}"
+);
+testPropertyEscapes(
+ /^\P{sc=Hatran}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Hatran}"
+);
+testPropertyEscapes(
+ /^\P{sc=Hatr}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Hatr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hebrew.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hebrew.js
new file mode 100644
index 0000000000..81ed90c824
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hebrew.js
@@ -0,0 +1,91 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Hebrew`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00FB3E
+ ],
+ ranges: [
+ [0x000591, 0x0005C7],
+ [0x0005D0, 0x0005EA],
+ [0x0005EF, 0x0005F4],
+ [0x00FB1D, 0x00FB36],
+ [0x00FB38, 0x00FB3C],
+ [0x00FB40, 0x00FB41],
+ [0x00FB43, 0x00FB44],
+ [0x00FB46, 0x00FB4F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Hebrew}+$/u,
+ matchSymbols,
+ "\\p{Script=Hebrew}"
+);
+testPropertyEscapes(
+ /^\p{Script=Hebr}+$/u,
+ matchSymbols,
+ "\\p{Script=Hebr}"
+);
+testPropertyEscapes(
+ /^\p{sc=Hebrew}+$/u,
+ matchSymbols,
+ "\\p{sc=Hebrew}"
+);
+testPropertyEscapes(
+ /^\p{sc=Hebr}+$/u,
+ matchSymbols,
+ "\\p{sc=Hebr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00FB37,
+ 0x00FB3D,
+ 0x00FB3F,
+ 0x00FB42,
+ 0x00FB45
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000590],
+ [0x0005C8, 0x0005CF],
+ [0x0005EB, 0x0005EE],
+ [0x0005F5, 0x00DBFF],
+ [0x00E000, 0x00FB1C],
+ [0x00FB50, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Hebrew}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Hebrew}"
+);
+testPropertyEscapes(
+ /^\P{Script=Hebr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Hebr}"
+);
+testPropertyEscapes(
+ /^\P{sc=Hebrew}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Hebrew}"
+);
+testPropertyEscapes(
+ /^\P{sc=Hebr}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Hebr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hiragana.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hiragana.js
new file mode 100644
index 0000000000..e881644395
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Hiragana.js
@@ -0,0 +1,84 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Hiragana`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x01B132,
+ 0x01F200
+ ],
+ ranges: [
+ [0x003041, 0x003096],
+ [0x00309D, 0x00309F],
+ [0x01B001, 0x01B11F],
+ [0x01B150, 0x01B152]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Hiragana}+$/u,
+ matchSymbols,
+ "\\p{Script=Hiragana}"
+);
+testPropertyEscapes(
+ /^\p{Script=Hira}+$/u,
+ matchSymbols,
+ "\\p{Script=Hira}"
+);
+testPropertyEscapes(
+ /^\p{sc=Hiragana}+$/u,
+ matchSymbols,
+ "\\p{sc=Hiragana}"
+);
+testPropertyEscapes(
+ /^\p{sc=Hira}+$/u,
+ matchSymbols,
+ "\\p{sc=Hira}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x003040],
+ [0x003097, 0x00309C],
+ [0x0030A0, 0x00DBFF],
+ [0x00E000, 0x01B000],
+ [0x01B120, 0x01B131],
+ [0x01B133, 0x01B14F],
+ [0x01B153, 0x01F1FF],
+ [0x01F201, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Hiragana}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Hiragana}"
+);
+testPropertyEscapes(
+ /^\P{Script=Hira}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Hira}"
+);
+testPropertyEscapes(
+ /^\P{sc=Hiragana}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Hiragana}"
+);
+testPropertyEscapes(
+ /^\P{sc=Hira}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Hira}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Imperial_Aramaic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Imperial_Aramaic.js
new file mode 100644
index 0000000000..e0219e6189
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Imperial_Aramaic.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Imperial_Aramaic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010840, 0x010855],
+ [0x010857, 0x01085F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Imperial_Aramaic}+$/u,
+ matchSymbols,
+ "\\p{Script=Imperial_Aramaic}"
+);
+testPropertyEscapes(
+ /^\p{Script=Armi}+$/u,
+ matchSymbols,
+ "\\p{Script=Armi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Imperial_Aramaic}+$/u,
+ matchSymbols,
+ "\\p{sc=Imperial_Aramaic}"
+);
+testPropertyEscapes(
+ /^\p{sc=Armi}+$/u,
+ matchSymbols,
+ "\\p{sc=Armi}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x010856
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01083F],
+ [0x010860, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Imperial_Aramaic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Imperial_Aramaic}"
+);
+testPropertyEscapes(
+ /^\P{Script=Armi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Armi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Imperial_Aramaic}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Imperial_Aramaic}"
+);
+testPropertyEscapes(
+ /^\P{sc=Armi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Armi}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Inherited.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Inherited.js
new file mode 100644
index 0000000000..5ad174837a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Inherited.js
@@ -0,0 +1,151 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Inherited`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000670,
+ 0x001CED,
+ 0x001CF4,
+ 0x0101FD,
+ 0x0102E0,
+ 0x01133B
+ ],
+ ranges: [
+ [0x000300, 0x00036F],
+ [0x000485, 0x000486],
+ [0x00064B, 0x000655],
+ [0x000951, 0x000954],
+ [0x001AB0, 0x001ACE],
+ [0x001CD0, 0x001CD2],
+ [0x001CD4, 0x001CE0],
+ [0x001CE2, 0x001CE8],
+ [0x001CF8, 0x001CF9],
+ [0x001DC0, 0x001DFF],
+ [0x00200C, 0x00200D],
+ [0x0020D0, 0x0020F0],
+ [0x00302A, 0x00302D],
+ [0x003099, 0x00309A],
+ [0x00FE00, 0x00FE0F],
+ [0x00FE20, 0x00FE2D],
+ [0x01CF00, 0x01CF2D],
+ [0x01CF30, 0x01CF46],
+ [0x01D167, 0x01D169],
+ [0x01D17B, 0x01D182],
+ [0x01D185, 0x01D18B],
+ [0x01D1AA, 0x01D1AD],
+ [0x0E0100, 0x0E01EF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Inherited}+$/u,
+ matchSymbols,
+ "\\p{Script=Inherited}"
+);
+testPropertyEscapes(
+ /^\p{Script=Zinh}+$/u,
+ matchSymbols,
+ "\\p{Script=Zinh}"
+);
+testPropertyEscapes(
+ /^\p{Script=Qaai}+$/u,
+ matchSymbols,
+ "\\p{Script=Qaai}"
+);
+testPropertyEscapes(
+ /^\p{sc=Inherited}+$/u,
+ matchSymbols,
+ "\\p{sc=Inherited}"
+);
+testPropertyEscapes(
+ /^\p{sc=Zinh}+$/u,
+ matchSymbols,
+ "\\p{sc=Zinh}"
+);
+testPropertyEscapes(
+ /^\p{sc=Qaai}+$/u,
+ matchSymbols,
+ "\\p{sc=Qaai}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x001CD3,
+ 0x001CE1
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0002FF],
+ [0x000370, 0x000484],
+ [0x000487, 0x00064A],
+ [0x000656, 0x00066F],
+ [0x000671, 0x000950],
+ [0x000955, 0x001AAF],
+ [0x001ACF, 0x001CCF],
+ [0x001CE9, 0x001CEC],
+ [0x001CEE, 0x001CF3],
+ [0x001CF5, 0x001CF7],
+ [0x001CFA, 0x001DBF],
+ [0x001E00, 0x00200B],
+ [0x00200E, 0x0020CF],
+ [0x0020F1, 0x003029],
+ [0x00302E, 0x003098],
+ [0x00309B, 0x00DBFF],
+ [0x00E000, 0x00FDFF],
+ [0x00FE10, 0x00FE1F],
+ [0x00FE2E, 0x0101FC],
+ [0x0101FE, 0x0102DF],
+ [0x0102E1, 0x01133A],
+ [0x01133C, 0x01CEFF],
+ [0x01CF2E, 0x01CF2F],
+ [0x01CF47, 0x01D166],
+ [0x01D16A, 0x01D17A],
+ [0x01D183, 0x01D184],
+ [0x01D18C, 0x01D1A9],
+ [0x01D1AE, 0x0E00FF],
+ [0x0E01F0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Inherited}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Inherited}"
+);
+testPropertyEscapes(
+ /^\P{Script=Zinh}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Zinh}"
+);
+testPropertyEscapes(
+ /^\P{Script=Qaai}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Qaai}"
+);
+testPropertyEscapes(
+ /^\P{sc=Inherited}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Inherited}"
+);
+testPropertyEscapes(
+ /^\P{sc=Zinh}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Zinh}"
+);
+testPropertyEscapes(
+ /^\P{sc=Qaai}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Qaai}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Inscriptional_Pahlavi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Inscriptional_Pahlavi.js
new file mode 100644
index 0000000000..903a4c547b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Inscriptional_Pahlavi.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Inscriptional_Pahlavi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010B60, 0x010B72],
+ [0x010B78, 0x010B7F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Inscriptional_Pahlavi}+$/u,
+ matchSymbols,
+ "\\p{Script=Inscriptional_Pahlavi}"
+);
+testPropertyEscapes(
+ /^\p{Script=Phli}+$/u,
+ matchSymbols,
+ "\\p{Script=Phli}"
+);
+testPropertyEscapes(
+ /^\p{sc=Inscriptional_Pahlavi}+$/u,
+ matchSymbols,
+ "\\p{sc=Inscriptional_Pahlavi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Phli}+$/u,
+ matchSymbols,
+ "\\p{sc=Phli}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010B5F],
+ [0x010B73, 0x010B77],
+ [0x010B80, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Inscriptional_Pahlavi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Inscriptional_Pahlavi}"
+);
+testPropertyEscapes(
+ /^\P{Script=Phli}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Phli}"
+);
+testPropertyEscapes(
+ /^\P{sc=Inscriptional_Pahlavi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Inscriptional_Pahlavi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Phli}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Phli}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Inscriptional_Parthian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Inscriptional_Parthian.js
new file mode 100644
index 0000000000..d903d25163
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Inscriptional_Parthian.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Inscriptional_Parthian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010B40, 0x010B55],
+ [0x010B58, 0x010B5F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Inscriptional_Parthian}+$/u,
+ matchSymbols,
+ "\\p{Script=Inscriptional_Parthian}"
+);
+testPropertyEscapes(
+ /^\p{Script=Prti}+$/u,
+ matchSymbols,
+ "\\p{Script=Prti}"
+);
+testPropertyEscapes(
+ /^\p{sc=Inscriptional_Parthian}+$/u,
+ matchSymbols,
+ "\\p{sc=Inscriptional_Parthian}"
+);
+testPropertyEscapes(
+ /^\p{sc=Prti}+$/u,
+ matchSymbols,
+ "\\p{sc=Prti}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010B3F],
+ [0x010B56, 0x010B57],
+ [0x010B60, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Inscriptional_Parthian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Inscriptional_Parthian}"
+);
+testPropertyEscapes(
+ /^\P{Script=Prti}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Prti}"
+);
+testPropertyEscapes(
+ /^\P{sc=Inscriptional_Parthian}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Inscriptional_Parthian}"
+);
+testPropertyEscapes(
+ /^\P{sc=Prti}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Prti}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Javanese.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Javanese.js
new file mode 100644
index 0000000000..9cba448606
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Javanese.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Javanese`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00A980, 0x00A9CD],
+ [0x00A9D0, 0x00A9D9],
+ [0x00A9DE, 0x00A9DF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Javanese}+$/u,
+ matchSymbols,
+ "\\p{Script=Javanese}"
+);
+testPropertyEscapes(
+ /^\p{Script=Java}+$/u,
+ matchSymbols,
+ "\\p{Script=Java}"
+);
+testPropertyEscapes(
+ /^\p{sc=Javanese}+$/u,
+ matchSymbols,
+ "\\p{sc=Javanese}"
+);
+testPropertyEscapes(
+ /^\p{sc=Java}+$/u,
+ matchSymbols,
+ "\\p{sc=Java}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A97F],
+ [0x00A9CE, 0x00A9CF],
+ [0x00A9DA, 0x00A9DD],
+ [0x00A9E0, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Javanese}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Javanese}"
+);
+testPropertyEscapes(
+ /^\P{Script=Java}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Java}"
+);
+testPropertyEscapes(
+ /^\P{sc=Javanese}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Javanese}"
+);
+testPropertyEscapes(
+ /^\P{sc=Java}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Java}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kaithi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kaithi.js
new file mode 100644
index 0000000000..faf7a640f0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kaithi.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Kaithi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0110CD
+ ],
+ ranges: [
+ [0x011080, 0x0110C2]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Kaithi}+$/u,
+ matchSymbols,
+ "\\p{Script=Kaithi}"
+);
+testPropertyEscapes(
+ /^\p{Script=Kthi}+$/u,
+ matchSymbols,
+ "\\p{Script=Kthi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Kaithi}+$/u,
+ matchSymbols,
+ "\\p{sc=Kaithi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Kthi}+$/u,
+ matchSymbols,
+ "\\p{sc=Kthi}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01107F],
+ [0x0110C3, 0x0110CC],
+ [0x0110CE, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Kaithi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Kaithi}"
+);
+testPropertyEscapes(
+ /^\P{Script=Kthi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Kthi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Kaithi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Kaithi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Kthi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Kthi}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kannada.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kannada.js
new file mode 100644
index 0000000000..b1d8b971d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kannada.js
@@ -0,0 +1,98 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Kannada`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000C80, 0x000C8C],
+ [0x000C8E, 0x000C90],
+ [0x000C92, 0x000CA8],
+ [0x000CAA, 0x000CB3],
+ [0x000CB5, 0x000CB9],
+ [0x000CBC, 0x000CC4],
+ [0x000CC6, 0x000CC8],
+ [0x000CCA, 0x000CCD],
+ [0x000CD5, 0x000CD6],
+ [0x000CDD, 0x000CDE],
+ [0x000CE0, 0x000CE3],
+ [0x000CE6, 0x000CEF],
+ [0x000CF1, 0x000CF3]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Kannada}+$/u,
+ matchSymbols,
+ "\\p{Script=Kannada}"
+);
+testPropertyEscapes(
+ /^\p{Script=Knda}+$/u,
+ matchSymbols,
+ "\\p{Script=Knda}"
+);
+testPropertyEscapes(
+ /^\p{sc=Kannada}+$/u,
+ matchSymbols,
+ "\\p{sc=Kannada}"
+);
+testPropertyEscapes(
+ /^\p{sc=Knda}+$/u,
+ matchSymbols,
+ "\\p{sc=Knda}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000C8D,
+ 0x000C91,
+ 0x000CA9,
+ 0x000CB4,
+ 0x000CC5,
+ 0x000CC9,
+ 0x000CDF,
+ 0x000CF0
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000C7F],
+ [0x000CBA, 0x000CBB],
+ [0x000CCE, 0x000CD4],
+ [0x000CD7, 0x000CDC],
+ [0x000CE4, 0x000CE5],
+ [0x000CF4, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Kannada}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Kannada}"
+);
+testPropertyEscapes(
+ /^\P{Script=Knda}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Knda}"
+);
+testPropertyEscapes(
+ /^\P{sc=Kannada}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Kannada}"
+);
+testPropertyEscapes(
+ /^\P{sc=Knda}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Knda}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Katakana.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Katakana.js
new file mode 100644
index 0000000000..2cd48323a6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Katakana.js
@@ -0,0 +1,101 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Katakana`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x01B000,
+ 0x01B155
+ ],
+ ranges: [
+ [0x0030A1, 0x0030FA],
+ [0x0030FD, 0x0030FF],
+ [0x0031F0, 0x0031FF],
+ [0x0032D0, 0x0032FE],
+ [0x003300, 0x003357],
+ [0x00FF66, 0x00FF6F],
+ [0x00FF71, 0x00FF9D],
+ [0x01AFF0, 0x01AFF3],
+ [0x01AFF5, 0x01AFFB],
+ [0x01AFFD, 0x01AFFE],
+ [0x01B120, 0x01B122],
+ [0x01B164, 0x01B167]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Katakana}+$/u,
+ matchSymbols,
+ "\\p{Script=Katakana}"
+);
+testPropertyEscapes(
+ /^\p{Script=Kana}+$/u,
+ matchSymbols,
+ "\\p{Script=Kana}"
+);
+testPropertyEscapes(
+ /^\p{sc=Katakana}+$/u,
+ matchSymbols,
+ "\\p{sc=Katakana}"
+);
+testPropertyEscapes(
+ /^\p{sc=Kana}+$/u,
+ matchSymbols,
+ "\\p{sc=Kana}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0032FF,
+ 0x00FF70,
+ 0x01AFF4,
+ 0x01AFFC,
+ 0x01AFFF
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0030A0],
+ [0x0030FB, 0x0030FC],
+ [0x003100, 0x0031EF],
+ [0x003200, 0x0032CF],
+ [0x003358, 0x00DBFF],
+ [0x00E000, 0x00FF65],
+ [0x00FF9E, 0x01AFEF],
+ [0x01B001, 0x01B11F],
+ [0x01B123, 0x01B154],
+ [0x01B156, 0x01B163],
+ [0x01B168, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Katakana}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Katakana}"
+);
+testPropertyEscapes(
+ /^\P{Script=Kana}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Kana}"
+);
+testPropertyEscapes(
+ /^\P{sc=Katakana}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Katakana}"
+);
+testPropertyEscapes(
+ /^\P{sc=Kana}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Kana}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kawi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kawi.js
new file mode 100644
index 0000000000..2beda7cd49
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kawi.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Kawi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011F00, 0x011F10],
+ [0x011F12, 0x011F3A],
+ [0x011F3E, 0x011F59]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Kawi}+$/u,
+ matchSymbols,
+ "\\p{Script=Kawi}"
+);
+testPropertyEscapes(
+ /^\p{Script=Kawi}+$/u,
+ matchSymbols,
+ "\\p{Script=Kawi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Kawi}+$/u,
+ matchSymbols,
+ "\\p{sc=Kawi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Kawi}+$/u,
+ matchSymbols,
+ "\\p{sc=Kawi}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011F11
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x011EFF],
+ [0x011F3B, 0x011F3D],
+ [0x011F5A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Kawi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Kawi}"
+);
+testPropertyEscapes(
+ /^\P{Script=Kawi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Kawi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Kawi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Kawi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Kawi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Kawi}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kayah_Li.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kayah_Li.js
new file mode 100644
index 0000000000..c04122326c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kayah_Li.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Kayah_Li`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00A92F
+ ],
+ ranges: [
+ [0x00A900, 0x00A92D]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Kayah_Li}+$/u,
+ matchSymbols,
+ "\\p{Script=Kayah_Li}"
+);
+testPropertyEscapes(
+ /^\p{Script=Kali}+$/u,
+ matchSymbols,
+ "\\p{Script=Kali}"
+);
+testPropertyEscapes(
+ /^\p{sc=Kayah_Li}+$/u,
+ matchSymbols,
+ "\\p{sc=Kayah_Li}"
+);
+testPropertyEscapes(
+ /^\p{sc=Kali}+$/u,
+ matchSymbols,
+ "\\p{sc=Kali}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00A92E
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A8FF],
+ [0x00A930, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Kayah_Li}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Kayah_Li}"
+);
+testPropertyEscapes(
+ /^\P{Script=Kali}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Kali}"
+);
+testPropertyEscapes(
+ /^\P{sc=Kayah_Li}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Kayah_Li}"
+);
+testPropertyEscapes(
+ /^\P{sc=Kali}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Kali}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kharoshthi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kharoshthi.js
new file mode 100644
index 0000000000..6a32e3dcd0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Kharoshthi.js
@@ -0,0 +1,88 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Kharoshthi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010A00, 0x010A03],
+ [0x010A05, 0x010A06],
+ [0x010A0C, 0x010A13],
+ [0x010A15, 0x010A17],
+ [0x010A19, 0x010A35],
+ [0x010A38, 0x010A3A],
+ [0x010A3F, 0x010A48],
+ [0x010A50, 0x010A58]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Kharoshthi}+$/u,
+ matchSymbols,
+ "\\p{Script=Kharoshthi}"
+);
+testPropertyEscapes(
+ /^\p{Script=Khar}+$/u,
+ matchSymbols,
+ "\\p{Script=Khar}"
+);
+testPropertyEscapes(
+ /^\p{sc=Kharoshthi}+$/u,
+ matchSymbols,
+ "\\p{sc=Kharoshthi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Khar}+$/u,
+ matchSymbols,
+ "\\p{sc=Khar}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x010A04,
+ 0x010A14,
+ 0x010A18
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0109FF],
+ [0x010A07, 0x010A0B],
+ [0x010A36, 0x010A37],
+ [0x010A3B, 0x010A3E],
+ [0x010A49, 0x010A4F],
+ [0x010A59, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Kharoshthi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Kharoshthi}"
+);
+testPropertyEscapes(
+ /^\P{Script=Khar}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Khar}"
+);
+testPropertyEscapes(
+ /^\P{sc=Kharoshthi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Kharoshthi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Khar}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Khar}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Khitan_Small_Script.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Khitan_Small_Script.js
new file mode 100644
index 0000000000..887ba09cb6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Khitan_Small_Script.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Khitan_Small_Script`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x016FE4
+ ],
+ ranges: [
+ [0x018B00, 0x018CD5]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Khitan_Small_Script}+$/u,
+ matchSymbols,
+ "\\p{Script=Khitan_Small_Script}"
+);
+testPropertyEscapes(
+ /^\p{Script=Kits}+$/u,
+ matchSymbols,
+ "\\p{Script=Kits}"
+);
+testPropertyEscapes(
+ /^\p{sc=Khitan_Small_Script}+$/u,
+ matchSymbols,
+ "\\p{sc=Khitan_Small_Script}"
+);
+testPropertyEscapes(
+ /^\p{sc=Kits}+$/u,
+ matchSymbols,
+ "\\p{sc=Kits}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016FE3],
+ [0x016FE5, 0x018AFF],
+ [0x018CD6, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Khitan_Small_Script}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Khitan_Small_Script}"
+);
+testPropertyEscapes(
+ /^\P{Script=Kits}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Kits}"
+);
+testPropertyEscapes(
+ /^\P{sc=Khitan_Small_Script}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Khitan_Small_Script}"
+);
+testPropertyEscapes(
+ /^\P{sc=Kits}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Kits}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Khmer.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Khmer.js
new file mode 100644
index 0000000000..debaf4246c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Khmer.js
@@ -0,0 +1,79 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Khmer`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001780, 0x0017DD],
+ [0x0017E0, 0x0017E9],
+ [0x0017F0, 0x0017F9],
+ [0x0019E0, 0x0019FF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Khmer}+$/u,
+ matchSymbols,
+ "\\p{Script=Khmer}"
+);
+testPropertyEscapes(
+ /^\p{Script=Khmr}+$/u,
+ matchSymbols,
+ "\\p{Script=Khmr}"
+);
+testPropertyEscapes(
+ /^\p{sc=Khmer}+$/u,
+ matchSymbols,
+ "\\p{sc=Khmer}"
+);
+testPropertyEscapes(
+ /^\p{sc=Khmr}+$/u,
+ matchSymbols,
+ "\\p{sc=Khmr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00177F],
+ [0x0017DE, 0x0017DF],
+ [0x0017EA, 0x0017EF],
+ [0x0017FA, 0x0019DF],
+ [0x001A00, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Khmer}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Khmer}"
+);
+testPropertyEscapes(
+ /^\P{Script=Khmr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Khmr}"
+);
+testPropertyEscapes(
+ /^\P{sc=Khmer}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Khmer}"
+);
+testPropertyEscapes(
+ /^\P{sc=Khmr}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Khmr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Khojki.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Khojki.js
new file mode 100644
index 0000000000..d6badf66b8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Khojki.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Khojki`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011200, 0x011211],
+ [0x011213, 0x011241]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Khojki}+$/u,
+ matchSymbols,
+ "\\p{Script=Khojki}"
+);
+testPropertyEscapes(
+ /^\p{Script=Khoj}+$/u,
+ matchSymbols,
+ "\\p{Script=Khoj}"
+);
+testPropertyEscapes(
+ /^\p{sc=Khojki}+$/u,
+ matchSymbols,
+ "\\p{sc=Khojki}"
+);
+testPropertyEscapes(
+ /^\p{sc=Khoj}+$/u,
+ matchSymbols,
+ "\\p{sc=Khoj}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011212
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0111FF],
+ [0x011242, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Khojki}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Khojki}"
+);
+testPropertyEscapes(
+ /^\P{Script=Khoj}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Khoj}"
+);
+testPropertyEscapes(
+ /^\P{sc=Khojki}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Khojki}"
+);
+testPropertyEscapes(
+ /^\P{sc=Khoj}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Khoj}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Khudawadi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Khudawadi.js
new file mode 100644
index 0000000000..4292815a8e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Khudawadi.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Khudawadi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0112B0, 0x0112EA],
+ [0x0112F0, 0x0112F9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Khudawadi}+$/u,
+ matchSymbols,
+ "\\p{Script=Khudawadi}"
+);
+testPropertyEscapes(
+ /^\p{Script=Sind}+$/u,
+ matchSymbols,
+ "\\p{Script=Sind}"
+);
+testPropertyEscapes(
+ /^\p{sc=Khudawadi}+$/u,
+ matchSymbols,
+ "\\p{sc=Khudawadi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Sind}+$/u,
+ matchSymbols,
+ "\\p{sc=Sind}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0112AF],
+ [0x0112EB, 0x0112EF],
+ [0x0112FA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Khudawadi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Khudawadi}"
+);
+testPropertyEscapes(
+ /^\P{Script=Sind}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Sind}"
+);
+testPropertyEscapes(
+ /^\P{sc=Khudawadi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Khudawadi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Sind}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Sind}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lao.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lao.js
new file mode 100644
index 0000000000..a331481acc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lao.js
@@ -0,0 +1,95 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Lao`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000E84,
+ 0x000EA5,
+ 0x000EC6
+ ],
+ ranges: [
+ [0x000E81, 0x000E82],
+ [0x000E86, 0x000E8A],
+ [0x000E8C, 0x000EA3],
+ [0x000EA7, 0x000EBD],
+ [0x000EC0, 0x000EC4],
+ [0x000EC8, 0x000ECE],
+ [0x000ED0, 0x000ED9],
+ [0x000EDC, 0x000EDF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Lao}+$/u,
+ matchSymbols,
+ "\\p{Script=Lao}"
+);
+testPropertyEscapes(
+ /^\p{Script=Laoo}+$/u,
+ matchSymbols,
+ "\\p{Script=Laoo}"
+);
+testPropertyEscapes(
+ /^\p{sc=Lao}+$/u,
+ matchSymbols,
+ "\\p{sc=Lao}"
+);
+testPropertyEscapes(
+ /^\p{sc=Laoo}+$/u,
+ matchSymbols,
+ "\\p{sc=Laoo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000E83,
+ 0x000E85,
+ 0x000E8B,
+ 0x000EA4,
+ 0x000EA6,
+ 0x000EC5,
+ 0x000EC7,
+ 0x000ECF
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000E80],
+ [0x000EBE, 0x000EBF],
+ [0x000EDA, 0x000EDB],
+ [0x000EE0, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Lao}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Lao}"
+);
+testPropertyEscapes(
+ /^\P{Script=Laoo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Laoo}"
+);
+testPropertyEscapes(
+ /^\P{sc=Lao}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Lao}"
+);
+testPropertyEscapes(
+ /^\P{sc=Laoo}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Laoo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Latin.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Latin.js
new file mode 100644
index 0000000000..2f111d0028
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Latin.js
@@ -0,0 +1,151 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Latin`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000AA,
+ 0x0000BA,
+ 0x002071,
+ 0x00207F,
+ 0x002132,
+ 0x00214E,
+ 0x00A7D3
+ ],
+ ranges: [
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000F6],
+ [0x0000F8, 0x0002B8],
+ [0x0002E0, 0x0002E4],
+ [0x001D00, 0x001D25],
+ [0x001D2C, 0x001D5C],
+ [0x001D62, 0x001D65],
+ [0x001D6B, 0x001D77],
+ [0x001D79, 0x001DBE],
+ [0x001E00, 0x001EFF],
+ [0x002090, 0x00209C],
+ [0x00212A, 0x00212B],
+ [0x002160, 0x002188],
+ [0x002C60, 0x002C7F],
+ [0x00A722, 0x00A787],
+ [0x00A78B, 0x00A7CA],
+ [0x00A7D0, 0x00A7D1],
+ [0x00A7D5, 0x00A7D9],
+ [0x00A7F2, 0x00A7FF],
+ [0x00AB30, 0x00AB5A],
+ [0x00AB5C, 0x00AB64],
+ [0x00AB66, 0x00AB69],
+ [0x00FB00, 0x00FB06],
+ [0x00FF21, 0x00FF3A],
+ [0x00FF41, 0x00FF5A],
+ [0x010780, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x01DF00, 0x01DF1E],
+ [0x01DF25, 0x01DF2A]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Latin}+$/u,
+ matchSymbols,
+ "\\p{Script=Latin}"
+);
+testPropertyEscapes(
+ /^\p{Script=Latn}+$/u,
+ matchSymbols,
+ "\\p{Script=Latn}"
+);
+testPropertyEscapes(
+ /^\p{sc=Latin}+$/u,
+ matchSymbols,
+ "\\p{sc=Latin}"
+);
+testPropertyEscapes(
+ /^\p{sc=Latn}+$/u,
+ matchSymbols,
+ "\\p{sc=Latn}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000D7,
+ 0x0000F7,
+ 0x001D78,
+ 0x00A7D2,
+ 0x00A7D4,
+ 0x00AB5B,
+ 0x00AB65,
+ 0x010786,
+ 0x0107B1
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000040],
+ [0x00005B, 0x000060],
+ [0x00007B, 0x0000A9],
+ [0x0000AB, 0x0000B9],
+ [0x0000BB, 0x0000BF],
+ [0x0002B9, 0x0002DF],
+ [0x0002E5, 0x001CFF],
+ [0x001D26, 0x001D2B],
+ [0x001D5D, 0x001D61],
+ [0x001D66, 0x001D6A],
+ [0x001DBF, 0x001DFF],
+ [0x001F00, 0x002070],
+ [0x002072, 0x00207E],
+ [0x002080, 0x00208F],
+ [0x00209D, 0x002129],
+ [0x00212C, 0x002131],
+ [0x002133, 0x00214D],
+ [0x00214F, 0x00215F],
+ [0x002189, 0x002C5F],
+ [0x002C80, 0x00A721],
+ [0x00A788, 0x00A78A],
+ [0x00A7CB, 0x00A7CF],
+ [0x00A7DA, 0x00A7F1],
+ [0x00A800, 0x00AB2F],
+ [0x00AB6A, 0x00DBFF],
+ [0x00E000, 0x00FAFF],
+ [0x00FB07, 0x00FF20],
+ [0x00FF3B, 0x00FF40],
+ [0x00FF5B, 0x01077F],
+ [0x0107BB, 0x01DEFF],
+ [0x01DF1F, 0x01DF24],
+ [0x01DF2B, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Latin}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Latin}"
+);
+testPropertyEscapes(
+ /^\P{Script=Latn}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Latn}"
+);
+testPropertyEscapes(
+ /^\P{sc=Latin}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Latin}"
+);
+testPropertyEscapes(
+ /^\P{sc=Latn}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Latn}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lepcha.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lepcha.js
new file mode 100644
index 0000000000..e57c1d2389
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lepcha.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Lepcha`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001C00, 0x001C37],
+ [0x001C3B, 0x001C49],
+ [0x001C4D, 0x001C4F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Lepcha}+$/u,
+ matchSymbols,
+ "\\p{Script=Lepcha}"
+);
+testPropertyEscapes(
+ /^\p{Script=Lepc}+$/u,
+ matchSymbols,
+ "\\p{Script=Lepc}"
+);
+testPropertyEscapes(
+ /^\p{sc=Lepcha}+$/u,
+ matchSymbols,
+ "\\p{sc=Lepcha}"
+);
+testPropertyEscapes(
+ /^\p{sc=Lepc}+$/u,
+ matchSymbols,
+ "\\p{sc=Lepc}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x001BFF],
+ [0x001C38, 0x001C3A],
+ [0x001C4A, 0x001C4C],
+ [0x001C50, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Lepcha}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Lepcha}"
+);
+testPropertyEscapes(
+ /^\P{Script=Lepc}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Lepc}"
+);
+testPropertyEscapes(
+ /^\P{sc=Lepcha}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Lepcha}"
+);
+testPropertyEscapes(
+ /^\P{sc=Lepc}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Lepc}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Limbu.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Limbu.js
new file mode 100644
index 0000000000..b17ad9a185
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Limbu.js
@@ -0,0 +1,83 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Limbu`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x001940
+ ],
+ ranges: [
+ [0x001900, 0x00191E],
+ [0x001920, 0x00192B],
+ [0x001930, 0x00193B],
+ [0x001944, 0x00194F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Limbu}+$/u,
+ matchSymbols,
+ "\\p{Script=Limbu}"
+);
+testPropertyEscapes(
+ /^\p{Script=Limb}+$/u,
+ matchSymbols,
+ "\\p{Script=Limb}"
+);
+testPropertyEscapes(
+ /^\p{sc=Limbu}+$/u,
+ matchSymbols,
+ "\\p{sc=Limbu}"
+);
+testPropertyEscapes(
+ /^\p{sc=Limb}+$/u,
+ matchSymbols,
+ "\\p{sc=Limb}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00191F
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0018FF],
+ [0x00192C, 0x00192F],
+ [0x00193C, 0x00193F],
+ [0x001941, 0x001943],
+ [0x001950, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Limbu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Limbu}"
+);
+testPropertyEscapes(
+ /^\P{Script=Limb}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Limb}"
+);
+testPropertyEscapes(
+ /^\P{sc=Limbu}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Limbu}"
+);
+testPropertyEscapes(
+ /^\P{sc=Limb}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Limb}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Linear_A.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Linear_A.js
new file mode 100644
index 0000000000..2c8b2fe71b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Linear_A.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Linear_A`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010600, 0x010736],
+ [0x010740, 0x010755],
+ [0x010760, 0x010767]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Linear_A}+$/u,
+ matchSymbols,
+ "\\p{Script=Linear_A}"
+);
+testPropertyEscapes(
+ /^\p{Script=Lina}+$/u,
+ matchSymbols,
+ "\\p{Script=Lina}"
+);
+testPropertyEscapes(
+ /^\p{sc=Linear_A}+$/u,
+ matchSymbols,
+ "\\p{sc=Linear_A}"
+);
+testPropertyEscapes(
+ /^\p{sc=Lina}+$/u,
+ matchSymbols,
+ "\\p{sc=Lina}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0105FF],
+ [0x010737, 0x01073F],
+ [0x010756, 0x01075F],
+ [0x010768, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Linear_A}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Linear_A}"
+);
+testPropertyEscapes(
+ /^\P{Script=Lina}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Lina}"
+);
+testPropertyEscapes(
+ /^\P{sc=Linear_A}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Linear_A}"
+);
+testPropertyEscapes(
+ /^\P{sc=Lina}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Lina}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Linear_B.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Linear_B.js
new file mode 100644
index 0000000000..1fc5856578
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Linear_B.js
@@ -0,0 +1,86 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Linear_B`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010000, 0x01000B],
+ [0x01000D, 0x010026],
+ [0x010028, 0x01003A],
+ [0x01003C, 0x01003D],
+ [0x01003F, 0x01004D],
+ [0x010050, 0x01005D],
+ [0x010080, 0x0100FA]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Linear_B}+$/u,
+ matchSymbols,
+ "\\p{Script=Linear_B}"
+);
+testPropertyEscapes(
+ /^\p{Script=Linb}+$/u,
+ matchSymbols,
+ "\\p{Script=Linb}"
+);
+testPropertyEscapes(
+ /^\p{sc=Linear_B}+$/u,
+ matchSymbols,
+ "\\p{sc=Linear_B}"
+);
+testPropertyEscapes(
+ /^\p{sc=Linb}+$/u,
+ matchSymbols,
+ "\\p{sc=Linb}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x01000C,
+ 0x010027,
+ 0x01003B,
+ 0x01003E
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x00FFFF],
+ [0x01004E, 0x01004F],
+ [0x01005E, 0x01007F],
+ [0x0100FB, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Linear_B}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Linear_B}"
+);
+testPropertyEscapes(
+ /^\P{Script=Linb}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Linb}"
+);
+testPropertyEscapes(
+ /^\P{sc=Linear_B}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Linear_B}"
+);
+testPropertyEscapes(
+ /^\P{sc=Linb}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Linb}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lisu.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lisu.js
new file mode 100644
index 0000000000..51f630238c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lisu.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Lisu`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x011FB0
+ ],
+ ranges: [
+ [0x00A4D0, 0x00A4FF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Lisu}+$/u,
+ matchSymbols,
+ "\\p{Script=Lisu}"
+);
+testPropertyEscapes(
+ /^\p{Script=Lisu}+$/u,
+ matchSymbols,
+ "\\p{Script=Lisu}"
+);
+testPropertyEscapes(
+ /^\p{sc=Lisu}+$/u,
+ matchSymbols,
+ "\\p{sc=Lisu}"
+);
+testPropertyEscapes(
+ /^\p{sc=Lisu}+$/u,
+ matchSymbols,
+ "\\p{sc=Lisu}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A4CF],
+ [0x00A500, 0x00DBFF],
+ [0x00E000, 0x011FAF],
+ [0x011FB1, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Lisu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Lisu}"
+);
+testPropertyEscapes(
+ /^\P{Script=Lisu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Lisu}"
+);
+testPropertyEscapes(
+ /^\P{sc=Lisu}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Lisu}"
+);
+testPropertyEscapes(
+ /^\P{sc=Lisu}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Lisu}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lycian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lycian.js
new file mode 100644
index 0000000000..84cc3796fa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lycian.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Lycian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010280, 0x01029C]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Lycian}+$/u,
+ matchSymbols,
+ "\\p{Script=Lycian}"
+);
+testPropertyEscapes(
+ /^\p{Script=Lyci}+$/u,
+ matchSymbols,
+ "\\p{Script=Lyci}"
+);
+testPropertyEscapes(
+ /^\p{sc=Lycian}+$/u,
+ matchSymbols,
+ "\\p{sc=Lycian}"
+);
+testPropertyEscapes(
+ /^\p{sc=Lyci}+$/u,
+ matchSymbols,
+ "\\p{sc=Lyci}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01027F],
+ [0x01029D, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Lycian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Lycian}"
+);
+testPropertyEscapes(
+ /^\P{Script=Lyci}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Lyci}"
+);
+testPropertyEscapes(
+ /^\P{sc=Lycian}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Lycian}"
+);
+testPropertyEscapes(
+ /^\P{sc=Lyci}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Lyci}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lydian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lydian.js
new file mode 100644
index 0000000000..a41ac0d887
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Lydian.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Lydian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x01093F
+ ],
+ ranges: [
+ [0x010920, 0x010939]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Lydian}+$/u,
+ matchSymbols,
+ "\\p{Script=Lydian}"
+);
+testPropertyEscapes(
+ /^\p{Script=Lydi}+$/u,
+ matchSymbols,
+ "\\p{Script=Lydi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Lydian}+$/u,
+ matchSymbols,
+ "\\p{sc=Lydian}"
+);
+testPropertyEscapes(
+ /^\p{sc=Lydi}+$/u,
+ matchSymbols,
+ "\\p{sc=Lydi}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01091F],
+ [0x01093A, 0x01093E],
+ [0x010940, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Lydian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Lydian}"
+);
+testPropertyEscapes(
+ /^\P{Script=Lydi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Lydi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Lydian}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Lydian}"
+);
+testPropertyEscapes(
+ /^\P{sc=Lydi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Lydi}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mahajani.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mahajani.js
new file mode 100644
index 0000000000..f4d7911a80
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mahajani.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Mahajani`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011150, 0x011176]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Mahajani}+$/u,
+ matchSymbols,
+ "\\p{Script=Mahajani}"
+);
+testPropertyEscapes(
+ /^\p{Script=Mahj}+$/u,
+ matchSymbols,
+ "\\p{Script=Mahj}"
+);
+testPropertyEscapes(
+ /^\p{sc=Mahajani}+$/u,
+ matchSymbols,
+ "\\p{sc=Mahajani}"
+);
+testPropertyEscapes(
+ /^\p{sc=Mahj}+$/u,
+ matchSymbols,
+ "\\p{sc=Mahj}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01114F],
+ [0x011177, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Mahajani}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Mahajani}"
+);
+testPropertyEscapes(
+ /^\P{Script=Mahj}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Mahj}"
+);
+testPropertyEscapes(
+ /^\P{sc=Mahajani}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Mahajani}"
+);
+testPropertyEscapes(
+ /^\P{sc=Mahj}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Mahj}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Makasar.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Makasar.js
new file mode 100644
index 0000000000..54f174239e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Makasar.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Makasar`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011EE0, 0x011EF8]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Makasar}+$/u,
+ matchSymbols,
+ "\\p{Script=Makasar}"
+);
+testPropertyEscapes(
+ /^\p{Script=Maka}+$/u,
+ matchSymbols,
+ "\\p{Script=Maka}"
+);
+testPropertyEscapes(
+ /^\p{sc=Makasar}+$/u,
+ matchSymbols,
+ "\\p{sc=Makasar}"
+);
+testPropertyEscapes(
+ /^\p{sc=Maka}+$/u,
+ matchSymbols,
+ "\\p{sc=Maka}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x011EDF],
+ [0x011EF9, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Makasar}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Makasar}"
+);
+testPropertyEscapes(
+ /^\P{Script=Maka}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Maka}"
+);
+testPropertyEscapes(
+ /^\P{sc=Makasar}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Makasar}"
+);
+testPropertyEscapes(
+ /^\P{sc=Maka}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Maka}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Malayalam.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Malayalam.js
new file mode 100644
index 0000000000..eb1171a75f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Malayalam.js
@@ -0,0 +1,86 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Malayalam`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000D00, 0x000D0C],
+ [0x000D0E, 0x000D10],
+ [0x000D12, 0x000D44],
+ [0x000D46, 0x000D48],
+ [0x000D4A, 0x000D4F],
+ [0x000D54, 0x000D63],
+ [0x000D66, 0x000D7F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Malayalam}+$/u,
+ matchSymbols,
+ "\\p{Script=Malayalam}"
+);
+testPropertyEscapes(
+ /^\p{Script=Mlym}+$/u,
+ matchSymbols,
+ "\\p{Script=Mlym}"
+);
+testPropertyEscapes(
+ /^\p{sc=Malayalam}+$/u,
+ matchSymbols,
+ "\\p{sc=Malayalam}"
+);
+testPropertyEscapes(
+ /^\p{sc=Mlym}+$/u,
+ matchSymbols,
+ "\\p{sc=Mlym}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000D0D,
+ 0x000D11,
+ 0x000D45,
+ 0x000D49
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000CFF],
+ [0x000D50, 0x000D53],
+ [0x000D64, 0x000D65],
+ [0x000D80, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Malayalam}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Malayalam}"
+);
+testPropertyEscapes(
+ /^\P{Script=Mlym}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Mlym}"
+);
+testPropertyEscapes(
+ /^\P{sc=Malayalam}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Malayalam}"
+);
+testPropertyEscapes(
+ /^\P{sc=Mlym}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Mlym}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mandaic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mandaic.js
new file mode 100644
index 0000000000..926c158f48
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mandaic.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Mandaic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00085E
+ ],
+ ranges: [
+ [0x000840, 0x00085B]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Mandaic}+$/u,
+ matchSymbols,
+ "\\p{Script=Mandaic}"
+);
+testPropertyEscapes(
+ /^\p{Script=Mand}+$/u,
+ matchSymbols,
+ "\\p{Script=Mand}"
+);
+testPropertyEscapes(
+ /^\p{sc=Mandaic}+$/u,
+ matchSymbols,
+ "\\p{sc=Mandaic}"
+);
+testPropertyEscapes(
+ /^\p{sc=Mand}+$/u,
+ matchSymbols,
+ "\\p{sc=Mand}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00083F],
+ [0x00085C, 0x00085D],
+ [0x00085F, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Mandaic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Mandaic}"
+);
+testPropertyEscapes(
+ /^\P{Script=Mand}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Mand}"
+);
+testPropertyEscapes(
+ /^\P{sc=Mandaic}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Mandaic}"
+);
+testPropertyEscapes(
+ /^\P{sc=Mand}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Mand}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Manichaean.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Manichaean.js
new file mode 100644
index 0000000000..1961193439
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Manichaean.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Manichaean`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010AC0, 0x010AE6],
+ [0x010AEB, 0x010AF6]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Manichaean}+$/u,
+ matchSymbols,
+ "\\p{Script=Manichaean}"
+);
+testPropertyEscapes(
+ /^\p{Script=Mani}+$/u,
+ matchSymbols,
+ "\\p{Script=Mani}"
+);
+testPropertyEscapes(
+ /^\p{sc=Manichaean}+$/u,
+ matchSymbols,
+ "\\p{sc=Manichaean}"
+);
+testPropertyEscapes(
+ /^\p{sc=Mani}+$/u,
+ matchSymbols,
+ "\\p{sc=Mani}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010ABF],
+ [0x010AE7, 0x010AEA],
+ [0x010AF7, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Manichaean}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Manichaean}"
+);
+testPropertyEscapes(
+ /^\P{Script=Mani}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Mani}"
+);
+testPropertyEscapes(
+ /^\P{sc=Manichaean}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Manichaean}"
+);
+testPropertyEscapes(
+ /^\P{sc=Mani}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Mani}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Marchen.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Marchen.js
new file mode 100644
index 0000000000..ed82ce4f40
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Marchen.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Marchen`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011C70, 0x011C8F],
+ [0x011C92, 0x011CA7],
+ [0x011CA9, 0x011CB6]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Marchen}+$/u,
+ matchSymbols,
+ "\\p{Script=Marchen}"
+);
+testPropertyEscapes(
+ /^\p{Script=Marc}+$/u,
+ matchSymbols,
+ "\\p{Script=Marc}"
+);
+testPropertyEscapes(
+ /^\p{sc=Marchen}+$/u,
+ matchSymbols,
+ "\\p{sc=Marchen}"
+);
+testPropertyEscapes(
+ /^\p{sc=Marc}+$/u,
+ matchSymbols,
+ "\\p{sc=Marc}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011CA8
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x011C6F],
+ [0x011C90, 0x011C91],
+ [0x011CB7, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Marchen}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Marchen}"
+);
+testPropertyEscapes(
+ /^\P{Script=Marc}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Marc}"
+);
+testPropertyEscapes(
+ /^\P{sc=Marchen}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Marchen}"
+);
+testPropertyEscapes(
+ /^\P{sc=Marc}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Marc}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Masaram_Gondi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Masaram_Gondi.js
new file mode 100644
index 0000000000..d90ee4b729
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Masaram_Gondi.js
@@ -0,0 +1,87 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Masaram_Gondi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x011D3A
+ ],
+ ranges: [
+ [0x011D00, 0x011D06],
+ [0x011D08, 0x011D09],
+ [0x011D0B, 0x011D36],
+ [0x011D3C, 0x011D3D],
+ [0x011D3F, 0x011D47],
+ [0x011D50, 0x011D59]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Masaram_Gondi}+$/u,
+ matchSymbols,
+ "\\p{Script=Masaram_Gondi}"
+);
+testPropertyEscapes(
+ /^\p{Script=Gonm}+$/u,
+ matchSymbols,
+ "\\p{Script=Gonm}"
+);
+testPropertyEscapes(
+ /^\p{sc=Masaram_Gondi}+$/u,
+ matchSymbols,
+ "\\p{sc=Masaram_Gondi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Gonm}+$/u,
+ matchSymbols,
+ "\\p{sc=Gonm}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011D07,
+ 0x011D0A,
+ 0x011D3B,
+ 0x011D3E
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x011CFF],
+ [0x011D37, 0x011D39],
+ [0x011D48, 0x011D4F],
+ [0x011D5A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Masaram_Gondi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Masaram_Gondi}"
+);
+testPropertyEscapes(
+ /^\P{Script=Gonm}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Gonm}"
+);
+testPropertyEscapes(
+ /^\P{sc=Masaram_Gondi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Masaram_Gondi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Gonm}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Gonm}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Medefaidrin.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Medefaidrin.js
new file mode 100644
index 0000000000..4b9a156ac1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Medefaidrin.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Medefaidrin`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x016E40, 0x016E9A]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Medefaidrin}+$/u,
+ matchSymbols,
+ "\\p{Script=Medefaidrin}"
+);
+testPropertyEscapes(
+ /^\p{Script=Medf}+$/u,
+ matchSymbols,
+ "\\p{Script=Medf}"
+);
+testPropertyEscapes(
+ /^\p{sc=Medefaidrin}+$/u,
+ matchSymbols,
+ "\\p{sc=Medefaidrin}"
+);
+testPropertyEscapes(
+ /^\p{sc=Medf}+$/u,
+ matchSymbols,
+ "\\p{sc=Medf}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016E3F],
+ [0x016E9B, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Medefaidrin}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Medefaidrin}"
+);
+testPropertyEscapes(
+ /^\P{Script=Medf}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Medf}"
+);
+testPropertyEscapes(
+ /^\P{sc=Medefaidrin}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Medefaidrin}"
+);
+testPropertyEscapes(
+ /^\P{sc=Medf}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Medf}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Meetei_Mayek.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Meetei_Mayek.js
new file mode 100644
index 0000000000..34991dadb0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Meetei_Mayek.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Meetei_Mayek`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00AAE0, 0x00AAF6],
+ [0x00ABC0, 0x00ABED],
+ [0x00ABF0, 0x00ABF9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Meetei_Mayek}+$/u,
+ matchSymbols,
+ "\\p{Script=Meetei_Mayek}"
+);
+testPropertyEscapes(
+ /^\p{Script=Mtei}+$/u,
+ matchSymbols,
+ "\\p{Script=Mtei}"
+);
+testPropertyEscapes(
+ /^\p{sc=Meetei_Mayek}+$/u,
+ matchSymbols,
+ "\\p{sc=Meetei_Mayek}"
+);
+testPropertyEscapes(
+ /^\p{sc=Mtei}+$/u,
+ matchSymbols,
+ "\\p{sc=Mtei}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00AADF],
+ [0x00AAF7, 0x00ABBF],
+ [0x00ABEE, 0x00ABEF],
+ [0x00ABFA, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Meetei_Mayek}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Meetei_Mayek}"
+);
+testPropertyEscapes(
+ /^\P{Script=Mtei}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Mtei}"
+);
+testPropertyEscapes(
+ /^\P{sc=Meetei_Mayek}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Meetei_Mayek}"
+);
+testPropertyEscapes(
+ /^\P{sc=Mtei}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Mtei}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mende_Kikakui.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mende_Kikakui.js
new file mode 100644
index 0000000000..8bd2621d56
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mende_Kikakui.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Mende_Kikakui`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x01E800, 0x01E8C4],
+ [0x01E8C7, 0x01E8D6]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Mende_Kikakui}+$/u,
+ matchSymbols,
+ "\\p{Script=Mende_Kikakui}"
+);
+testPropertyEscapes(
+ /^\p{Script=Mend}+$/u,
+ matchSymbols,
+ "\\p{Script=Mend}"
+);
+testPropertyEscapes(
+ /^\p{sc=Mende_Kikakui}+$/u,
+ matchSymbols,
+ "\\p{sc=Mende_Kikakui}"
+);
+testPropertyEscapes(
+ /^\p{sc=Mend}+$/u,
+ matchSymbols,
+ "\\p{sc=Mend}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01E7FF],
+ [0x01E8C5, 0x01E8C6],
+ [0x01E8D7, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Mende_Kikakui}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Mende_Kikakui}"
+);
+testPropertyEscapes(
+ /^\P{Script=Mend}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Mend}"
+);
+testPropertyEscapes(
+ /^\P{sc=Mende_Kikakui}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Mende_Kikakui}"
+);
+testPropertyEscapes(
+ /^\P{sc=Mend}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Mend}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Meroitic_Cursive.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Meroitic_Cursive.js
new file mode 100644
index 0000000000..6da03a2b0c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Meroitic_Cursive.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Meroitic_Cursive`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0109A0, 0x0109B7],
+ [0x0109BC, 0x0109CF],
+ [0x0109D2, 0x0109FF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Meroitic_Cursive}+$/u,
+ matchSymbols,
+ "\\p{Script=Meroitic_Cursive}"
+);
+testPropertyEscapes(
+ /^\p{Script=Merc}+$/u,
+ matchSymbols,
+ "\\p{Script=Merc}"
+);
+testPropertyEscapes(
+ /^\p{sc=Meroitic_Cursive}+$/u,
+ matchSymbols,
+ "\\p{sc=Meroitic_Cursive}"
+);
+testPropertyEscapes(
+ /^\p{sc=Merc}+$/u,
+ matchSymbols,
+ "\\p{sc=Merc}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01099F],
+ [0x0109B8, 0x0109BB],
+ [0x0109D0, 0x0109D1],
+ [0x010A00, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Meroitic_Cursive}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Meroitic_Cursive}"
+);
+testPropertyEscapes(
+ /^\P{Script=Merc}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Merc}"
+);
+testPropertyEscapes(
+ /^\P{sc=Meroitic_Cursive}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Meroitic_Cursive}"
+);
+testPropertyEscapes(
+ /^\P{sc=Merc}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Merc}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Meroitic_Hieroglyphs.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Meroitic_Hieroglyphs.js
new file mode 100644
index 0000000000..f97517114e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Meroitic_Hieroglyphs.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Meroitic_Hieroglyphs`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010980, 0x01099F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Meroitic_Hieroglyphs}+$/u,
+ matchSymbols,
+ "\\p{Script=Meroitic_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\p{Script=Mero}+$/u,
+ matchSymbols,
+ "\\p{Script=Mero}"
+);
+testPropertyEscapes(
+ /^\p{sc=Meroitic_Hieroglyphs}+$/u,
+ matchSymbols,
+ "\\p{sc=Meroitic_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\p{sc=Mero}+$/u,
+ matchSymbols,
+ "\\p{sc=Mero}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01097F],
+ [0x0109A0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Meroitic_Hieroglyphs}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Meroitic_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\P{Script=Mero}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Mero}"
+);
+testPropertyEscapes(
+ /^\P{sc=Meroitic_Hieroglyphs}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Meroitic_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\P{sc=Mero}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Mero}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Miao.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Miao.js
new file mode 100644
index 0000000000..4114be7472
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Miao.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Miao`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x016F00, 0x016F4A],
+ [0x016F4F, 0x016F87],
+ [0x016F8F, 0x016F9F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Miao}+$/u,
+ matchSymbols,
+ "\\p{Script=Miao}"
+);
+testPropertyEscapes(
+ /^\p{Script=Plrd}+$/u,
+ matchSymbols,
+ "\\p{Script=Plrd}"
+);
+testPropertyEscapes(
+ /^\p{sc=Miao}+$/u,
+ matchSymbols,
+ "\\p{sc=Miao}"
+);
+testPropertyEscapes(
+ /^\p{sc=Plrd}+$/u,
+ matchSymbols,
+ "\\p{sc=Plrd}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016EFF],
+ [0x016F4B, 0x016F4E],
+ [0x016F88, 0x016F8E],
+ [0x016FA0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Miao}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Miao}"
+);
+testPropertyEscapes(
+ /^\P{Script=Plrd}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Plrd}"
+);
+testPropertyEscapes(
+ /^\P{sc=Miao}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Miao}"
+);
+testPropertyEscapes(
+ /^\P{sc=Plrd}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Plrd}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Modi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Modi.js
new file mode 100644
index 0000000000..d8c8c30611
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Modi.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Modi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011600, 0x011644],
+ [0x011650, 0x011659]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Modi}+$/u,
+ matchSymbols,
+ "\\p{Script=Modi}"
+);
+testPropertyEscapes(
+ /^\p{Script=Modi}+$/u,
+ matchSymbols,
+ "\\p{Script=Modi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Modi}+$/u,
+ matchSymbols,
+ "\\p{sc=Modi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Modi}+$/u,
+ matchSymbols,
+ "\\p{sc=Modi}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0115FF],
+ [0x011645, 0x01164F],
+ [0x01165A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Modi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Modi}"
+);
+testPropertyEscapes(
+ /^\P{Script=Modi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Modi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Modi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Modi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Modi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Modi}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mongolian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mongolian.js
new file mode 100644
index 0000000000..8b31239384
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mongolian.js
@@ -0,0 +1,85 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Mongolian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x001804
+ ],
+ ranges: [
+ [0x001800, 0x001801],
+ [0x001806, 0x001819],
+ [0x001820, 0x001878],
+ [0x001880, 0x0018AA],
+ [0x011660, 0x01166C]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Mongolian}+$/u,
+ matchSymbols,
+ "\\p{Script=Mongolian}"
+);
+testPropertyEscapes(
+ /^\p{Script=Mong}+$/u,
+ matchSymbols,
+ "\\p{Script=Mong}"
+);
+testPropertyEscapes(
+ /^\p{sc=Mongolian}+$/u,
+ matchSymbols,
+ "\\p{sc=Mongolian}"
+);
+testPropertyEscapes(
+ /^\p{sc=Mong}+$/u,
+ matchSymbols,
+ "\\p{sc=Mong}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x001805
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0017FF],
+ [0x001802, 0x001803],
+ [0x00181A, 0x00181F],
+ [0x001879, 0x00187F],
+ [0x0018AB, 0x00DBFF],
+ [0x00E000, 0x01165F],
+ [0x01166D, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Mongolian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Mongolian}"
+);
+testPropertyEscapes(
+ /^\P{Script=Mong}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Mong}"
+);
+testPropertyEscapes(
+ /^\P{sc=Mongolian}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Mongolian}"
+);
+testPropertyEscapes(
+ /^\P{sc=Mong}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Mong}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mro.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mro.js
new file mode 100644
index 0000000000..ff46f910cb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Mro.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Mro`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x016A40, 0x016A5E],
+ [0x016A60, 0x016A69],
+ [0x016A6E, 0x016A6F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Mro}+$/u,
+ matchSymbols,
+ "\\p{Script=Mro}"
+);
+testPropertyEscapes(
+ /^\p{Script=Mroo}+$/u,
+ matchSymbols,
+ "\\p{Script=Mroo}"
+);
+testPropertyEscapes(
+ /^\p{sc=Mro}+$/u,
+ matchSymbols,
+ "\\p{sc=Mro}"
+);
+testPropertyEscapes(
+ /^\p{sc=Mroo}+$/u,
+ matchSymbols,
+ "\\p{sc=Mroo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x016A5F
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016A3F],
+ [0x016A6A, 0x016A6D],
+ [0x016A70, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Mro}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Mro}"
+);
+testPropertyEscapes(
+ /^\P{Script=Mroo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Mroo}"
+);
+testPropertyEscapes(
+ /^\P{sc=Mro}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Mro}"
+);
+testPropertyEscapes(
+ /^\P{sc=Mroo}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Mroo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Multani.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Multani.js
new file mode 100644
index 0000000000..509d5b32e6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Multani.js
@@ -0,0 +1,83 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Multani`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x011288
+ ],
+ ranges: [
+ [0x011280, 0x011286],
+ [0x01128A, 0x01128D],
+ [0x01128F, 0x01129D],
+ [0x01129F, 0x0112A9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Multani}+$/u,
+ matchSymbols,
+ "\\p{Script=Multani}"
+);
+testPropertyEscapes(
+ /^\p{Script=Mult}+$/u,
+ matchSymbols,
+ "\\p{Script=Mult}"
+);
+testPropertyEscapes(
+ /^\p{sc=Multani}+$/u,
+ matchSymbols,
+ "\\p{sc=Multani}"
+);
+testPropertyEscapes(
+ /^\p{sc=Mult}+$/u,
+ matchSymbols,
+ "\\p{sc=Mult}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011287,
+ 0x011289,
+ 0x01128E,
+ 0x01129E
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01127F],
+ [0x0112AA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Multani}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Multani}"
+);
+testPropertyEscapes(
+ /^\P{Script=Mult}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Mult}"
+);
+testPropertyEscapes(
+ /^\P{sc=Multani}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Multani}"
+);
+testPropertyEscapes(
+ /^\P{sc=Mult}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Mult}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Myanmar.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Myanmar.js
new file mode 100644
index 0000000000..568bdc3b7e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Myanmar.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Myanmar`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001000, 0x00109F],
+ [0x00A9E0, 0x00A9FE],
+ [0x00AA60, 0x00AA7F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Myanmar}+$/u,
+ matchSymbols,
+ "\\p{Script=Myanmar}"
+);
+testPropertyEscapes(
+ /^\p{Script=Mymr}+$/u,
+ matchSymbols,
+ "\\p{Script=Mymr}"
+);
+testPropertyEscapes(
+ /^\p{sc=Myanmar}+$/u,
+ matchSymbols,
+ "\\p{sc=Myanmar}"
+);
+testPropertyEscapes(
+ /^\p{sc=Mymr}+$/u,
+ matchSymbols,
+ "\\p{sc=Mymr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000FFF],
+ [0x0010A0, 0x00A9DF],
+ [0x00A9FF, 0x00AA5F],
+ [0x00AA80, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Myanmar}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Myanmar}"
+);
+testPropertyEscapes(
+ /^\P{Script=Mymr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Mymr}"
+);
+testPropertyEscapes(
+ /^\P{sc=Myanmar}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Myanmar}"
+);
+testPropertyEscapes(
+ /^\P{sc=Mymr}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Mymr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nabataean.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nabataean.js
new file mode 100644
index 0000000000..510c02f509
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nabataean.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Nabataean`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010880, 0x01089E],
+ [0x0108A7, 0x0108AF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Nabataean}+$/u,
+ matchSymbols,
+ "\\p{Script=Nabataean}"
+);
+testPropertyEscapes(
+ /^\p{Script=Nbat}+$/u,
+ matchSymbols,
+ "\\p{Script=Nbat}"
+);
+testPropertyEscapes(
+ /^\p{sc=Nabataean}+$/u,
+ matchSymbols,
+ "\\p{sc=Nabataean}"
+);
+testPropertyEscapes(
+ /^\p{sc=Nbat}+$/u,
+ matchSymbols,
+ "\\p{sc=Nbat}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01087F],
+ [0x01089F, 0x0108A6],
+ [0x0108B0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Nabataean}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Nabataean}"
+);
+testPropertyEscapes(
+ /^\P{Script=Nbat}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Nbat}"
+);
+testPropertyEscapes(
+ /^\P{sc=Nabataean}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Nabataean}"
+);
+testPropertyEscapes(
+ /^\P{sc=Nbat}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Nbat}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nag_Mundari.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nag_Mundari.js
new file mode 100644
index 0000000000..2aa6b2c39c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nag_Mundari.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Nag_Mundari`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x01E4D0, 0x01E4F9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Nag_Mundari}+$/u,
+ matchSymbols,
+ "\\p{Script=Nag_Mundari}"
+);
+testPropertyEscapes(
+ /^\p{Script=Nagm}+$/u,
+ matchSymbols,
+ "\\p{Script=Nagm}"
+);
+testPropertyEscapes(
+ /^\p{sc=Nag_Mundari}+$/u,
+ matchSymbols,
+ "\\p{sc=Nag_Mundari}"
+);
+testPropertyEscapes(
+ /^\p{sc=Nagm}+$/u,
+ matchSymbols,
+ "\\p{sc=Nagm}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01E4CF],
+ [0x01E4FA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Nag_Mundari}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Nag_Mundari}"
+);
+testPropertyEscapes(
+ /^\P{Script=Nagm}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Nagm}"
+);
+testPropertyEscapes(
+ /^\P{sc=Nag_Mundari}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Nag_Mundari}"
+);
+testPropertyEscapes(
+ /^\P{sc=Nagm}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Nagm}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nandinagari.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nandinagari.js
new file mode 100644
index 0000000000..706925da11
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nandinagari.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Nandinagari`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0119A0, 0x0119A7],
+ [0x0119AA, 0x0119D7],
+ [0x0119DA, 0x0119E4]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Nandinagari}+$/u,
+ matchSymbols,
+ "\\p{Script=Nandinagari}"
+);
+testPropertyEscapes(
+ /^\p{Script=Nand}+$/u,
+ matchSymbols,
+ "\\p{Script=Nand}"
+);
+testPropertyEscapes(
+ /^\p{sc=Nandinagari}+$/u,
+ matchSymbols,
+ "\\p{sc=Nandinagari}"
+);
+testPropertyEscapes(
+ /^\p{sc=Nand}+$/u,
+ matchSymbols,
+ "\\p{sc=Nand}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01199F],
+ [0x0119A8, 0x0119A9],
+ [0x0119D8, 0x0119D9],
+ [0x0119E5, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Nandinagari}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Nandinagari}"
+);
+testPropertyEscapes(
+ /^\P{Script=Nand}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Nand}"
+);
+testPropertyEscapes(
+ /^\P{sc=Nandinagari}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Nandinagari}"
+);
+testPropertyEscapes(
+ /^\P{sc=Nand}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Nand}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_New_Tai_Lue.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_New_Tai_Lue.js
new file mode 100644
index 0000000000..88ab8fc148
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_New_Tai_Lue.js
@@ -0,0 +1,79 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=New_Tai_Lue`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001980, 0x0019AB],
+ [0x0019B0, 0x0019C9],
+ [0x0019D0, 0x0019DA],
+ [0x0019DE, 0x0019DF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=New_Tai_Lue}+$/u,
+ matchSymbols,
+ "\\p{Script=New_Tai_Lue}"
+);
+testPropertyEscapes(
+ /^\p{Script=Talu}+$/u,
+ matchSymbols,
+ "\\p{Script=Talu}"
+);
+testPropertyEscapes(
+ /^\p{sc=New_Tai_Lue}+$/u,
+ matchSymbols,
+ "\\p{sc=New_Tai_Lue}"
+);
+testPropertyEscapes(
+ /^\p{sc=Talu}+$/u,
+ matchSymbols,
+ "\\p{sc=Talu}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00197F],
+ [0x0019AC, 0x0019AF],
+ [0x0019CA, 0x0019CF],
+ [0x0019DB, 0x0019DD],
+ [0x0019E0, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=New_Tai_Lue}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=New_Tai_Lue}"
+);
+testPropertyEscapes(
+ /^\P{Script=Talu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Talu}"
+);
+testPropertyEscapes(
+ /^\P{sc=New_Tai_Lue}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=New_Tai_Lue}"
+);
+testPropertyEscapes(
+ /^\P{sc=Talu}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Talu}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Newa.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Newa.js
new file mode 100644
index 0000000000..f1f6c0b914
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Newa.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Newa`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011400, 0x01145B],
+ [0x01145D, 0x011461]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Newa}+$/u,
+ matchSymbols,
+ "\\p{Script=Newa}"
+);
+testPropertyEscapes(
+ /^\p{Script=Newa}+$/u,
+ matchSymbols,
+ "\\p{Script=Newa}"
+);
+testPropertyEscapes(
+ /^\p{sc=Newa}+$/u,
+ matchSymbols,
+ "\\p{sc=Newa}"
+);
+testPropertyEscapes(
+ /^\p{sc=Newa}+$/u,
+ matchSymbols,
+ "\\p{sc=Newa}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x01145C
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0113FF],
+ [0x011462, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Newa}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Newa}"
+);
+testPropertyEscapes(
+ /^\P{Script=Newa}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Newa}"
+);
+testPropertyEscapes(
+ /^\P{sc=Newa}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Newa}"
+);
+testPropertyEscapes(
+ /^\P{sc=Newa}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Newa}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nko.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nko.js
new file mode 100644
index 0000000000..ba44a214a9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nko.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Nko`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0007C0, 0x0007FA],
+ [0x0007FD, 0x0007FF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Nko}+$/u,
+ matchSymbols,
+ "\\p{Script=Nko}"
+);
+testPropertyEscapes(
+ /^\p{Script=Nkoo}+$/u,
+ matchSymbols,
+ "\\p{Script=Nkoo}"
+);
+testPropertyEscapes(
+ /^\p{sc=Nko}+$/u,
+ matchSymbols,
+ "\\p{sc=Nko}"
+);
+testPropertyEscapes(
+ /^\p{sc=Nkoo}+$/u,
+ matchSymbols,
+ "\\p{sc=Nkoo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0007BF],
+ [0x0007FB, 0x0007FC],
+ [0x000800, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Nko}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Nko}"
+);
+testPropertyEscapes(
+ /^\P{Script=Nkoo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Nkoo}"
+);
+testPropertyEscapes(
+ /^\P{sc=Nko}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Nko}"
+);
+testPropertyEscapes(
+ /^\P{sc=Nkoo}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Nkoo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nushu.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nushu.js
new file mode 100644
index 0000000000..56cf46a9bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nushu.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Nushu`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x016FE1
+ ],
+ ranges: [
+ [0x01B170, 0x01B2FB]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Nushu}+$/u,
+ matchSymbols,
+ "\\p{Script=Nushu}"
+);
+testPropertyEscapes(
+ /^\p{Script=Nshu}+$/u,
+ matchSymbols,
+ "\\p{Script=Nshu}"
+);
+testPropertyEscapes(
+ /^\p{sc=Nushu}+$/u,
+ matchSymbols,
+ "\\p{sc=Nushu}"
+);
+testPropertyEscapes(
+ /^\p{sc=Nshu}+$/u,
+ matchSymbols,
+ "\\p{sc=Nshu}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016FE0],
+ [0x016FE2, 0x01B16F],
+ [0x01B2FC, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Nushu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Nushu}"
+);
+testPropertyEscapes(
+ /^\P{Script=Nshu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Nshu}"
+);
+testPropertyEscapes(
+ /^\P{sc=Nushu}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Nushu}"
+);
+testPropertyEscapes(
+ /^\P{sc=Nshu}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Nshu}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nyiakeng_Puachue_Hmong.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nyiakeng_Puachue_Hmong.js
new file mode 100644
index 0000000000..c5aa3357bd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Nyiakeng_Puachue_Hmong.js
@@ -0,0 +1,79 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Nyiakeng_Puachue_Hmong`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x01E100, 0x01E12C],
+ [0x01E130, 0x01E13D],
+ [0x01E140, 0x01E149],
+ [0x01E14E, 0x01E14F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Nyiakeng_Puachue_Hmong}+$/u,
+ matchSymbols,
+ "\\p{Script=Nyiakeng_Puachue_Hmong}"
+);
+testPropertyEscapes(
+ /^\p{Script=Hmnp}+$/u,
+ matchSymbols,
+ "\\p{Script=Hmnp}"
+);
+testPropertyEscapes(
+ /^\p{sc=Nyiakeng_Puachue_Hmong}+$/u,
+ matchSymbols,
+ "\\p{sc=Nyiakeng_Puachue_Hmong}"
+);
+testPropertyEscapes(
+ /^\p{sc=Hmnp}+$/u,
+ matchSymbols,
+ "\\p{sc=Hmnp}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01E0FF],
+ [0x01E12D, 0x01E12F],
+ [0x01E13E, 0x01E13F],
+ [0x01E14A, 0x01E14D],
+ [0x01E150, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Nyiakeng_Puachue_Hmong}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Nyiakeng_Puachue_Hmong}"
+);
+testPropertyEscapes(
+ /^\P{Script=Hmnp}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Hmnp}"
+);
+testPropertyEscapes(
+ /^\P{sc=Nyiakeng_Puachue_Hmong}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Nyiakeng_Puachue_Hmong}"
+);
+testPropertyEscapes(
+ /^\P{sc=Hmnp}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Hmnp}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ogham.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ogham.js
new file mode 100644
index 0000000000..38530cc93b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ogham.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Ogham`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001680, 0x00169C]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Ogham}+$/u,
+ matchSymbols,
+ "\\p{Script=Ogham}"
+);
+testPropertyEscapes(
+ /^\p{Script=Ogam}+$/u,
+ matchSymbols,
+ "\\p{Script=Ogam}"
+);
+testPropertyEscapes(
+ /^\p{sc=Ogham}+$/u,
+ matchSymbols,
+ "\\p{sc=Ogham}"
+);
+testPropertyEscapes(
+ /^\p{sc=Ogam}+$/u,
+ matchSymbols,
+ "\\p{sc=Ogam}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00167F],
+ [0x00169D, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Ogham}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Ogham}"
+);
+testPropertyEscapes(
+ /^\P{Script=Ogam}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Ogam}"
+);
+testPropertyEscapes(
+ /^\P{sc=Ogham}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Ogham}"
+);
+testPropertyEscapes(
+ /^\P{sc=Ogam}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Ogam}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ol_Chiki.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ol_Chiki.js
new file mode 100644
index 0000000000..848e127c35
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ol_Chiki.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Ol_Chiki`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001C50, 0x001C7F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Ol_Chiki}+$/u,
+ matchSymbols,
+ "\\p{Script=Ol_Chiki}"
+);
+testPropertyEscapes(
+ /^\p{Script=Olck}+$/u,
+ matchSymbols,
+ "\\p{Script=Olck}"
+);
+testPropertyEscapes(
+ /^\p{sc=Ol_Chiki}+$/u,
+ matchSymbols,
+ "\\p{sc=Ol_Chiki}"
+);
+testPropertyEscapes(
+ /^\p{sc=Olck}+$/u,
+ matchSymbols,
+ "\\p{sc=Olck}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x001C4F],
+ [0x001C80, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Ol_Chiki}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Ol_Chiki}"
+);
+testPropertyEscapes(
+ /^\P{Script=Olck}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Olck}"
+);
+testPropertyEscapes(
+ /^\P{sc=Ol_Chiki}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Ol_Chiki}"
+);
+testPropertyEscapes(
+ /^\P{sc=Olck}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Olck}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Hungarian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Hungarian.js
new file mode 100644
index 0000000000..8e568495a3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Hungarian.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Old_Hungarian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010C80, 0x010CB2],
+ [0x010CC0, 0x010CF2],
+ [0x010CFA, 0x010CFF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Old_Hungarian}+$/u,
+ matchSymbols,
+ "\\p{Script=Old_Hungarian}"
+);
+testPropertyEscapes(
+ /^\p{Script=Hung}+$/u,
+ matchSymbols,
+ "\\p{Script=Hung}"
+);
+testPropertyEscapes(
+ /^\p{sc=Old_Hungarian}+$/u,
+ matchSymbols,
+ "\\p{sc=Old_Hungarian}"
+);
+testPropertyEscapes(
+ /^\p{sc=Hung}+$/u,
+ matchSymbols,
+ "\\p{sc=Hung}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010C7F],
+ [0x010CB3, 0x010CBF],
+ [0x010CF3, 0x010CF9],
+ [0x010D00, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Old_Hungarian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Old_Hungarian}"
+);
+testPropertyEscapes(
+ /^\P{Script=Hung}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Hung}"
+);
+testPropertyEscapes(
+ /^\P{sc=Old_Hungarian}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Old_Hungarian}"
+);
+testPropertyEscapes(
+ /^\P{sc=Hung}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Hung}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Italic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Italic.js
new file mode 100644
index 0000000000..9271a56a65
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Italic.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Old_Italic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010300, 0x010323],
+ [0x01032D, 0x01032F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Old_Italic}+$/u,
+ matchSymbols,
+ "\\p{Script=Old_Italic}"
+);
+testPropertyEscapes(
+ /^\p{Script=Ital}+$/u,
+ matchSymbols,
+ "\\p{Script=Ital}"
+);
+testPropertyEscapes(
+ /^\p{sc=Old_Italic}+$/u,
+ matchSymbols,
+ "\\p{sc=Old_Italic}"
+);
+testPropertyEscapes(
+ /^\p{sc=Ital}+$/u,
+ matchSymbols,
+ "\\p{sc=Ital}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0102FF],
+ [0x010324, 0x01032C],
+ [0x010330, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Old_Italic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Old_Italic}"
+);
+testPropertyEscapes(
+ /^\P{Script=Ital}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Ital}"
+);
+testPropertyEscapes(
+ /^\P{sc=Old_Italic}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Old_Italic}"
+);
+testPropertyEscapes(
+ /^\P{sc=Ital}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Ital}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_North_Arabian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_North_Arabian.js
new file mode 100644
index 0000000000..c172d380e6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_North_Arabian.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Old_North_Arabian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010A80, 0x010A9F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Old_North_Arabian}+$/u,
+ matchSymbols,
+ "\\p{Script=Old_North_Arabian}"
+);
+testPropertyEscapes(
+ /^\p{Script=Narb}+$/u,
+ matchSymbols,
+ "\\p{Script=Narb}"
+);
+testPropertyEscapes(
+ /^\p{sc=Old_North_Arabian}+$/u,
+ matchSymbols,
+ "\\p{sc=Old_North_Arabian}"
+);
+testPropertyEscapes(
+ /^\p{sc=Narb}+$/u,
+ matchSymbols,
+ "\\p{sc=Narb}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010A7F],
+ [0x010AA0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Old_North_Arabian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Old_North_Arabian}"
+);
+testPropertyEscapes(
+ /^\P{Script=Narb}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Narb}"
+);
+testPropertyEscapes(
+ /^\P{sc=Old_North_Arabian}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Old_North_Arabian}"
+);
+testPropertyEscapes(
+ /^\P{sc=Narb}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Narb}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Permic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Permic.js
new file mode 100644
index 0000000000..6d5b65f895
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Permic.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Old_Permic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010350, 0x01037A]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Old_Permic}+$/u,
+ matchSymbols,
+ "\\p{Script=Old_Permic}"
+);
+testPropertyEscapes(
+ /^\p{Script=Perm}+$/u,
+ matchSymbols,
+ "\\p{Script=Perm}"
+);
+testPropertyEscapes(
+ /^\p{sc=Old_Permic}+$/u,
+ matchSymbols,
+ "\\p{sc=Old_Permic}"
+);
+testPropertyEscapes(
+ /^\p{sc=Perm}+$/u,
+ matchSymbols,
+ "\\p{sc=Perm}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01034F],
+ [0x01037B, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Old_Permic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Old_Permic}"
+);
+testPropertyEscapes(
+ /^\P{Script=Perm}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Perm}"
+);
+testPropertyEscapes(
+ /^\P{sc=Old_Permic}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Old_Permic}"
+);
+testPropertyEscapes(
+ /^\P{sc=Perm}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Perm}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Persian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Persian.js
new file mode 100644
index 0000000000..e9e7f55907
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Persian.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Old_Persian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0103A0, 0x0103C3],
+ [0x0103C8, 0x0103D5]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Old_Persian}+$/u,
+ matchSymbols,
+ "\\p{Script=Old_Persian}"
+);
+testPropertyEscapes(
+ /^\p{Script=Xpeo}+$/u,
+ matchSymbols,
+ "\\p{Script=Xpeo}"
+);
+testPropertyEscapes(
+ /^\p{sc=Old_Persian}+$/u,
+ matchSymbols,
+ "\\p{sc=Old_Persian}"
+);
+testPropertyEscapes(
+ /^\p{sc=Xpeo}+$/u,
+ matchSymbols,
+ "\\p{sc=Xpeo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01039F],
+ [0x0103C4, 0x0103C7],
+ [0x0103D6, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Old_Persian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Old_Persian}"
+);
+testPropertyEscapes(
+ /^\P{Script=Xpeo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Xpeo}"
+);
+testPropertyEscapes(
+ /^\P{sc=Old_Persian}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Old_Persian}"
+);
+testPropertyEscapes(
+ /^\P{sc=Xpeo}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Xpeo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Sogdian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Sogdian.js
new file mode 100644
index 0000000000..800c8d34e2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Sogdian.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Old_Sogdian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010F00, 0x010F27]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Old_Sogdian}+$/u,
+ matchSymbols,
+ "\\p{Script=Old_Sogdian}"
+);
+testPropertyEscapes(
+ /^\p{Script=Sogo}+$/u,
+ matchSymbols,
+ "\\p{Script=Sogo}"
+);
+testPropertyEscapes(
+ /^\p{sc=Old_Sogdian}+$/u,
+ matchSymbols,
+ "\\p{sc=Old_Sogdian}"
+);
+testPropertyEscapes(
+ /^\p{sc=Sogo}+$/u,
+ matchSymbols,
+ "\\p{sc=Sogo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010EFF],
+ [0x010F28, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Old_Sogdian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Old_Sogdian}"
+);
+testPropertyEscapes(
+ /^\P{Script=Sogo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Sogo}"
+);
+testPropertyEscapes(
+ /^\P{sc=Old_Sogdian}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Old_Sogdian}"
+);
+testPropertyEscapes(
+ /^\P{sc=Sogo}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Sogo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_South_Arabian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_South_Arabian.js
new file mode 100644
index 0000000000..55f2b50922
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_South_Arabian.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Old_South_Arabian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010A60, 0x010A7F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Old_South_Arabian}+$/u,
+ matchSymbols,
+ "\\p{Script=Old_South_Arabian}"
+);
+testPropertyEscapes(
+ /^\p{Script=Sarb}+$/u,
+ matchSymbols,
+ "\\p{Script=Sarb}"
+);
+testPropertyEscapes(
+ /^\p{sc=Old_South_Arabian}+$/u,
+ matchSymbols,
+ "\\p{sc=Old_South_Arabian}"
+);
+testPropertyEscapes(
+ /^\p{sc=Sarb}+$/u,
+ matchSymbols,
+ "\\p{sc=Sarb}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010A5F],
+ [0x010A80, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Old_South_Arabian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Old_South_Arabian}"
+);
+testPropertyEscapes(
+ /^\P{Script=Sarb}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Sarb}"
+);
+testPropertyEscapes(
+ /^\P{sc=Old_South_Arabian}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Old_South_Arabian}"
+);
+testPropertyEscapes(
+ /^\P{sc=Sarb}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Sarb}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Turkic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Turkic.js
new file mode 100644
index 0000000000..a52d57e5f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Turkic.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Old_Turkic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010C00, 0x010C48]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Old_Turkic}+$/u,
+ matchSymbols,
+ "\\p{Script=Old_Turkic}"
+);
+testPropertyEscapes(
+ /^\p{Script=Orkh}+$/u,
+ matchSymbols,
+ "\\p{Script=Orkh}"
+);
+testPropertyEscapes(
+ /^\p{sc=Old_Turkic}+$/u,
+ matchSymbols,
+ "\\p{sc=Old_Turkic}"
+);
+testPropertyEscapes(
+ /^\p{sc=Orkh}+$/u,
+ matchSymbols,
+ "\\p{sc=Orkh}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010BFF],
+ [0x010C49, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Old_Turkic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Old_Turkic}"
+);
+testPropertyEscapes(
+ /^\P{Script=Orkh}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Orkh}"
+);
+testPropertyEscapes(
+ /^\P{sc=Old_Turkic}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Old_Turkic}"
+);
+testPropertyEscapes(
+ /^\P{sc=Orkh}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Orkh}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Uyghur.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Uyghur.js
new file mode 100644
index 0000000000..13069569f9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Old_Uyghur.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Old_Uyghur`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010F70, 0x010F89]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Old_Uyghur}+$/u,
+ matchSymbols,
+ "\\p{Script=Old_Uyghur}"
+);
+testPropertyEscapes(
+ /^\p{Script=Ougr}+$/u,
+ matchSymbols,
+ "\\p{Script=Ougr}"
+);
+testPropertyEscapes(
+ /^\p{sc=Old_Uyghur}+$/u,
+ matchSymbols,
+ "\\p{sc=Old_Uyghur}"
+);
+testPropertyEscapes(
+ /^\p{sc=Ougr}+$/u,
+ matchSymbols,
+ "\\p{sc=Ougr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010F6F],
+ [0x010F8A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Old_Uyghur}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Old_Uyghur}"
+);
+testPropertyEscapes(
+ /^\P{Script=Ougr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Ougr}"
+);
+testPropertyEscapes(
+ /^\P{sc=Old_Uyghur}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Old_Uyghur}"
+);
+testPropertyEscapes(
+ /^\P{sc=Ougr}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Ougr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Oriya.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Oriya.js
new file mode 100644
index 0000000000..d5c4861d0b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Oriya.js
@@ -0,0 +1,100 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Oriya`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000B01, 0x000B03],
+ [0x000B05, 0x000B0C],
+ [0x000B0F, 0x000B10],
+ [0x000B13, 0x000B28],
+ [0x000B2A, 0x000B30],
+ [0x000B32, 0x000B33],
+ [0x000B35, 0x000B39],
+ [0x000B3C, 0x000B44],
+ [0x000B47, 0x000B48],
+ [0x000B4B, 0x000B4D],
+ [0x000B55, 0x000B57],
+ [0x000B5C, 0x000B5D],
+ [0x000B5F, 0x000B63],
+ [0x000B66, 0x000B77]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Oriya}+$/u,
+ matchSymbols,
+ "\\p{Script=Oriya}"
+);
+testPropertyEscapes(
+ /^\p{Script=Orya}+$/u,
+ matchSymbols,
+ "\\p{Script=Orya}"
+);
+testPropertyEscapes(
+ /^\p{sc=Oriya}+$/u,
+ matchSymbols,
+ "\\p{sc=Oriya}"
+);
+testPropertyEscapes(
+ /^\p{sc=Orya}+$/u,
+ matchSymbols,
+ "\\p{sc=Orya}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000B04,
+ 0x000B29,
+ 0x000B31,
+ 0x000B34,
+ 0x000B5E
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000B00],
+ [0x000B0D, 0x000B0E],
+ [0x000B11, 0x000B12],
+ [0x000B3A, 0x000B3B],
+ [0x000B45, 0x000B46],
+ [0x000B49, 0x000B4A],
+ [0x000B4E, 0x000B54],
+ [0x000B58, 0x000B5B],
+ [0x000B64, 0x000B65],
+ [0x000B78, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Oriya}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Oriya}"
+);
+testPropertyEscapes(
+ /^\P{Script=Orya}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Orya}"
+);
+testPropertyEscapes(
+ /^\P{sc=Oriya}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Oriya}"
+);
+testPropertyEscapes(
+ /^\P{sc=Orya}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Orya}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Osage.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Osage.js
new file mode 100644
index 0000000000..15d4ebb8e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Osage.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Osage`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0104B0, 0x0104D3],
+ [0x0104D8, 0x0104FB]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Osage}+$/u,
+ matchSymbols,
+ "\\p{Script=Osage}"
+);
+testPropertyEscapes(
+ /^\p{Script=Osge}+$/u,
+ matchSymbols,
+ "\\p{Script=Osge}"
+);
+testPropertyEscapes(
+ /^\p{sc=Osage}+$/u,
+ matchSymbols,
+ "\\p{sc=Osage}"
+);
+testPropertyEscapes(
+ /^\p{sc=Osge}+$/u,
+ matchSymbols,
+ "\\p{sc=Osge}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0104AF],
+ [0x0104D4, 0x0104D7],
+ [0x0104FC, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Osage}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Osage}"
+);
+testPropertyEscapes(
+ /^\P{Script=Osge}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Osge}"
+);
+testPropertyEscapes(
+ /^\P{sc=Osage}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Osage}"
+);
+testPropertyEscapes(
+ /^\P{sc=Osge}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Osge}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Osmanya.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Osmanya.js
new file mode 100644
index 0000000000..a25f0fc3da
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Osmanya.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Osmanya`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010480, 0x01049D],
+ [0x0104A0, 0x0104A9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Osmanya}+$/u,
+ matchSymbols,
+ "\\p{Script=Osmanya}"
+);
+testPropertyEscapes(
+ /^\p{Script=Osma}+$/u,
+ matchSymbols,
+ "\\p{Script=Osma}"
+);
+testPropertyEscapes(
+ /^\p{sc=Osmanya}+$/u,
+ matchSymbols,
+ "\\p{sc=Osmanya}"
+);
+testPropertyEscapes(
+ /^\p{sc=Osma}+$/u,
+ matchSymbols,
+ "\\p{sc=Osma}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01047F],
+ [0x01049E, 0x01049F],
+ [0x0104AA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Osmanya}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Osmanya}"
+);
+testPropertyEscapes(
+ /^\P{Script=Osma}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Osma}"
+);
+testPropertyEscapes(
+ /^\P{sc=Osmanya}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Osmanya}"
+);
+testPropertyEscapes(
+ /^\P{sc=Osma}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Osma}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Pahawh_Hmong.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Pahawh_Hmong.js
new file mode 100644
index 0000000000..defeb4f498
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Pahawh_Hmong.js
@@ -0,0 +1,82 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Pahawh_Hmong`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x016B00, 0x016B45],
+ [0x016B50, 0x016B59],
+ [0x016B5B, 0x016B61],
+ [0x016B63, 0x016B77],
+ [0x016B7D, 0x016B8F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Pahawh_Hmong}+$/u,
+ matchSymbols,
+ "\\p{Script=Pahawh_Hmong}"
+);
+testPropertyEscapes(
+ /^\p{Script=Hmng}+$/u,
+ matchSymbols,
+ "\\p{Script=Hmng}"
+);
+testPropertyEscapes(
+ /^\p{sc=Pahawh_Hmong}+$/u,
+ matchSymbols,
+ "\\p{sc=Pahawh_Hmong}"
+);
+testPropertyEscapes(
+ /^\p{sc=Hmng}+$/u,
+ matchSymbols,
+ "\\p{sc=Hmng}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x016B5A,
+ 0x016B62
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016AFF],
+ [0x016B46, 0x016B4F],
+ [0x016B78, 0x016B7C],
+ [0x016B90, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Pahawh_Hmong}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Pahawh_Hmong}"
+);
+testPropertyEscapes(
+ /^\P{Script=Hmng}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Hmng}"
+);
+testPropertyEscapes(
+ /^\P{sc=Pahawh_Hmong}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Pahawh_Hmong}"
+);
+testPropertyEscapes(
+ /^\P{sc=Hmng}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Hmng}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Palmyrene.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Palmyrene.js
new file mode 100644
index 0000000000..3545af7bb6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Palmyrene.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Palmyrene`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010860, 0x01087F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Palmyrene}+$/u,
+ matchSymbols,
+ "\\p{Script=Palmyrene}"
+);
+testPropertyEscapes(
+ /^\p{Script=Palm}+$/u,
+ matchSymbols,
+ "\\p{Script=Palm}"
+);
+testPropertyEscapes(
+ /^\p{sc=Palmyrene}+$/u,
+ matchSymbols,
+ "\\p{sc=Palmyrene}"
+);
+testPropertyEscapes(
+ /^\p{sc=Palm}+$/u,
+ matchSymbols,
+ "\\p{sc=Palm}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01085F],
+ [0x010880, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Palmyrene}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Palmyrene}"
+);
+testPropertyEscapes(
+ /^\P{Script=Palm}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Palm}"
+);
+testPropertyEscapes(
+ /^\P{sc=Palmyrene}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Palmyrene}"
+);
+testPropertyEscapes(
+ /^\P{sc=Palm}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Palm}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Pau_Cin_Hau.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Pau_Cin_Hau.js
new file mode 100644
index 0000000000..4a99c36f8b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Pau_Cin_Hau.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Pau_Cin_Hau`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011AC0, 0x011AF8]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Pau_Cin_Hau}+$/u,
+ matchSymbols,
+ "\\p{Script=Pau_Cin_Hau}"
+);
+testPropertyEscapes(
+ /^\p{Script=Pauc}+$/u,
+ matchSymbols,
+ "\\p{Script=Pauc}"
+);
+testPropertyEscapes(
+ /^\p{sc=Pau_Cin_Hau}+$/u,
+ matchSymbols,
+ "\\p{sc=Pau_Cin_Hau}"
+);
+testPropertyEscapes(
+ /^\p{sc=Pauc}+$/u,
+ matchSymbols,
+ "\\p{sc=Pauc}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x011ABF],
+ [0x011AF9, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Pau_Cin_Hau}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Pau_Cin_Hau}"
+);
+testPropertyEscapes(
+ /^\P{Script=Pauc}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Pauc}"
+);
+testPropertyEscapes(
+ /^\P{sc=Pau_Cin_Hau}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Pau_Cin_Hau}"
+);
+testPropertyEscapes(
+ /^\P{sc=Pauc}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Pauc}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Phags_Pa.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Phags_Pa.js
new file mode 100644
index 0000000000..13149b8857
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Phags_Pa.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Phags_Pa`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00A840, 0x00A877]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Phags_Pa}+$/u,
+ matchSymbols,
+ "\\p{Script=Phags_Pa}"
+);
+testPropertyEscapes(
+ /^\p{Script=Phag}+$/u,
+ matchSymbols,
+ "\\p{Script=Phag}"
+);
+testPropertyEscapes(
+ /^\p{sc=Phags_Pa}+$/u,
+ matchSymbols,
+ "\\p{sc=Phags_Pa}"
+);
+testPropertyEscapes(
+ /^\p{sc=Phag}+$/u,
+ matchSymbols,
+ "\\p{sc=Phag}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A83F],
+ [0x00A878, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Phags_Pa}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Phags_Pa}"
+);
+testPropertyEscapes(
+ /^\P{Script=Phag}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Phag}"
+);
+testPropertyEscapes(
+ /^\P{sc=Phags_Pa}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Phags_Pa}"
+);
+testPropertyEscapes(
+ /^\P{sc=Phag}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Phag}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Phoenician.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Phoenician.js
new file mode 100644
index 0000000000..0bfc6c197a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Phoenician.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Phoenician`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x01091F
+ ],
+ ranges: [
+ [0x010900, 0x01091B]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Phoenician}+$/u,
+ matchSymbols,
+ "\\p{Script=Phoenician}"
+);
+testPropertyEscapes(
+ /^\p{Script=Phnx}+$/u,
+ matchSymbols,
+ "\\p{Script=Phnx}"
+);
+testPropertyEscapes(
+ /^\p{sc=Phoenician}+$/u,
+ matchSymbols,
+ "\\p{sc=Phoenician}"
+);
+testPropertyEscapes(
+ /^\p{sc=Phnx}+$/u,
+ matchSymbols,
+ "\\p{sc=Phnx}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0108FF],
+ [0x01091C, 0x01091E],
+ [0x010920, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Phoenician}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Phoenician}"
+);
+testPropertyEscapes(
+ /^\P{Script=Phnx}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Phnx}"
+);
+testPropertyEscapes(
+ /^\P{sc=Phoenician}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Phoenician}"
+);
+testPropertyEscapes(
+ /^\P{sc=Phnx}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Phnx}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Psalter_Pahlavi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Psalter_Pahlavi.js
new file mode 100644
index 0000000000..d14c9bf64d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Psalter_Pahlavi.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Psalter_Pahlavi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010B80, 0x010B91],
+ [0x010B99, 0x010B9C],
+ [0x010BA9, 0x010BAF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Psalter_Pahlavi}+$/u,
+ matchSymbols,
+ "\\p{Script=Psalter_Pahlavi}"
+);
+testPropertyEscapes(
+ /^\p{Script=Phlp}+$/u,
+ matchSymbols,
+ "\\p{Script=Phlp}"
+);
+testPropertyEscapes(
+ /^\p{sc=Psalter_Pahlavi}+$/u,
+ matchSymbols,
+ "\\p{sc=Psalter_Pahlavi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Phlp}+$/u,
+ matchSymbols,
+ "\\p{sc=Phlp}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010B7F],
+ [0x010B92, 0x010B98],
+ [0x010B9D, 0x010BA8],
+ [0x010BB0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Psalter_Pahlavi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Psalter_Pahlavi}"
+);
+testPropertyEscapes(
+ /^\P{Script=Phlp}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Phlp}"
+);
+testPropertyEscapes(
+ /^\P{sc=Psalter_Pahlavi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Psalter_Pahlavi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Phlp}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Phlp}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Rejang.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Rejang.js
new file mode 100644
index 0000000000..a7f6e6979f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Rejang.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Rejang`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00A95F
+ ],
+ ranges: [
+ [0x00A930, 0x00A953]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Rejang}+$/u,
+ matchSymbols,
+ "\\p{Script=Rejang}"
+);
+testPropertyEscapes(
+ /^\p{Script=Rjng}+$/u,
+ matchSymbols,
+ "\\p{Script=Rjng}"
+);
+testPropertyEscapes(
+ /^\p{sc=Rejang}+$/u,
+ matchSymbols,
+ "\\p{sc=Rejang}"
+);
+testPropertyEscapes(
+ /^\p{sc=Rjng}+$/u,
+ matchSymbols,
+ "\\p{sc=Rjng}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A92F],
+ [0x00A954, 0x00A95E],
+ [0x00A960, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Rejang}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Rejang}"
+);
+testPropertyEscapes(
+ /^\P{Script=Rjng}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Rjng}"
+);
+testPropertyEscapes(
+ /^\P{sc=Rejang}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Rejang}"
+);
+testPropertyEscapes(
+ /^\P{sc=Rjng}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Rjng}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Runic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Runic.js
new file mode 100644
index 0000000000..13e0accb4e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Runic.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Runic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0016A0, 0x0016EA],
+ [0x0016EE, 0x0016F8]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Runic}+$/u,
+ matchSymbols,
+ "\\p{Script=Runic}"
+);
+testPropertyEscapes(
+ /^\p{Script=Runr}+$/u,
+ matchSymbols,
+ "\\p{Script=Runr}"
+);
+testPropertyEscapes(
+ /^\p{sc=Runic}+$/u,
+ matchSymbols,
+ "\\p{sc=Runic}"
+);
+testPropertyEscapes(
+ /^\p{sc=Runr}+$/u,
+ matchSymbols,
+ "\\p{sc=Runr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00169F],
+ [0x0016EB, 0x0016ED],
+ [0x0016F9, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Runic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Runic}"
+);
+testPropertyEscapes(
+ /^\P{Script=Runr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Runr}"
+);
+testPropertyEscapes(
+ /^\P{sc=Runic}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Runic}"
+);
+testPropertyEscapes(
+ /^\P{sc=Runr}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Runr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Samaritan.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Samaritan.js
new file mode 100644
index 0000000000..d73e62826f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Samaritan.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Samaritan`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000800, 0x00082D],
+ [0x000830, 0x00083E]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Samaritan}+$/u,
+ matchSymbols,
+ "\\p{Script=Samaritan}"
+);
+testPropertyEscapes(
+ /^\p{Script=Samr}+$/u,
+ matchSymbols,
+ "\\p{Script=Samr}"
+);
+testPropertyEscapes(
+ /^\p{sc=Samaritan}+$/u,
+ matchSymbols,
+ "\\p{sc=Samaritan}"
+);
+testPropertyEscapes(
+ /^\p{sc=Samr}+$/u,
+ matchSymbols,
+ "\\p{sc=Samr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0007FF],
+ [0x00082E, 0x00082F],
+ [0x00083F, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Samaritan}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Samaritan}"
+);
+testPropertyEscapes(
+ /^\P{Script=Samr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Samr}"
+);
+testPropertyEscapes(
+ /^\P{sc=Samaritan}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Samaritan}"
+);
+testPropertyEscapes(
+ /^\P{sc=Samr}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Samr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Saurashtra.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Saurashtra.js
new file mode 100644
index 0000000000..8ad629754d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Saurashtra.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Saurashtra`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00A880, 0x00A8C5],
+ [0x00A8CE, 0x00A8D9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Saurashtra}+$/u,
+ matchSymbols,
+ "\\p{Script=Saurashtra}"
+);
+testPropertyEscapes(
+ /^\p{Script=Saur}+$/u,
+ matchSymbols,
+ "\\p{Script=Saur}"
+);
+testPropertyEscapes(
+ /^\p{sc=Saurashtra}+$/u,
+ matchSymbols,
+ "\\p{sc=Saurashtra}"
+);
+testPropertyEscapes(
+ /^\p{sc=Saur}+$/u,
+ matchSymbols,
+ "\\p{sc=Saur}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A87F],
+ [0x00A8C6, 0x00A8CD],
+ [0x00A8DA, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Saurashtra}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Saurashtra}"
+);
+testPropertyEscapes(
+ /^\P{Script=Saur}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Saur}"
+);
+testPropertyEscapes(
+ /^\P{sc=Saurashtra}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Saurashtra}"
+);
+testPropertyEscapes(
+ /^\P{sc=Saur}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Saur}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sharada.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sharada.js
new file mode 100644
index 0000000000..f2f5d28b6f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sharada.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Sharada`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011180, 0x0111DF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Sharada}+$/u,
+ matchSymbols,
+ "\\p{Script=Sharada}"
+);
+testPropertyEscapes(
+ /^\p{Script=Shrd}+$/u,
+ matchSymbols,
+ "\\p{Script=Shrd}"
+);
+testPropertyEscapes(
+ /^\p{sc=Sharada}+$/u,
+ matchSymbols,
+ "\\p{sc=Sharada}"
+);
+testPropertyEscapes(
+ /^\p{sc=Shrd}+$/u,
+ matchSymbols,
+ "\\p{sc=Shrd}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01117F],
+ [0x0111E0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Sharada}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Sharada}"
+);
+testPropertyEscapes(
+ /^\P{Script=Shrd}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Shrd}"
+);
+testPropertyEscapes(
+ /^\P{sc=Sharada}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Sharada}"
+);
+testPropertyEscapes(
+ /^\P{sc=Shrd}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Shrd}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Shavian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Shavian.js
new file mode 100644
index 0000000000..0c6dcaa9bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Shavian.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Shavian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010450, 0x01047F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Shavian}+$/u,
+ matchSymbols,
+ "\\p{Script=Shavian}"
+);
+testPropertyEscapes(
+ /^\p{Script=Shaw}+$/u,
+ matchSymbols,
+ "\\p{Script=Shaw}"
+);
+testPropertyEscapes(
+ /^\p{sc=Shavian}+$/u,
+ matchSymbols,
+ "\\p{sc=Shavian}"
+);
+testPropertyEscapes(
+ /^\p{sc=Shaw}+$/u,
+ matchSymbols,
+ "\\p{sc=Shaw}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01044F],
+ [0x010480, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Shavian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Shavian}"
+);
+testPropertyEscapes(
+ /^\P{Script=Shaw}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Shaw}"
+);
+testPropertyEscapes(
+ /^\P{sc=Shavian}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Shavian}"
+);
+testPropertyEscapes(
+ /^\P{sc=Shaw}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Shaw}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Siddham.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Siddham.js
new file mode 100644
index 0000000000..4a75fd510d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Siddham.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Siddham`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011580, 0x0115B5],
+ [0x0115B8, 0x0115DD]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Siddham}+$/u,
+ matchSymbols,
+ "\\p{Script=Siddham}"
+);
+testPropertyEscapes(
+ /^\p{Script=Sidd}+$/u,
+ matchSymbols,
+ "\\p{Script=Sidd}"
+);
+testPropertyEscapes(
+ /^\p{sc=Siddham}+$/u,
+ matchSymbols,
+ "\\p{sc=Siddham}"
+);
+testPropertyEscapes(
+ /^\p{sc=Sidd}+$/u,
+ matchSymbols,
+ "\\p{sc=Sidd}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01157F],
+ [0x0115B6, 0x0115B7],
+ [0x0115DE, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Siddham}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Siddham}"
+);
+testPropertyEscapes(
+ /^\P{Script=Sidd}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Sidd}"
+);
+testPropertyEscapes(
+ /^\P{sc=Siddham}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Siddham}"
+);
+testPropertyEscapes(
+ /^\P{sc=Sidd}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Sidd}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_SignWriting.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_SignWriting.js
new file mode 100644
index 0000000000..71864bf858
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_SignWriting.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=SignWriting`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x01D800, 0x01DA8B],
+ [0x01DA9B, 0x01DA9F],
+ [0x01DAA1, 0x01DAAF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=SignWriting}+$/u,
+ matchSymbols,
+ "\\p{Script=SignWriting}"
+);
+testPropertyEscapes(
+ /^\p{Script=Sgnw}+$/u,
+ matchSymbols,
+ "\\p{Script=Sgnw}"
+);
+testPropertyEscapes(
+ /^\p{sc=SignWriting}+$/u,
+ matchSymbols,
+ "\\p{sc=SignWriting}"
+);
+testPropertyEscapes(
+ /^\p{sc=Sgnw}+$/u,
+ matchSymbols,
+ "\\p{sc=Sgnw}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x01DAA0
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01D7FF],
+ [0x01DA8C, 0x01DA9A],
+ [0x01DAB0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=SignWriting}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=SignWriting}"
+);
+testPropertyEscapes(
+ /^\P{Script=Sgnw}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Sgnw}"
+);
+testPropertyEscapes(
+ /^\P{sc=SignWriting}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=SignWriting}"
+);
+testPropertyEscapes(
+ /^\P{sc=Sgnw}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Sgnw}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sinhala.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sinhala.js
new file mode 100644
index 0000000000..fee9c8675e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sinhala.js
@@ -0,0 +1,99 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Sinhala`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000DBD,
+ 0x000DCA,
+ 0x000DD6
+ ],
+ ranges: [
+ [0x000D81, 0x000D83],
+ [0x000D85, 0x000D96],
+ [0x000D9A, 0x000DB1],
+ [0x000DB3, 0x000DBB],
+ [0x000DC0, 0x000DC6],
+ [0x000DCF, 0x000DD4],
+ [0x000DD8, 0x000DDF],
+ [0x000DE6, 0x000DEF],
+ [0x000DF2, 0x000DF4],
+ [0x0111E1, 0x0111F4]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Sinhala}+$/u,
+ matchSymbols,
+ "\\p{Script=Sinhala}"
+);
+testPropertyEscapes(
+ /^\p{Script=Sinh}+$/u,
+ matchSymbols,
+ "\\p{Script=Sinh}"
+);
+testPropertyEscapes(
+ /^\p{sc=Sinhala}+$/u,
+ matchSymbols,
+ "\\p{sc=Sinhala}"
+);
+testPropertyEscapes(
+ /^\p{sc=Sinh}+$/u,
+ matchSymbols,
+ "\\p{sc=Sinh}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000D84,
+ 0x000DB2,
+ 0x000DBC,
+ 0x000DD5,
+ 0x000DD7
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000D80],
+ [0x000D97, 0x000D99],
+ [0x000DBE, 0x000DBF],
+ [0x000DC7, 0x000DC9],
+ [0x000DCB, 0x000DCE],
+ [0x000DE0, 0x000DE5],
+ [0x000DF0, 0x000DF1],
+ [0x000DF5, 0x00DBFF],
+ [0x00E000, 0x0111E0],
+ [0x0111F5, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Sinhala}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Sinhala}"
+);
+testPropertyEscapes(
+ /^\P{Script=Sinh}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Sinh}"
+);
+testPropertyEscapes(
+ /^\P{sc=Sinhala}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Sinhala}"
+);
+testPropertyEscapes(
+ /^\P{sc=Sinh}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Sinh}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sogdian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sogdian.js
new file mode 100644
index 0000000000..3527c81310
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sogdian.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Sogdian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010F30, 0x010F59]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Sogdian}+$/u,
+ matchSymbols,
+ "\\p{Script=Sogdian}"
+);
+testPropertyEscapes(
+ /^\p{Script=Sogd}+$/u,
+ matchSymbols,
+ "\\p{Script=Sogd}"
+);
+testPropertyEscapes(
+ /^\p{sc=Sogdian}+$/u,
+ matchSymbols,
+ "\\p{sc=Sogdian}"
+);
+testPropertyEscapes(
+ /^\p{sc=Sogd}+$/u,
+ matchSymbols,
+ "\\p{sc=Sogd}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010F2F],
+ [0x010F5A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Sogdian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Sogdian}"
+);
+testPropertyEscapes(
+ /^\P{Script=Sogd}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Sogd}"
+);
+testPropertyEscapes(
+ /^\P{sc=Sogdian}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Sogdian}"
+);
+testPropertyEscapes(
+ /^\P{sc=Sogd}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Sogd}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sora_Sompeng.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sora_Sompeng.js
new file mode 100644
index 0000000000..8a90eb3599
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sora_Sompeng.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Sora_Sompeng`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0110D0, 0x0110E8],
+ [0x0110F0, 0x0110F9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Sora_Sompeng}+$/u,
+ matchSymbols,
+ "\\p{Script=Sora_Sompeng}"
+);
+testPropertyEscapes(
+ /^\p{Script=Sora}+$/u,
+ matchSymbols,
+ "\\p{Script=Sora}"
+);
+testPropertyEscapes(
+ /^\p{sc=Sora_Sompeng}+$/u,
+ matchSymbols,
+ "\\p{sc=Sora_Sompeng}"
+);
+testPropertyEscapes(
+ /^\p{sc=Sora}+$/u,
+ matchSymbols,
+ "\\p{sc=Sora}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0110CF],
+ [0x0110E9, 0x0110EF],
+ [0x0110FA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Sora_Sompeng}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Sora_Sompeng}"
+);
+testPropertyEscapes(
+ /^\P{Script=Sora}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Sora}"
+);
+testPropertyEscapes(
+ /^\P{sc=Sora_Sompeng}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Sora_Sompeng}"
+);
+testPropertyEscapes(
+ /^\P{sc=Sora}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Sora}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Soyombo.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Soyombo.js
new file mode 100644
index 0000000000..84e902cfd4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Soyombo.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Soyombo`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011A50, 0x011AA2]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Soyombo}+$/u,
+ matchSymbols,
+ "\\p{Script=Soyombo}"
+);
+testPropertyEscapes(
+ /^\p{Script=Soyo}+$/u,
+ matchSymbols,
+ "\\p{Script=Soyo}"
+);
+testPropertyEscapes(
+ /^\p{sc=Soyombo}+$/u,
+ matchSymbols,
+ "\\p{sc=Soyombo}"
+);
+testPropertyEscapes(
+ /^\p{sc=Soyo}+$/u,
+ matchSymbols,
+ "\\p{sc=Soyo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x011A4F],
+ [0x011AA3, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Soyombo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Soyombo}"
+);
+testPropertyEscapes(
+ /^\P{Script=Soyo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Soyo}"
+);
+testPropertyEscapes(
+ /^\P{sc=Soyombo}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Soyombo}"
+);
+testPropertyEscapes(
+ /^\P{sc=Soyo}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Soyo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sundanese.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sundanese.js
new file mode 100644
index 0000000000..d894469bbd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Sundanese.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Sundanese`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001B80, 0x001BBF],
+ [0x001CC0, 0x001CC7]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Sundanese}+$/u,
+ matchSymbols,
+ "\\p{Script=Sundanese}"
+);
+testPropertyEscapes(
+ /^\p{Script=Sund}+$/u,
+ matchSymbols,
+ "\\p{Script=Sund}"
+);
+testPropertyEscapes(
+ /^\p{sc=Sundanese}+$/u,
+ matchSymbols,
+ "\\p{sc=Sundanese}"
+);
+testPropertyEscapes(
+ /^\p{sc=Sund}+$/u,
+ matchSymbols,
+ "\\p{sc=Sund}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x001B7F],
+ [0x001BC0, 0x001CBF],
+ [0x001CC8, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Sundanese}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Sundanese}"
+);
+testPropertyEscapes(
+ /^\P{Script=Sund}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Sund}"
+);
+testPropertyEscapes(
+ /^\P{sc=Sundanese}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Sundanese}"
+);
+testPropertyEscapes(
+ /^\P{sc=Sund}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Sund}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Syloti_Nagri.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Syloti_Nagri.js
new file mode 100644
index 0000000000..51e98797d3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Syloti_Nagri.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Syloti_Nagri`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00A800, 0x00A82C]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Syloti_Nagri}+$/u,
+ matchSymbols,
+ "\\p{Script=Syloti_Nagri}"
+);
+testPropertyEscapes(
+ /^\p{Script=Sylo}+$/u,
+ matchSymbols,
+ "\\p{Script=Sylo}"
+);
+testPropertyEscapes(
+ /^\p{sc=Syloti_Nagri}+$/u,
+ matchSymbols,
+ "\\p{sc=Syloti_Nagri}"
+);
+testPropertyEscapes(
+ /^\p{sc=Sylo}+$/u,
+ matchSymbols,
+ "\\p{sc=Sylo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A7FF],
+ [0x00A82D, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Syloti_Nagri}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Syloti_Nagri}"
+);
+testPropertyEscapes(
+ /^\P{Script=Sylo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Sylo}"
+);
+testPropertyEscapes(
+ /^\P{sc=Syloti_Nagri}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Syloti_Nagri}"
+);
+testPropertyEscapes(
+ /^\P{sc=Sylo}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Sylo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Syriac.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Syriac.js
new file mode 100644
index 0000000000..efee6ddda6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Syriac.js
@@ -0,0 +1,80 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Syriac`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000700, 0x00070D],
+ [0x00070F, 0x00074A],
+ [0x00074D, 0x00074F],
+ [0x000860, 0x00086A]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Syriac}+$/u,
+ matchSymbols,
+ "\\p{Script=Syriac}"
+);
+testPropertyEscapes(
+ /^\p{Script=Syrc}+$/u,
+ matchSymbols,
+ "\\p{Script=Syrc}"
+);
+testPropertyEscapes(
+ /^\p{sc=Syriac}+$/u,
+ matchSymbols,
+ "\\p{sc=Syriac}"
+);
+testPropertyEscapes(
+ /^\p{sc=Syrc}+$/u,
+ matchSymbols,
+ "\\p{sc=Syrc}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00070E
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0006FF],
+ [0x00074B, 0x00074C],
+ [0x000750, 0x00085F],
+ [0x00086B, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Syriac}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Syriac}"
+);
+testPropertyEscapes(
+ /^\P{Script=Syrc}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Syrc}"
+);
+testPropertyEscapes(
+ /^\P{sc=Syriac}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Syriac}"
+);
+testPropertyEscapes(
+ /^\P{sc=Syrc}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Syrc}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tagalog.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tagalog.js
new file mode 100644
index 0000000000..cd35e7bd07
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tagalog.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Tagalog`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00171F
+ ],
+ ranges: [
+ [0x001700, 0x001715]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Tagalog}+$/u,
+ matchSymbols,
+ "\\p{Script=Tagalog}"
+);
+testPropertyEscapes(
+ /^\p{Script=Tglg}+$/u,
+ matchSymbols,
+ "\\p{Script=Tglg}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tagalog}+$/u,
+ matchSymbols,
+ "\\p{sc=Tagalog}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tglg}+$/u,
+ matchSymbols,
+ "\\p{sc=Tglg}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0016FF],
+ [0x001716, 0x00171E],
+ [0x001720, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Tagalog}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tagalog}"
+);
+testPropertyEscapes(
+ /^\P{Script=Tglg}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tglg}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tagalog}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tagalog}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tglg}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tglg}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tagbanwa.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tagbanwa.js
new file mode 100644
index 0000000000..5b77894a00
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tagbanwa.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Tagbanwa`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001760, 0x00176C],
+ [0x00176E, 0x001770],
+ [0x001772, 0x001773]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Tagbanwa}+$/u,
+ matchSymbols,
+ "\\p{Script=Tagbanwa}"
+);
+testPropertyEscapes(
+ /^\p{Script=Tagb}+$/u,
+ matchSymbols,
+ "\\p{Script=Tagb}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tagbanwa}+$/u,
+ matchSymbols,
+ "\\p{sc=Tagbanwa}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tagb}+$/u,
+ matchSymbols,
+ "\\p{sc=Tagb}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00176D,
+ 0x001771
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00175F],
+ [0x001774, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Tagbanwa}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tagbanwa}"
+);
+testPropertyEscapes(
+ /^\P{Script=Tagb}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tagb}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tagbanwa}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tagbanwa}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tagb}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tagb}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tai_Le.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tai_Le.js
new file mode 100644
index 0000000000..f5401bf993
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tai_Le.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Tai_Le`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001950, 0x00196D],
+ [0x001970, 0x001974]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Tai_Le}+$/u,
+ matchSymbols,
+ "\\p{Script=Tai_Le}"
+);
+testPropertyEscapes(
+ /^\p{Script=Tale}+$/u,
+ matchSymbols,
+ "\\p{Script=Tale}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tai_Le}+$/u,
+ matchSymbols,
+ "\\p{sc=Tai_Le}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tale}+$/u,
+ matchSymbols,
+ "\\p{sc=Tale}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00194F],
+ [0x00196E, 0x00196F],
+ [0x001975, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Tai_Le}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tai_Le}"
+);
+testPropertyEscapes(
+ /^\P{Script=Tale}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tale}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tai_Le}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tai_Le}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tale}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tale}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tai_Tham.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tai_Tham.js
new file mode 100644
index 0000000000..8b44fbc4e4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tai_Tham.js
@@ -0,0 +1,82 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Tai_Tham`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001A20, 0x001A5E],
+ [0x001A60, 0x001A7C],
+ [0x001A7F, 0x001A89],
+ [0x001A90, 0x001A99],
+ [0x001AA0, 0x001AAD]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Tai_Tham}+$/u,
+ matchSymbols,
+ "\\p{Script=Tai_Tham}"
+);
+testPropertyEscapes(
+ /^\p{Script=Lana}+$/u,
+ matchSymbols,
+ "\\p{Script=Lana}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tai_Tham}+$/u,
+ matchSymbols,
+ "\\p{sc=Tai_Tham}"
+);
+testPropertyEscapes(
+ /^\p{sc=Lana}+$/u,
+ matchSymbols,
+ "\\p{sc=Lana}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x001A5F
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x001A1F],
+ [0x001A7D, 0x001A7E],
+ [0x001A8A, 0x001A8F],
+ [0x001A9A, 0x001A9F],
+ [0x001AAE, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Tai_Tham}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tai_Tham}"
+);
+testPropertyEscapes(
+ /^\P{Script=Lana}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Lana}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tai_Tham}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tai_Tham}"
+);
+testPropertyEscapes(
+ /^\P{sc=Lana}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Lana}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tai_Viet.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tai_Viet.js
new file mode 100644
index 0000000000..768708086e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tai_Viet.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Tai_Viet`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00AA80, 0x00AAC2],
+ [0x00AADB, 0x00AADF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Tai_Viet}+$/u,
+ matchSymbols,
+ "\\p{Script=Tai_Viet}"
+);
+testPropertyEscapes(
+ /^\p{Script=Tavt}+$/u,
+ matchSymbols,
+ "\\p{Script=Tavt}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tai_Viet}+$/u,
+ matchSymbols,
+ "\\p{sc=Tai_Viet}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tavt}+$/u,
+ matchSymbols,
+ "\\p{sc=Tavt}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00AA7F],
+ [0x00AAC3, 0x00AADA],
+ [0x00AAE0, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Tai_Viet}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tai_Viet}"
+);
+testPropertyEscapes(
+ /^\P{Script=Tavt}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tavt}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tai_Viet}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tai_Viet}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tavt}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tavt}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Takri.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Takri.js
new file mode 100644
index 0000000000..f200277ff8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Takri.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Takri`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011680, 0x0116B9],
+ [0x0116C0, 0x0116C9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Takri}+$/u,
+ matchSymbols,
+ "\\p{Script=Takri}"
+);
+testPropertyEscapes(
+ /^\p{Script=Takr}+$/u,
+ matchSymbols,
+ "\\p{Script=Takr}"
+);
+testPropertyEscapes(
+ /^\p{sc=Takri}+$/u,
+ matchSymbols,
+ "\\p{sc=Takri}"
+);
+testPropertyEscapes(
+ /^\p{sc=Takr}+$/u,
+ matchSymbols,
+ "\\p{sc=Takr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01167F],
+ [0x0116BA, 0x0116BF],
+ [0x0116CA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Takri}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Takri}"
+);
+testPropertyEscapes(
+ /^\P{Script=Takr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Takr}"
+);
+testPropertyEscapes(
+ /^\P{sc=Takri}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Takri}"
+);
+testPropertyEscapes(
+ /^\P{sc=Takr}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Takr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tamil.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tamil.js
new file mode 100644
index 0000000000..9c874a21ed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tamil.js
@@ -0,0 +1,109 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Tamil`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000B9C,
+ 0x000BD0,
+ 0x000BD7,
+ 0x011FFF
+ ],
+ ranges: [
+ [0x000B82, 0x000B83],
+ [0x000B85, 0x000B8A],
+ [0x000B8E, 0x000B90],
+ [0x000B92, 0x000B95],
+ [0x000B99, 0x000B9A],
+ [0x000B9E, 0x000B9F],
+ [0x000BA3, 0x000BA4],
+ [0x000BA8, 0x000BAA],
+ [0x000BAE, 0x000BB9],
+ [0x000BBE, 0x000BC2],
+ [0x000BC6, 0x000BC8],
+ [0x000BCA, 0x000BCD],
+ [0x000BE6, 0x000BFA],
+ [0x011FC0, 0x011FF1]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Tamil}+$/u,
+ matchSymbols,
+ "\\p{Script=Tamil}"
+);
+testPropertyEscapes(
+ /^\p{Script=Taml}+$/u,
+ matchSymbols,
+ "\\p{Script=Taml}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tamil}+$/u,
+ matchSymbols,
+ "\\p{sc=Tamil}"
+);
+testPropertyEscapes(
+ /^\p{sc=Taml}+$/u,
+ matchSymbols,
+ "\\p{sc=Taml}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000B84,
+ 0x000B91,
+ 0x000B9B,
+ 0x000B9D,
+ 0x000BC9
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000B81],
+ [0x000B8B, 0x000B8D],
+ [0x000B96, 0x000B98],
+ [0x000BA0, 0x000BA2],
+ [0x000BA5, 0x000BA7],
+ [0x000BAB, 0x000BAD],
+ [0x000BBA, 0x000BBD],
+ [0x000BC3, 0x000BC5],
+ [0x000BCE, 0x000BCF],
+ [0x000BD1, 0x000BD6],
+ [0x000BD8, 0x000BE5],
+ [0x000BFB, 0x00DBFF],
+ [0x00E000, 0x011FBF],
+ [0x011FF2, 0x011FFE],
+ [0x012000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Tamil}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tamil}"
+);
+testPropertyEscapes(
+ /^\P{Script=Taml}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Taml}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tamil}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tamil}"
+);
+testPropertyEscapes(
+ /^\P{sc=Taml}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Taml}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tangsa.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tangsa.js
new file mode 100644
index 0000000000..9febb2d8a6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tangsa.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Tangsa`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x016A70, 0x016ABE],
+ [0x016AC0, 0x016AC9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Tangsa}+$/u,
+ matchSymbols,
+ "\\p{Script=Tangsa}"
+);
+testPropertyEscapes(
+ /^\p{Script=Tnsa}+$/u,
+ matchSymbols,
+ "\\p{Script=Tnsa}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tangsa}+$/u,
+ matchSymbols,
+ "\\p{sc=Tangsa}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tnsa}+$/u,
+ matchSymbols,
+ "\\p{sc=Tnsa}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x016ABF
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016A6F],
+ [0x016ACA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Tangsa}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tangsa}"
+);
+testPropertyEscapes(
+ /^\P{Script=Tnsa}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tnsa}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tangsa}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tangsa}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tnsa}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tnsa}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tangut.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tangut.js
new file mode 100644
index 0000000000..4f45e23385
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tangut.js
@@ -0,0 +1,80 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Tangut`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x016FE0
+ ],
+ ranges: [
+ [0x017000, 0x0187F7],
+ [0x018800, 0x018AFF],
+ [0x018D00, 0x018D08]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Tangut}+$/u,
+ matchSymbols,
+ "\\p{Script=Tangut}"
+);
+testPropertyEscapes(
+ /^\p{Script=Tang}+$/u,
+ matchSymbols,
+ "\\p{Script=Tang}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tangut}+$/u,
+ matchSymbols,
+ "\\p{sc=Tangut}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tang}+$/u,
+ matchSymbols,
+ "\\p{sc=Tang}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016FDF],
+ [0x016FE1, 0x016FFF],
+ [0x0187F8, 0x0187FF],
+ [0x018B00, 0x018CFF],
+ [0x018D09, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Tangut}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tangut}"
+);
+testPropertyEscapes(
+ /^\P{Script=Tang}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tang}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tangut}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tangut}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tang}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tang}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Telugu.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Telugu.js
new file mode 100644
index 0000000000..56ed03c4fe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Telugu.js
@@ -0,0 +1,99 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Telugu`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000C5D
+ ],
+ ranges: [
+ [0x000C00, 0x000C0C],
+ [0x000C0E, 0x000C10],
+ [0x000C12, 0x000C28],
+ [0x000C2A, 0x000C39],
+ [0x000C3C, 0x000C44],
+ [0x000C46, 0x000C48],
+ [0x000C4A, 0x000C4D],
+ [0x000C55, 0x000C56],
+ [0x000C58, 0x000C5A],
+ [0x000C60, 0x000C63],
+ [0x000C66, 0x000C6F],
+ [0x000C77, 0x000C7F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Telugu}+$/u,
+ matchSymbols,
+ "\\p{Script=Telugu}"
+);
+testPropertyEscapes(
+ /^\p{Script=Telu}+$/u,
+ matchSymbols,
+ "\\p{Script=Telu}"
+);
+testPropertyEscapes(
+ /^\p{sc=Telugu}+$/u,
+ matchSymbols,
+ "\\p{sc=Telugu}"
+);
+testPropertyEscapes(
+ /^\p{sc=Telu}+$/u,
+ matchSymbols,
+ "\\p{sc=Telu}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000C0D,
+ 0x000C11,
+ 0x000C29,
+ 0x000C45,
+ 0x000C49,
+ 0x000C57
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000BFF],
+ [0x000C3A, 0x000C3B],
+ [0x000C4E, 0x000C54],
+ [0x000C5B, 0x000C5C],
+ [0x000C5E, 0x000C5F],
+ [0x000C64, 0x000C65],
+ [0x000C70, 0x000C76],
+ [0x000C80, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Telugu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Telugu}"
+);
+testPropertyEscapes(
+ /^\P{Script=Telu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Telu}"
+);
+testPropertyEscapes(
+ /^\P{sc=Telugu}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Telugu}"
+);
+testPropertyEscapes(
+ /^\P{sc=Telu}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Telu}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Thaana.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Thaana.js
new file mode 100644
index 0000000000..8586e6dd09
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Thaana.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Thaana`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000780, 0x0007B1]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Thaana}+$/u,
+ matchSymbols,
+ "\\p{Script=Thaana}"
+);
+testPropertyEscapes(
+ /^\p{Script=Thaa}+$/u,
+ matchSymbols,
+ "\\p{Script=Thaa}"
+);
+testPropertyEscapes(
+ /^\p{sc=Thaana}+$/u,
+ matchSymbols,
+ "\\p{sc=Thaana}"
+);
+testPropertyEscapes(
+ /^\p{sc=Thaa}+$/u,
+ matchSymbols,
+ "\\p{sc=Thaa}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00077F],
+ [0x0007B2, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Thaana}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Thaana}"
+);
+testPropertyEscapes(
+ /^\P{Script=Thaa}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Thaa}"
+);
+testPropertyEscapes(
+ /^\P{sc=Thaana}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Thaana}"
+);
+testPropertyEscapes(
+ /^\P{sc=Thaa}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Thaa}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Thai.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Thai.js
new file mode 100644
index 0000000000..cad12cc326
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Thai.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Thai`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000E01, 0x000E3A],
+ [0x000E40, 0x000E5B]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Thai}+$/u,
+ matchSymbols,
+ "\\p{Script=Thai}"
+);
+testPropertyEscapes(
+ /^\p{Script=Thai}+$/u,
+ matchSymbols,
+ "\\p{Script=Thai}"
+);
+testPropertyEscapes(
+ /^\p{sc=Thai}+$/u,
+ matchSymbols,
+ "\\p{sc=Thai}"
+);
+testPropertyEscapes(
+ /^\p{sc=Thai}+$/u,
+ matchSymbols,
+ "\\p{sc=Thai}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000E00],
+ [0x000E3B, 0x000E3F],
+ [0x000E5C, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Thai}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Thai}"
+);
+testPropertyEscapes(
+ /^\P{Script=Thai}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Thai}"
+);
+testPropertyEscapes(
+ /^\P{sc=Thai}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Thai}"
+);
+testPropertyEscapes(
+ /^\P{sc=Thai}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Thai}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tibetan.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tibetan.js
new file mode 100644
index 0000000000..e32390ab8b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tibetan.js
@@ -0,0 +1,86 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Tibetan`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000F00, 0x000F47],
+ [0x000F49, 0x000F6C],
+ [0x000F71, 0x000F97],
+ [0x000F99, 0x000FBC],
+ [0x000FBE, 0x000FCC],
+ [0x000FCE, 0x000FD4],
+ [0x000FD9, 0x000FDA]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Tibetan}+$/u,
+ matchSymbols,
+ "\\p{Script=Tibetan}"
+);
+testPropertyEscapes(
+ /^\p{Script=Tibt}+$/u,
+ matchSymbols,
+ "\\p{Script=Tibt}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tibetan}+$/u,
+ matchSymbols,
+ "\\p{sc=Tibetan}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tibt}+$/u,
+ matchSymbols,
+ "\\p{sc=Tibt}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000F48,
+ 0x000F98,
+ 0x000FBD,
+ 0x000FCD
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000EFF],
+ [0x000F6D, 0x000F70],
+ [0x000FD5, 0x000FD8],
+ [0x000FDB, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Tibetan}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tibetan}"
+);
+testPropertyEscapes(
+ /^\P{Script=Tibt}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tibt}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tibetan}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tibetan}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tibt}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tibt}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tifinagh.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tifinagh.js
new file mode 100644
index 0000000000..ee0545667a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tifinagh.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Tifinagh`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x002D7F
+ ],
+ ranges: [
+ [0x002D30, 0x002D67],
+ [0x002D6F, 0x002D70]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Tifinagh}+$/u,
+ matchSymbols,
+ "\\p{Script=Tifinagh}"
+);
+testPropertyEscapes(
+ /^\p{Script=Tfng}+$/u,
+ matchSymbols,
+ "\\p{Script=Tfng}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tifinagh}+$/u,
+ matchSymbols,
+ "\\p{sc=Tifinagh}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tfng}+$/u,
+ matchSymbols,
+ "\\p{sc=Tfng}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x002D2F],
+ [0x002D68, 0x002D6E],
+ [0x002D71, 0x002D7E],
+ [0x002D80, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Tifinagh}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tifinagh}"
+);
+testPropertyEscapes(
+ /^\P{Script=Tfng}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tfng}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tifinagh}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tifinagh}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tfng}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tfng}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tirhuta.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tirhuta.js
new file mode 100644
index 0000000000..f500524553
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Tirhuta.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Tirhuta`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011480, 0x0114C7],
+ [0x0114D0, 0x0114D9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Tirhuta}+$/u,
+ matchSymbols,
+ "\\p{Script=Tirhuta}"
+);
+testPropertyEscapes(
+ /^\p{Script=Tirh}+$/u,
+ matchSymbols,
+ "\\p{Script=Tirh}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tirhuta}+$/u,
+ matchSymbols,
+ "\\p{sc=Tirhuta}"
+);
+testPropertyEscapes(
+ /^\p{sc=Tirh}+$/u,
+ matchSymbols,
+ "\\p{sc=Tirh}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01147F],
+ [0x0114C8, 0x0114CF],
+ [0x0114DA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Tirhuta}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tirhuta}"
+);
+testPropertyEscapes(
+ /^\P{Script=Tirh}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Tirh}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tirhuta}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tirhuta}"
+);
+testPropertyEscapes(
+ /^\P{sc=Tirh}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Tirh}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Toto.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Toto.js
new file mode 100644
index 0000000000..39d7560608
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Toto.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Toto`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x01E290, 0x01E2AE]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Toto}+$/u,
+ matchSymbols,
+ "\\p{Script=Toto}"
+);
+testPropertyEscapes(
+ /^\p{Script=Toto}+$/u,
+ matchSymbols,
+ "\\p{Script=Toto}"
+);
+testPropertyEscapes(
+ /^\p{sc=Toto}+$/u,
+ matchSymbols,
+ "\\p{sc=Toto}"
+);
+testPropertyEscapes(
+ /^\p{sc=Toto}+$/u,
+ matchSymbols,
+ "\\p{sc=Toto}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01E28F],
+ [0x01E2AF, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Toto}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Toto}"
+);
+testPropertyEscapes(
+ /^\P{Script=Toto}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Toto}"
+);
+testPropertyEscapes(
+ /^\P{sc=Toto}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Toto}"
+);
+testPropertyEscapes(
+ /^\P{sc=Toto}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Toto}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ugaritic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ugaritic.js
new file mode 100644
index 0000000000..5b22589700
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Ugaritic.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Ugaritic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x01039F
+ ],
+ ranges: [
+ [0x010380, 0x01039D]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Ugaritic}+$/u,
+ matchSymbols,
+ "\\p{Script=Ugaritic}"
+);
+testPropertyEscapes(
+ /^\p{Script=Ugar}+$/u,
+ matchSymbols,
+ "\\p{Script=Ugar}"
+);
+testPropertyEscapes(
+ /^\p{sc=Ugaritic}+$/u,
+ matchSymbols,
+ "\\p{sc=Ugaritic}"
+);
+testPropertyEscapes(
+ /^\p{sc=Ugar}+$/u,
+ matchSymbols,
+ "\\p{sc=Ugar}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x01039E
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01037F],
+ [0x0103A0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Ugaritic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Ugaritic}"
+);
+testPropertyEscapes(
+ /^\P{Script=Ugar}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Ugar}"
+);
+testPropertyEscapes(
+ /^\P{sc=Ugaritic}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Ugaritic}"
+);
+testPropertyEscapes(
+ /^\P{sc=Ugar}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Ugar}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Vai.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Vai.js
new file mode 100644
index 0000000000..a6e75de0b0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Vai.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Vai`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00A500, 0x00A62B]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Vai}+$/u,
+ matchSymbols,
+ "\\p{Script=Vai}"
+);
+testPropertyEscapes(
+ /^\p{Script=Vaii}+$/u,
+ matchSymbols,
+ "\\p{Script=Vaii}"
+);
+testPropertyEscapes(
+ /^\p{sc=Vai}+$/u,
+ matchSymbols,
+ "\\p{sc=Vai}"
+);
+testPropertyEscapes(
+ /^\p{sc=Vaii}+$/u,
+ matchSymbols,
+ "\\p{sc=Vaii}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A4FF],
+ [0x00A62C, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Vai}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Vai}"
+);
+testPropertyEscapes(
+ /^\P{Script=Vaii}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Vaii}"
+);
+testPropertyEscapes(
+ /^\P{sc=Vai}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Vai}"
+);
+testPropertyEscapes(
+ /^\P{sc=Vaii}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Vaii}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Vithkuqi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Vithkuqi.js
new file mode 100644
index 0000000000..1a676466dd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Vithkuqi.js
@@ -0,0 +1,88 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Vithkuqi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010570, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Vithkuqi}+$/u,
+ matchSymbols,
+ "\\p{Script=Vithkuqi}"
+);
+testPropertyEscapes(
+ /^\p{Script=Vith}+$/u,
+ matchSymbols,
+ "\\p{Script=Vith}"
+);
+testPropertyEscapes(
+ /^\p{sc=Vithkuqi}+$/u,
+ matchSymbols,
+ "\\p{sc=Vithkuqi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Vith}+$/u,
+ matchSymbols,
+ "\\p{sc=Vith}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x010596,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01056F],
+ [0x0105BD, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Vithkuqi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Vithkuqi}"
+);
+testPropertyEscapes(
+ /^\P{Script=Vith}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Vith}"
+);
+testPropertyEscapes(
+ /^\P{sc=Vithkuqi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Vithkuqi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Vith}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Vith}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Wancho.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Wancho.js
new file mode 100644
index 0000000000..70e6910fef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Wancho.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Wancho`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x01E2FF
+ ],
+ ranges: [
+ [0x01E2C0, 0x01E2F9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Wancho}+$/u,
+ matchSymbols,
+ "\\p{Script=Wancho}"
+);
+testPropertyEscapes(
+ /^\p{Script=Wcho}+$/u,
+ matchSymbols,
+ "\\p{Script=Wcho}"
+);
+testPropertyEscapes(
+ /^\p{sc=Wancho}+$/u,
+ matchSymbols,
+ "\\p{sc=Wancho}"
+);
+testPropertyEscapes(
+ /^\p{sc=Wcho}+$/u,
+ matchSymbols,
+ "\\p{sc=Wcho}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01E2BF],
+ [0x01E2FA, 0x01E2FE],
+ [0x01E300, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Wancho}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Wancho}"
+);
+testPropertyEscapes(
+ /^\P{Script=Wcho}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Wcho}"
+);
+testPropertyEscapes(
+ /^\P{sc=Wancho}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Wancho}"
+);
+testPropertyEscapes(
+ /^\P{sc=Wcho}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Wcho}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Warang_Citi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Warang_Citi.js
new file mode 100644
index 0000000000..346c428391
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Warang_Citi.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Warang_Citi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0118FF
+ ],
+ ranges: [
+ [0x0118A0, 0x0118F2]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Warang_Citi}+$/u,
+ matchSymbols,
+ "\\p{Script=Warang_Citi}"
+);
+testPropertyEscapes(
+ /^\p{Script=Wara}+$/u,
+ matchSymbols,
+ "\\p{Script=Wara}"
+);
+testPropertyEscapes(
+ /^\p{sc=Warang_Citi}+$/u,
+ matchSymbols,
+ "\\p{sc=Warang_Citi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Wara}+$/u,
+ matchSymbols,
+ "\\p{sc=Wara}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01189F],
+ [0x0118F3, 0x0118FE],
+ [0x011900, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Warang_Citi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Warang_Citi}"
+);
+testPropertyEscapes(
+ /^\P{Script=Wara}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Wara}"
+);
+testPropertyEscapes(
+ /^\P{sc=Warang_Citi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Warang_Citi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Wara}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Wara}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Yezidi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Yezidi.js
new file mode 100644
index 0000000000..7462f9fc92
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Yezidi.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Yezidi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010E80, 0x010EA9],
+ [0x010EAB, 0x010EAD],
+ [0x010EB0, 0x010EB1]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Yezidi}+$/u,
+ matchSymbols,
+ "\\p{Script=Yezidi}"
+);
+testPropertyEscapes(
+ /^\p{Script=Yezi}+$/u,
+ matchSymbols,
+ "\\p{Script=Yezi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Yezidi}+$/u,
+ matchSymbols,
+ "\\p{sc=Yezidi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Yezi}+$/u,
+ matchSymbols,
+ "\\p{sc=Yezi}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x010EAA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010E7F],
+ [0x010EAE, 0x010EAF],
+ [0x010EB2, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Yezidi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Yezidi}"
+);
+testPropertyEscapes(
+ /^\P{Script=Yezi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Yezi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Yezidi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Yezidi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Yezi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Yezi}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Yi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Yi.js
new file mode 100644
index 0000000000..f1b2009bc0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Yi.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Yi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00A000, 0x00A48C],
+ [0x00A490, 0x00A4C6]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Yi}+$/u,
+ matchSymbols,
+ "\\p{Script=Yi}"
+);
+testPropertyEscapes(
+ /^\p{Script=Yiii}+$/u,
+ matchSymbols,
+ "\\p{Script=Yiii}"
+);
+testPropertyEscapes(
+ /^\p{sc=Yi}+$/u,
+ matchSymbols,
+ "\\p{sc=Yi}"
+);
+testPropertyEscapes(
+ /^\p{sc=Yiii}+$/u,
+ matchSymbols,
+ "\\p{sc=Yiii}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x009FFF],
+ [0x00A48D, 0x00A48F],
+ [0x00A4C7, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Yi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Yi}"
+);
+testPropertyEscapes(
+ /^\P{Script=Yiii}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Yiii}"
+);
+testPropertyEscapes(
+ /^\P{sc=Yi}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Yi}"
+);
+testPropertyEscapes(
+ /^\P{sc=Yiii}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Yiii}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Zanabazar_Square.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Zanabazar_Square.js
new file mode 100644
index 0000000000..7d02f1415a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_-_Zanabazar_Square.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script=Zanabazar_Square`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011A00, 0x011A47]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script=Zanabazar_Square}+$/u,
+ matchSymbols,
+ "\\p{Script=Zanabazar_Square}"
+);
+testPropertyEscapes(
+ /^\p{Script=Zanb}+$/u,
+ matchSymbols,
+ "\\p{Script=Zanb}"
+);
+testPropertyEscapes(
+ /^\p{sc=Zanabazar_Square}+$/u,
+ matchSymbols,
+ "\\p{sc=Zanabazar_Square}"
+);
+testPropertyEscapes(
+ /^\p{sc=Zanb}+$/u,
+ matchSymbols,
+ "\\p{sc=Zanb}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0119FF],
+ [0x011A48, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script=Zanabazar_Square}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Zanabazar_Square}"
+);
+testPropertyEscapes(
+ /^\P{Script=Zanb}+$/u,
+ nonMatchSymbols,
+ "\\P{Script=Zanb}"
+);
+testPropertyEscapes(
+ /^\P{sc=Zanabazar_Square}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Zanabazar_Square}"
+);
+testPropertyEscapes(
+ /^\P{sc=Zanb}+$/u,
+ nonMatchSymbols,
+ "\\P{sc=Zanb}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Adlam.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Adlam.js
new file mode 100644
index 0000000000..d5ee47f816
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Adlam.js
@@ -0,0 +1,82 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Adlam`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00061F,
+ 0x000640
+ ],
+ ranges: [
+ [0x01E900, 0x01E94B],
+ [0x01E950, 0x01E959],
+ [0x01E95E, 0x01E95F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Adlam}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Adlam}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Adlm}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Adlm}"
+);
+testPropertyEscapes(
+ /^\p{scx=Adlam}+$/u,
+ matchSymbols,
+ "\\p{scx=Adlam}"
+);
+testPropertyEscapes(
+ /^\p{scx=Adlm}+$/u,
+ matchSymbols,
+ "\\p{scx=Adlm}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00061E],
+ [0x000620, 0x00063F],
+ [0x000641, 0x00DBFF],
+ [0x00E000, 0x01E8FF],
+ [0x01E94C, 0x01E94F],
+ [0x01E95A, 0x01E95D],
+ [0x01E960, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Adlam}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Adlam}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Adlm}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Adlm}"
+);
+testPropertyEscapes(
+ /^\P{scx=Adlam}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Adlam}"
+);
+testPropertyEscapes(
+ /^\P{scx=Adlm}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Adlm}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ahom.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ahom.js
new file mode 100644
index 0000000000..bffff29411
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ahom.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Ahom`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011700, 0x01171A],
+ [0x01171D, 0x01172B],
+ [0x011730, 0x011746]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Ahom}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Ahom}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Ahom}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Ahom}"
+);
+testPropertyEscapes(
+ /^\p{scx=Ahom}+$/u,
+ matchSymbols,
+ "\\p{scx=Ahom}"
+);
+testPropertyEscapes(
+ /^\p{scx=Ahom}+$/u,
+ matchSymbols,
+ "\\p{scx=Ahom}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0116FF],
+ [0x01171B, 0x01171C],
+ [0x01172C, 0x01172F],
+ [0x011747, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Ahom}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Ahom}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Ahom}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Ahom}"
+);
+testPropertyEscapes(
+ /^\P{scx=Ahom}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Ahom}"
+);
+testPropertyEscapes(
+ /^\P{scx=Ahom}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Ahom}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Anatolian_Hieroglyphs.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Anatolian_Hieroglyphs.js
new file mode 100644
index 0000000000..5c941fe3e6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Anatolian_Hieroglyphs.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Anatolian_Hieroglyphs`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x014400, 0x014646]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Anatolian_Hieroglyphs}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Anatolian_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Hluw}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Hluw}"
+);
+testPropertyEscapes(
+ /^\p{scx=Anatolian_Hieroglyphs}+$/u,
+ matchSymbols,
+ "\\p{scx=Anatolian_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\p{scx=Hluw}+$/u,
+ matchSymbols,
+ "\\p{scx=Hluw}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0143FF],
+ [0x014647, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Anatolian_Hieroglyphs}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Anatolian_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Hluw}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Hluw}"
+);
+testPropertyEscapes(
+ /^\P{scx=Anatolian_Hieroglyphs}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Anatolian_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\P{scx=Hluw}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Hluw}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Arabic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Arabic.js
new file mode 100644
index 0000000000..bf3ac399a9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Arabic.js
@@ -0,0 +1,177 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Arabic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00FDCF,
+ 0x01EE24,
+ 0x01EE27,
+ 0x01EE39,
+ 0x01EE3B,
+ 0x01EE42,
+ 0x01EE47,
+ 0x01EE49,
+ 0x01EE4B,
+ 0x01EE54,
+ 0x01EE57,
+ 0x01EE59,
+ 0x01EE5B,
+ 0x01EE5D,
+ 0x01EE5F,
+ 0x01EE64,
+ 0x01EE7E
+ ],
+ ranges: [
+ [0x000600, 0x000604],
+ [0x000606, 0x0006DC],
+ [0x0006DE, 0x0006FF],
+ [0x000750, 0x00077F],
+ [0x000870, 0x00088E],
+ [0x000890, 0x000891],
+ [0x000898, 0x0008E1],
+ [0x0008E3, 0x0008FF],
+ [0x00FB50, 0x00FBC2],
+ [0x00FBD3, 0x00FD8F],
+ [0x00FD92, 0x00FDC7],
+ [0x00FDF0, 0x00FDFF],
+ [0x00FE70, 0x00FE74],
+ [0x00FE76, 0x00FEFC],
+ [0x0102E0, 0x0102FB],
+ [0x010E60, 0x010E7E],
+ [0x010EFD, 0x010EFF],
+ [0x01EE00, 0x01EE03],
+ [0x01EE05, 0x01EE1F],
+ [0x01EE21, 0x01EE22],
+ [0x01EE29, 0x01EE32],
+ [0x01EE34, 0x01EE37],
+ [0x01EE4D, 0x01EE4F],
+ [0x01EE51, 0x01EE52],
+ [0x01EE61, 0x01EE62],
+ [0x01EE67, 0x01EE6A],
+ [0x01EE6C, 0x01EE72],
+ [0x01EE74, 0x01EE77],
+ [0x01EE79, 0x01EE7C],
+ [0x01EE80, 0x01EE89],
+ [0x01EE8B, 0x01EE9B],
+ [0x01EEA1, 0x01EEA3],
+ [0x01EEA5, 0x01EEA9],
+ [0x01EEAB, 0x01EEBB],
+ [0x01EEF0, 0x01EEF1]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Arabic}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Arabic}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Arab}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Arab}"
+);
+testPropertyEscapes(
+ /^\p{scx=Arabic}+$/u,
+ matchSymbols,
+ "\\p{scx=Arabic}"
+);
+testPropertyEscapes(
+ /^\p{scx=Arab}+$/u,
+ matchSymbols,
+ "\\p{scx=Arab}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000605,
+ 0x0006DD,
+ 0x00088F,
+ 0x0008E2,
+ 0x00FE75,
+ 0x01EE04,
+ 0x01EE20,
+ 0x01EE23,
+ 0x01EE28,
+ 0x01EE33,
+ 0x01EE38,
+ 0x01EE3A,
+ 0x01EE48,
+ 0x01EE4A,
+ 0x01EE4C,
+ 0x01EE50,
+ 0x01EE53,
+ 0x01EE58,
+ 0x01EE5A,
+ 0x01EE5C,
+ 0x01EE5E,
+ 0x01EE60,
+ 0x01EE63,
+ 0x01EE6B,
+ 0x01EE73,
+ 0x01EE78,
+ 0x01EE7D,
+ 0x01EE7F,
+ 0x01EE8A,
+ 0x01EEA4,
+ 0x01EEAA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0005FF],
+ [0x000700, 0x00074F],
+ [0x000780, 0x00086F],
+ [0x000892, 0x000897],
+ [0x000900, 0x00DBFF],
+ [0x00E000, 0x00FB4F],
+ [0x00FBC3, 0x00FBD2],
+ [0x00FD90, 0x00FD91],
+ [0x00FDC8, 0x00FDCE],
+ [0x00FDD0, 0x00FDEF],
+ [0x00FE00, 0x00FE6F],
+ [0x00FEFD, 0x0102DF],
+ [0x0102FC, 0x010E5F],
+ [0x010E7F, 0x010EFC],
+ [0x010F00, 0x01EDFF],
+ [0x01EE25, 0x01EE26],
+ [0x01EE3C, 0x01EE41],
+ [0x01EE43, 0x01EE46],
+ [0x01EE55, 0x01EE56],
+ [0x01EE65, 0x01EE66],
+ [0x01EE9C, 0x01EEA0],
+ [0x01EEBC, 0x01EEEF],
+ [0x01EEF2, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Arabic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Arabic}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Arab}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Arab}"
+);
+testPropertyEscapes(
+ /^\P{scx=Arabic}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Arabic}"
+);
+testPropertyEscapes(
+ /^\P{scx=Arab}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Arab}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Armenian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Armenian.js
new file mode 100644
index 0000000000..fcc3f26198
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Armenian.js
@@ -0,0 +1,79 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Armenian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000531, 0x000556],
+ [0x000559, 0x00058A],
+ [0x00058D, 0x00058F],
+ [0x00FB13, 0x00FB17]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Armenian}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Armenian}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Armn}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Armn}"
+);
+testPropertyEscapes(
+ /^\p{scx=Armenian}+$/u,
+ matchSymbols,
+ "\\p{scx=Armenian}"
+);
+testPropertyEscapes(
+ /^\p{scx=Armn}+$/u,
+ matchSymbols,
+ "\\p{scx=Armn}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000530],
+ [0x000557, 0x000558],
+ [0x00058B, 0x00058C],
+ [0x000590, 0x00DBFF],
+ [0x00E000, 0x00FB12],
+ [0x00FB18, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Armenian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Armenian}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Armn}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Armn}"
+);
+testPropertyEscapes(
+ /^\P{scx=Armenian}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Armenian}"
+);
+testPropertyEscapes(
+ /^\P{scx=Armn}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Armn}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Avestan.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Avestan.js
new file mode 100644
index 0000000000..65d9cc606e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Avestan.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Avestan`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010B00, 0x010B35],
+ [0x010B39, 0x010B3F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Avestan}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Avestan}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Avst}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Avst}"
+);
+testPropertyEscapes(
+ /^\p{scx=Avestan}+$/u,
+ matchSymbols,
+ "\\p{scx=Avestan}"
+);
+testPropertyEscapes(
+ /^\p{scx=Avst}+$/u,
+ matchSymbols,
+ "\\p{scx=Avst}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010AFF],
+ [0x010B36, 0x010B38],
+ [0x010B40, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Avestan}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Avestan}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Avst}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Avst}"
+);
+testPropertyEscapes(
+ /^\P{scx=Avestan}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Avestan}"
+);
+testPropertyEscapes(
+ /^\P{scx=Avst}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Avst}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Balinese.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Balinese.js
new file mode 100644
index 0000000000..efdc3dbfe6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Balinese.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Balinese`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001B00, 0x001B4C],
+ [0x001B50, 0x001B7E]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Balinese}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Balinese}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Bali}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Bali}"
+);
+testPropertyEscapes(
+ /^\p{scx=Balinese}+$/u,
+ matchSymbols,
+ "\\p{scx=Balinese}"
+);
+testPropertyEscapes(
+ /^\p{scx=Bali}+$/u,
+ matchSymbols,
+ "\\p{scx=Bali}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x001AFF],
+ [0x001B4D, 0x001B4F],
+ [0x001B7F, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Balinese}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Balinese}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Bali}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Bali}"
+);
+testPropertyEscapes(
+ /^\P{scx=Balinese}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Balinese}"
+);
+testPropertyEscapes(
+ /^\P{scx=Bali}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Bali}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bamum.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bamum.js
new file mode 100644
index 0000000000..1db5899874
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bamum.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Bamum`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00A6A0, 0x00A6F7],
+ [0x016800, 0x016A38]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Bamum}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Bamum}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Bamu}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Bamu}"
+);
+testPropertyEscapes(
+ /^\p{scx=Bamum}+$/u,
+ matchSymbols,
+ "\\p{scx=Bamum}"
+);
+testPropertyEscapes(
+ /^\p{scx=Bamu}+$/u,
+ matchSymbols,
+ "\\p{scx=Bamu}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A69F],
+ [0x00A6F8, 0x00DBFF],
+ [0x00E000, 0x0167FF],
+ [0x016A39, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Bamum}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Bamum}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Bamu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Bamu}"
+);
+testPropertyEscapes(
+ /^\P{scx=Bamum}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Bamum}"
+);
+testPropertyEscapes(
+ /^\P{scx=Bamu}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Bamu}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bassa_Vah.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bassa_Vah.js
new file mode 100644
index 0000000000..b24f7091a1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bassa_Vah.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Bassa_Vah`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x016AD0, 0x016AED],
+ [0x016AF0, 0x016AF5]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Bassa_Vah}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Bassa_Vah}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Bass}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Bass}"
+);
+testPropertyEscapes(
+ /^\p{scx=Bassa_Vah}+$/u,
+ matchSymbols,
+ "\\p{scx=Bassa_Vah}"
+);
+testPropertyEscapes(
+ /^\p{scx=Bass}+$/u,
+ matchSymbols,
+ "\\p{scx=Bass}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016ACF],
+ [0x016AEE, 0x016AEF],
+ [0x016AF6, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Bassa_Vah}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Bassa_Vah}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Bass}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Bass}"
+);
+testPropertyEscapes(
+ /^\P{scx=Bassa_Vah}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Bassa_Vah}"
+);
+testPropertyEscapes(
+ /^\P{scx=Bass}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Bass}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Batak.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Batak.js
new file mode 100644
index 0000000000..10a8d4c3e9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Batak.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Batak`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001BC0, 0x001BF3],
+ [0x001BFC, 0x001BFF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Batak}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Batak}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Batk}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Batk}"
+);
+testPropertyEscapes(
+ /^\p{scx=Batak}+$/u,
+ matchSymbols,
+ "\\p{scx=Batak}"
+);
+testPropertyEscapes(
+ /^\p{scx=Batk}+$/u,
+ matchSymbols,
+ "\\p{scx=Batk}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x001BBF],
+ [0x001BF4, 0x001BFB],
+ [0x001C00, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Batak}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Batak}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Batk}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Batk}"
+);
+testPropertyEscapes(
+ /^\P{scx=Batak}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Batak}"
+);
+testPropertyEscapes(
+ /^\P{scx=Batk}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Batk}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bengali.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bengali.js
new file mode 100644
index 0000000000..bec6fa9d8b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bengali.js
@@ -0,0 +1,125 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Bengali`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0009B2,
+ 0x0009D7,
+ 0x001CD0,
+ 0x001CD2,
+ 0x001CD8,
+ 0x001CE1,
+ 0x001CEA,
+ 0x001CED,
+ 0x001CF2,
+ 0x00A8F1
+ ],
+ ranges: [
+ [0x000951, 0x000952],
+ [0x000964, 0x000965],
+ [0x000980, 0x000983],
+ [0x000985, 0x00098C],
+ [0x00098F, 0x000990],
+ [0x000993, 0x0009A8],
+ [0x0009AA, 0x0009B0],
+ [0x0009B6, 0x0009B9],
+ [0x0009BC, 0x0009C4],
+ [0x0009C7, 0x0009C8],
+ [0x0009CB, 0x0009CE],
+ [0x0009DC, 0x0009DD],
+ [0x0009DF, 0x0009E3],
+ [0x0009E6, 0x0009FE],
+ [0x001CD5, 0x001CD6],
+ [0x001CF5, 0x001CF7]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Bengali}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Bengali}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Beng}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Beng}"
+);
+testPropertyEscapes(
+ /^\p{scx=Bengali}+$/u,
+ matchSymbols,
+ "\\p{scx=Bengali}"
+);
+testPropertyEscapes(
+ /^\p{scx=Beng}+$/u,
+ matchSymbols,
+ "\\p{scx=Beng}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000984,
+ 0x0009A9,
+ 0x0009B1,
+ 0x0009DE,
+ 0x001CD1,
+ 0x001CD7
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000950],
+ [0x000953, 0x000963],
+ [0x000966, 0x00097F],
+ [0x00098D, 0x00098E],
+ [0x000991, 0x000992],
+ [0x0009B3, 0x0009B5],
+ [0x0009BA, 0x0009BB],
+ [0x0009C5, 0x0009C6],
+ [0x0009C9, 0x0009CA],
+ [0x0009CF, 0x0009D6],
+ [0x0009D8, 0x0009DB],
+ [0x0009E4, 0x0009E5],
+ [0x0009FF, 0x001CCF],
+ [0x001CD3, 0x001CD4],
+ [0x001CD9, 0x001CE0],
+ [0x001CE2, 0x001CE9],
+ [0x001CEB, 0x001CEC],
+ [0x001CEE, 0x001CF1],
+ [0x001CF3, 0x001CF4],
+ [0x001CF8, 0x00A8F0],
+ [0x00A8F2, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Bengali}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Bengali}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Beng}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Beng}"
+);
+testPropertyEscapes(
+ /^\P{scx=Bengali}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Bengali}"
+);
+testPropertyEscapes(
+ /^\P{scx=Beng}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Beng}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bhaiksuki.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bhaiksuki.js
new file mode 100644
index 0000000000..b5cf844615
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bhaiksuki.js
@@ -0,0 +1,80 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Bhaiksuki`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011C00, 0x011C08],
+ [0x011C0A, 0x011C36],
+ [0x011C38, 0x011C45],
+ [0x011C50, 0x011C6C]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Bhaiksuki}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Bhaiksuki}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Bhks}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Bhks}"
+);
+testPropertyEscapes(
+ /^\p{scx=Bhaiksuki}+$/u,
+ matchSymbols,
+ "\\p{scx=Bhaiksuki}"
+);
+testPropertyEscapes(
+ /^\p{scx=Bhks}+$/u,
+ matchSymbols,
+ "\\p{scx=Bhks}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011C09,
+ 0x011C37
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x011BFF],
+ [0x011C46, 0x011C4F],
+ [0x011C6D, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Bhaiksuki}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Bhaiksuki}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Bhks}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Bhks}"
+);
+testPropertyEscapes(
+ /^\P{scx=Bhaiksuki}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Bhaiksuki}"
+);
+testPropertyEscapes(
+ /^\P{scx=Bhks}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Bhks}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bopomofo.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bopomofo.js
new file mode 100644
index 0000000000..9157a84b65
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bopomofo.js
@@ -0,0 +1,97 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Bopomofo`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x003030,
+ 0x003037,
+ 0x0030FB
+ ],
+ ranges: [
+ [0x0002EA, 0x0002EB],
+ [0x003001, 0x003003],
+ [0x003008, 0x003011],
+ [0x003013, 0x00301F],
+ [0x00302A, 0x00302D],
+ [0x003105, 0x00312F],
+ [0x0031A0, 0x0031BF],
+ [0x00FE45, 0x00FE46],
+ [0x00FF61, 0x00FF65]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Bopomofo}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Bopomofo}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Bopo}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Bopo}"
+);
+testPropertyEscapes(
+ /^\p{scx=Bopomofo}+$/u,
+ matchSymbols,
+ "\\p{scx=Bopomofo}"
+);
+testPropertyEscapes(
+ /^\p{scx=Bopo}+$/u,
+ matchSymbols,
+ "\\p{scx=Bopo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x003012
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0002E9],
+ [0x0002EC, 0x003000],
+ [0x003004, 0x003007],
+ [0x003020, 0x003029],
+ [0x00302E, 0x00302F],
+ [0x003031, 0x003036],
+ [0x003038, 0x0030FA],
+ [0x0030FC, 0x003104],
+ [0x003130, 0x00319F],
+ [0x0031C0, 0x00DBFF],
+ [0x00E000, 0x00FE44],
+ [0x00FE47, 0x00FF60],
+ [0x00FF66, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Bopomofo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Bopomofo}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Bopo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Bopo}"
+);
+testPropertyEscapes(
+ /^\P{scx=Bopomofo}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Bopomofo}"
+);
+testPropertyEscapes(
+ /^\P{scx=Bopo}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Bopo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Brahmi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Brahmi.js
new file mode 100644
index 0000000000..e0893552d9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Brahmi.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Brahmi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x01107F
+ ],
+ ranges: [
+ [0x011000, 0x01104D],
+ [0x011052, 0x011075]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Brahmi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Brahmi}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Brah}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Brah}"
+);
+testPropertyEscapes(
+ /^\p{scx=Brahmi}+$/u,
+ matchSymbols,
+ "\\p{scx=Brahmi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Brah}+$/u,
+ matchSymbols,
+ "\\p{scx=Brah}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010FFF],
+ [0x01104E, 0x011051],
+ [0x011076, 0x01107E],
+ [0x011080, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Brahmi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Brahmi}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Brah}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Brah}"
+);
+testPropertyEscapes(
+ /^\P{scx=Brahmi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Brahmi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Brah}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Brah}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Braille.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Braille.js
new file mode 100644
index 0000000000..7a74206929
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Braille.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Braille`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x002800, 0x0028FF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Braille}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Braille}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Brai}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Brai}"
+);
+testPropertyEscapes(
+ /^\p{scx=Braille}+$/u,
+ matchSymbols,
+ "\\p{scx=Braille}"
+);
+testPropertyEscapes(
+ /^\p{scx=Brai}+$/u,
+ matchSymbols,
+ "\\p{scx=Brai}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0027FF],
+ [0x002900, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Braille}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Braille}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Brai}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Brai}"
+);
+testPropertyEscapes(
+ /^\P{scx=Braille}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Braille}"
+);
+testPropertyEscapes(
+ /^\P{scx=Brai}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Brai}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Buginese.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Buginese.js
new file mode 100644
index 0000000000..43b60a6373
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Buginese.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Buginese`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00A9CF
+ ],
+ ranges: [
+ [0x001A00, 0x001A1B],
+ [0x001A1E, 0x001A1F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Buginese}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Buginese}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Bugi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Bugi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Buginese}+$/u,
+ matchSymbols,
+ "\\p{scx=Buginese}"
+);
+testPropertyEscapes(
+ /^\p{scx=Bugi}+$/u,
+ matchSymbols,
+ "\\p{scx=Bugi}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0019FF],
+ [0x001A1C, 0x001A1D],
+ [0x001A20, 0x00A9CE],
+ [0x00A9D0, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Buginese}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Buginese}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Bugi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Bugi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Buginese}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Buginese}"
+);
+testPropertyEscapes(
+ /^\P{scx=Bugi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Bugi}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Buhid.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Buhid.js
new file mode 100644
index 0000000000..6d3323c6d2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Buhid.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Buhid`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001735, 0x001736],
+ [0x001740, 0x001753]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Buhid}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Buhid}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Buhd}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Buhd}"
+);
+testPropertyEscapes(
+ /^\p{scx=Buhid}+$/u,
+ matchSymbols,
+ "\\p{scx=Buhid}"
+);
+testPropertyEscapes(
+ /^\p{scx=Buhd}+$/u,
+ matchSymbols,
+ "\\p{scx=Buhd}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x001734],
+ [0x001737, 0x00173F],
+ [0x001754, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Buhid}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Buhid}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Buhd}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Buhd}"
+);
+testPropertyEscapes(
+ /^\P{scx=Buhid}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Buhid}"
+);
+testPropertyEscapes(
+ /^\P{scx=Buhd}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Buhd}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Canadian_Aboriginal.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Canadian_Aboriginal.js
new file mode 100644
index 0000000000..3c8ebedf9e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Canadian_Aboriginal.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Canadian_Aboriginal`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001400, 0x00167F],
+ [0x0018B0, 0x0018F5],
+ [0x011AB0, 0x011ABF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Canadian_Aboriginal}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Canadian_Aboriginal}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Cans}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Cans}"
+);
+testPropertyEscapes(
+ /^\p{scx=Canadian_Aboriginal}+$/u,
+ matchSymbols,
+ "\\p{scx=Canadian_Aboriginal}"
+);
+testPropertyEscapes(
+ /^\p{scx=Cans}+$/u,
+ matchSymbols,
+ "\\p{scx=Cans}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0013FF],
+ [0x001680, 0x0018AF],
+ [0x0018F6, 0x00DBFF],
+ [0x00E000, 0x011AAF],
+ [0x011AC0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Canadian_Aboriginal}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Canadian_Aboriginal}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Cans}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Cans}"
+);
+testPropertyEscapes(
+ /^\P{scx=Canadian_Aboriginal}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Canadian_Aboriginal}"
+);
+testPropertyEscapes(
+ /^\P{scx=Cans}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Cans}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Carian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Carian.js
new file mode 100644
index 0000000000..96b964b6ae
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Carian.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Carian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0102A0, 0x0102D0]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Carian}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Carian}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Cari}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Cari}"
+);
+testPropertyEscapes(
+ /^\p{scx=Carian}+$/u,
+ matchSymbols,
+ "\\p{scx=Carian}"
+);
+testPropertyEscapes(
+ /^\p{scx=Cari}+$/u,
+ matchSymbols,
+ "\\p{scx=Cari}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01029F],
+ [0x0102D1, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Carian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Carian}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Cari}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Cari}"
+);
+testPropertyEscapes(
+ /^\P{scx=Carian}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Carian}"
+);
+testPropertyEscapes(
+ /^\P{scx=Cari}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Cari}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Caucasian_Albanian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Caucasian_Albanian.js
new file mode 100644
index 0000000000..f7aded1a75
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Caucasian_Albanian.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Caucasian_Albanian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x01056F
+ ],
+ ranges: [
+ [0x010530, 0x010563]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Caucasian_Albanian}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Caucasian_Albanian}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Aghb}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Aghb}"
+);
+testPropertyEscapes(
+ /^\p{scx=Caucasian_Albanian}+$/u,
+ matchSymbols,
+ "\\p{scx=Caucasian_Albanian}"
+);
+testPropertyEscapes(
+ /^\p{scx=Aghb}+$/u,
+ matchSymbols,
+ "\\p{scx=Aghb}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01052F],
+ [0x010564, 0x01056E],
+ [0x010570, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Caucasian_Albanian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Caucasian_Albanian}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Aghb}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Aghb}"
+);
+testPropertyEscapes(
+ /^\P{scx=Caucasian_Albanian}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Caucasian_Albanian}"
+);
+testPropertyEscapes(
+ /^\P{scx=Aghb}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Aghb}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Chakma.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Chakma.js
new file mode 100644
index 0000000000..ccdabfe697
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Chakma.js
@@ -0,0 +1,80 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Chakma`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0009E6, 0x0009EF],
+ [0x001040, 0x001049],
+ [0x011100, 0x011134],
+ [0x011136, 0x011147]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Chakma}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Chakma}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Cakm}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Cakm}"
+);
+testPropertyEscapes(
+ /^\p{scx=Chakma}+$/u,
+ matchSymbols,
+ "\\p{scx=Chakma}"
+);
+testPropertyEscapes(
+ /^\p{scx=Cakm}+$/u,
+ matchSymbols,
+ "\\p{scx=Cakm}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011135
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0009E5],
+ [0x0009F0, 0x00103F],
+ [0x00104A, 0x00DBFF],
+ [0x00E000, 0x0110FF],
+ [0x011148, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Chakma}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Chakma}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Cakm}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Cakm}"
+);
+testPropertyEscapes(
+ /^\P{scx=Chakma}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Chakma}"
+);
+testPropertyEscapes(
+ /^\P{scx=Cakm}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Cakm}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cham.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cham.js
new file mode 100644
index 0000000000..87a9dc62f5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cham.js
@@ -0,0 +1,79 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Cham`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00AA00, 0x00AA36],
+ [0x00AA40, 0x00AA4D],
+ [0x00AA50, 0x00AA59],
+ [0x00AA5C, 0x00AA5F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Cham}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Cham}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Cham}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Cham}"
+);
+testPropertyEscapes(
+ /^\p{scx=Cham}+$/u,
+ matchSymbols,
+ "\\p{scx=Cham}"
+);
+testPropertyEscapes(
+ /^\p{scx=Cham}+$/u,
+ matchSymbols,
+ "\\p{scx=Cham}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A9FF],
+ [0x00AA37, 0x00AA3F],
+ [0x00AA4E, 0x00AA4F],
+ [0x00AA5A, 0x00AA5B],
+ [0x00AA60, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Cham}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Cham}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Cham}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Cham}"
+);
+testPropertyEscapes(
+ /^\P{scx=Cham}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Cham}"
+);
+testPropertyEscapes(
+ /^\P{scx=Cham}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Cham}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cherokee.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cherokee.js
new file mode 100644
index 0000000000..e0408cb8cc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cherokee.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Cherokee`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0013A0, 0x0013F5],
+ [0x0013F8, 0x0013FD],
+ [0x00AB70, 0x00ABBF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Cherokee}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Cherokee}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Cher}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Cher}"
+);
+testPropertyEscapes(
+ /^\p{scx=Cherokee}+$/u,
+ matchSymbols,
+ "\\p{scx=Cherokee}"
+);
+testPropertyEscapes(
+ /^\p{scx=Cher}+$/u,
+ matchSymbols,
+ "\\p{scx=Cher}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00139F],
+ [0x0013F6, 0x0013F7],
+ [0x0013FE, 0x00AB6F],
+ [0x00ABC0, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Cherokee}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Cherokee}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Cher}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Cher}"
+);
+testPropertyEscapes(
+ /^\P{scx=Cherokee}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Cherokee}"
+);
+testPropertyEscapes(
+ /^\P{scx=Cher}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Cher}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Chorasmian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Chorasmian.js
new file mode 100644
index 0000000000..88153aa735
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Chorasmian.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Chorasmian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010FB0, 0x010FCB]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Chorasmian}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Chorasmian}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Chrs}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Chrs}"
+);
+testPropertyEscapes(
+ /^\p{scx=Chorasmian}+$/u,
+ matchSymbols,
+ "\\p{scx=Chorasmian}"
+);
+testPropertyEscapes(
+ /^\p{scx=Chrs}+$/u,
+ matchSymbols,
+ "\\p{scx=Chrs}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010FAF],
+ [0x010FCC, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Chorasmian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Chorasmian}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Chrs}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Chrs}"
+);
+testPropertyEscapes(
+ /^\P{scx=Chorasmian}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Chorasmian}"
+);
+testPropertyEscapes(
+ /^\P{scx=Chrs}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Chrs}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Common.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Common.js
new file mode 100644
index 0000000000..a20832e2b8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Common.js
@@ -0,0 +1,366 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Common`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000D7,
+ 0x0000F7,
+ 0x000374,
+ 0x00037E,
+ 0x000385,
+ 0x000387,
+ 0x000605,
+ 0x0006DD,
+ 0x0008E2,
+ 0x000E3F,
+ 0x003000,
+ 0x003004,
+ 0x003012,
+ 0x003020,
+ 0x003036,
+ 0x00327F,
+ 0x0033FF,
+ 0x00AB5B,
+ 0x00FEFF,
+ 0x01D4A2,
+ 0x01D4BB,
+ 0x01D546,
+ 0x01F7F0,
+ 0x0E0001
+ ],
+ ranges: [
+ [0x000000, 0x000040],
+ [0x00005B, 0x000060],
+ [0x00007B, 0x0000A9],
+ [0x0000AB, 0x0000B9],
+ [0x0000BB, 0x0000BF],
+ [0x0002B9, 0x0002DF],
+ [0x0002E5, 0x0002E9],
+ [0x0002EC, 0x0002FF],
+ [0x000FD5, 0x000FD8],
+ [0x0016EB, 0x0016ED],
+ [0x002000, 0x00200B],
+ [0x00200E, 0x00202E],
+ [0x002030, 0x002064],
+ [0x002066, 0x002070],
+ [0x002074, 0x00207E],
+ [0x002080, 0x00208E],
+ [0x0020A0, 0x0020C0],
+ [0x002100, 0x002125],
+ [0x002127, 0x002129],
+ [0x00212C, 0x002131],
+ [0x002133, 0x00214D],
+ [0x00214F, 0x00215F],
+ [0x002189, 0x00218B],
+ [0x002190, 0x002426],
+ [0x002440, 0x00244A],
+ [0x002460, 0x0027FF],
+ [0x002900, 0x002B73],
+ [0x002B76, 0x002B95],
+ [0x002B97, 0x002BFF],
+ [0x002E00, 0x002E42],
+ [0x002E44, 0x002E5D],
+ [0x002FF0, 0x002FFB],
+ [0x003248, 0x00325F],
+ [0x0032B1, 0x0032BF],
+ [0x0032CC, 0x0032CF],
+ [0x003371, 0x00337A],
+ [0x003380, 0x0033DF],
+ [0x004DC0, 0x004DFF],
+ [0x00A708, 0x00A721],
+ [0x00A788, 0x00A78A],
+ [0x00AB6A, 0x00AB6B],
+ [0x00FE10, 0x00FE19],
+ [0x00FE30, 0x00FE44],
+ [0x00FE47, 0x00FE52],
+ [0x00FE54, 0x00FE66],
+ [0x00FE68, 0x00FE6B],
+ [0x00FF01, 0x00FF20],
+ [0x00FF3B, 0x00FF40],
+ [0x00FF5B, 0x00FF60],
+ [0x00FFE0, 0x00FFE6],
+ [0x00FFE8, 0x00FFEE],
+ [0x00FFF9, 0x00FFFD],
+ [0x010190, 0x01019C],
+ [0x0101D0, 0x0101FC],
+ [0x01CF50, 0x01CFC3],
+ [0x01D000, 0x01D0F5],
+ [0x01D100, 0x01D126],
+ [0x01D129, 0x01D166],
+ [0x01D16A, 0x01D17A],
+ [0x01D183, 0x01D184],
+ [0x01D18C, 0x01D1A9],
+ [0x01D1AE, 0x01D1EA],
+ [0x01D2C0, 0x01D2D3],
+ [0x01D2E0, 0x01D2F3],
+ [0x01D300, 0x01D356],
+ [0x01D372, 0x01D378],
+ [0x01D400, 0x01D454],
+ [0x01D456, 0x01D49C],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D51E, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D552, 0x01D6A5],
+ [0x01D6A8, 0x01D7CB],
+ [0x01D7CE, 0x01D7FF],
+ [0x01EC71, 0x01ECB4],
+ [0x01ED01, 0x01ED3D],
+ [0x01F000, 0x01F02B],
+ [0x01F030, 0x01F093],
+ [0x01F0A0, 0x01F0AE],
+ [0x01F0B1, 0x01F0BF],
+ [0x01F0C1, 0x01F0CF],
+ [0x01F0D1, 0x01F0F5],
+ [0x01F100, 0x01F1AD],
+ [0x01F1E6, 0x01F1FF],
+ [0x01F201, 0x01F202],
+ [0x01F210, 0x01F23B],
+ [0x01F240, 0x01F248],
+ [0x01F260, 0x01F265],
+ [0x01F300, 0x01F6D7],
+ [0x01F6DC, 0x01F6EC],
+ [0x01F6F0, 0x01F6FC],
+ [0x01F700, 0x01F776],
+ [0x01F77B, 0x01F7D9],
+ [0x01F7E0, 0x01F7EB],
+ [0x01F800, 0x01F80B],
+ [0x01F810, 0x01F847],
+ [0x01F850, 0x01F859],
+ [0x01F860, 0x01F887],
+ [0x01F890, 0x01F8AD],
+ [0x01F8B0, 0x01F8B1],
+ [0x01F900, 0x01FA53],
+ [0x01FA60, 0x01FA6D],
+ [0x01FA70, 0x01FA7C],
+ [0x01FA80, 0x01FA88],
+ [0x01FA90, 0x01FABD],
+ [0x01FABF, 0x01FAC5],
+ [0x01FACE, 0x01FADB],
+ [0x01FAE0, 0x01FAE8],
+ [0x01FAF0, 0x01FAF8],
+ [0x01FB00, 0x01FB92],
+ [0x01FB94, 0x01FBCA],
+ [0x01FBF0, 0x01FBF9],
+ [0x0E0020, 0x0E007F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Common}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Common}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Zyyy}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Zyyy}"
+);
+testPropertyEscapes(
+ /^\p{scx=Common}+$/u,
+ matchSymbols,
+ "\\p{scx=Common}"
+);
+testPropertyEscapes(
+ /^\p{scx=Zyyy}+$/u,
+ matchSymbols,
+ "\\p{scx=Zyyy}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000AA,
+ 0x0000BA,
+ 0x000386,
+ 0x00202F,
+ 0x002065,
+ 0x00207F,
+ 0x002126,
+ 0x002132,
+ 0x00214E,
+ 0x002B96,
+ 0x002E43,
+ 0x00FE53,
+ 0x00FE67,
+ 0x00FF00,
+ 0x00FFE7,
+ 0x01D455,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D506,
+ 0x01D515,
+ 0x01D51D,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545,
+ 0x01D551,
+ 0x01F0C0,
+ 0x01F0D0,
+ 0x01F200,
+ 0x01FABE,
+ 0x01FB93
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000F6],
+ [0x0000F8, 0x0002B8],
+ [0x0002E0, 0x0002E4],
+ [0x0002EA, 0x0002EB],
+ [0x000300, 0x000373],
+ [0x000375, 0x00037D],
+ [0x00037F, 0x000384],
+ [0x000388, 0x000604],
+ [0x000606, 0x0006DC],
+ [0x0006DE, 0x0008E1],
+ [0x0008E3, 0x000E3E],
+ [0x000E40, 0x000FD4],
+ [0x000FD9, 0x0016EA],
+ [0x0016EE, 0x001FFF],
+ [0x00200C, 0x00200D],
+ [0x002071, 0x002073],
+ [0x00208F, 0x00209F],
+ [0x0020C1, 0x0020FF],
+ [0x00212A, 0x00212B],
+ [0x002160, 0x002188],
+ [0x00218C, 0x00218F],
+ [0x002427, 0x00243F],
+ [0x00244B, 0x00245F],
+ [0x002800, 0x0028FF],
+ [0x002B74, 0x002B75],
+ [0x002C00, 0x002DFF],
+ [0x002E5E, 0x002FEF],
+ [0x002FFC, 0x002FFF],
+ [0x003001, 0x003003],
+ [0x003005, 0x003011],
+ [0x003013, 0x00301F],
+ [0x003021, 0x003035],
+ [0x003037, 0x003247],
+ [0x003260, 0x00327E],
+ [0x003280, 0x0032B0],
+ [0x0032C0, 0x0032CB],
+ [0x0032D0, 0x003370],
+ [0x00337B, 0x00337F],
+ [0x0033E0, 0x0033FE],
+ [0x003400, 0x004DBF],
+ [0x004E00, 0x00A707],
+ [0x00A722, 0x00A787],
+ [0x00A78B, 0x00AB5A],
+ [0x00AB5C, 0x00AB69],
+ [0x00AB6C, 0x00DBFF],
+ [0x00E000, 0x00FE0F],
+ [0x00FE1A, 0x00FE2F],
+ [0x00FE45, 0x00FE46],
+ [0x00FE6C, 0x00FEFE],
+ [0x00FF21, 0x00FF3A],
+ [0x00FF41, 0x00FF5A],
+ [0x00FF61, 0x00FFDF],
+ [0x00FFEF, 0x00FFF8],
+ [0x00FFFE, 0x01018F],
+ [0x01019D, 0x0101CF],
+ [0x0101FD, 0x01CF4F],
+ [0x01CFC4, 0x01CFFF],
+ [0x01D0F6, 0x01D0FF],
+ [0x01D127, 0x01D128],
+ [0x01D167, 0x01D169],
+ [0x01D17B, 0x01D182],
+ [0x01D185, 0x01D18B],
+ [0x01D1AA, 0x01D1AD],
+ [0x01D1EB, 0x01D2BF],
+ [0x01D2D4, 0x01D2DF],
+ [0x01D2F4, 0x01D2FF],
+ [0x01D357, 0x01D371],
+ [0x01D379, 0x01D3FF],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D50B, 0x01D50C],
+ [0x01D547, 0x01D549],
+ [0x01D6A6, 0x01D6A7],
+ [0x01D7CC, 0x01D7CD],
+ [0x01D800, 0x01EC70],
+ [0x01ECB5, 0x01ED00],
+ [0x01ED3E, 0x01EFFF],
+ [0x01F02C, 0x01F02F],
+ [0x01F094, 0x01F09F],
+ [0x01F0AF, 0x01F0B0],
+ [0x01F0F6, 0x01F0FF],
+ [0x01F1AE, 0x01F1E5],
+ [0x01F203, 0x01F20F],
+ [0x01F23C, 0x01F23F],
+ [0x01F249, 0x01F25F],
+ [0x01F266, 0x01F2FF],
+ [0x01F6D8, 0x01F6DB],
+ [0x01F6ED, 0x01F6EF],
+ [0x01F6FD, 0x01F6FF],
+ [0x01F777, 0x01F77A],
+ [0x01F7DA, 0x01F7DF],
+ [0x01F7EC, 0x01F7EF],
+ [0x01F7F1, 0x01F7FF],
+ [0x01F80C, 0x01F80F],
+ [0x01F848, 0x01F84F],
+ [0x01F85A, 0x01F85F],
+ [0x01F888, 0x01F88F],
+ [0x01F8AE, 0x01F8AF],
+ [0x01F8B2, 0x01F8FF],
+ [0x01FA54, 0x01FA5F],
+ [0x01FA6E, 0x01FA6F],
+ [0x01FA7D, 0x01FA7F],
+ [0x01FA89, 0x01FA8F],
+ [0x01FAC6, 0x01FACD],
+ [0x01FADC, 0x01FADF],
+ [0x01FAE9, 0x01FAEF],
+ [0x01FAF9, 0x01FAFF],
+ [0x01FBCB, 0x01FBEF],
+ [0x01FBFA, 0x0E0000],
+ [0x0E0002, 0x0E001F],
+ [0x0E0080, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Common}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Common}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Zyyy}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Zyyy}"
+);
+testPropertyEscapes(
+ /^\P{scx=Common}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Common}"
+);
+testPropertyEscapes(
+ /^\P{scx=Zyyy}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Zyyy}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Coptic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Coptic.js
new file mode 100644
index 0000000000..dc1719bfa5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Coptic.js
@@ -0,0 +1,99 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Coptic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0003E2, 0x0003EF],
+ [0x002C80, 0x002CF3],
+ [0x002CF9, 0x002CFF],
+ [0x0102E0, 0x0102FB]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Coptic}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Coptic}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Copt}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Copt}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Qaac}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Qaac}"
+);
+testPropertyEscapes(
+ /^\p{scx=Coptic}+$/u,
+ matchSymbols,
+ "\\p{scx=Coptic}"
+);
+testPropertyEscapes(
+ /^\p{scx=Copt}+$/u,
+ matchSymbols,
+ "\\p{scx=Copt}"
+);
+testPropertyEscapes(
+ /^\p{scx=Qaac}+$/u,
+ matchSymbols,
+ "\\p{scx=Qaac}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0003E1],
+ [0x0003F0, 0x002C7F],
+ [0x002CF4, 0x002CF8],
+ [0x002D00, 0x00DBFF],
+ [0x00E000, 0x0102DF],
+ [0x0102FC, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Coptic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Coptic}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Copt}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Copt}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Qaac}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Qaac}"
+);
+testPropertyEscapes(
+ /^\P{scx=Coptic}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Coptic}"
+);
+testPropertyEscapes(
+ /^\P{scx=Copt}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Copt}"
+);
+testPropertyEscapes(
+ /^\P{scx=Qaac}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Qaac}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cuneiform.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cuneiform.js
new file mode 100644
index 0000000000..dee5cea487
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cuneiform.js
@@ -0,0 +1,80 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Cuneiform`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x012000, 0x012399],
+ [0x012400, 0x01246E],
+ [0x012470, 0x012474],
+ [0x012480, 0x012543]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Cuneiform}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Cuneiform}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Xsux}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Xsux}"
+);
+testPropertyEscapes(
+ /^\p{scx=Cuneiform}+$/u,
+ matchSymbols,
+ "\\p{scx=Cuneiform}"
+);
+testPropertyEscapes(
+ /^\p{scx=Xsux}+$/u,
+ matchSymbols,
+ "\\p{scx=Xsux}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x01246F
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x011FFF],
+ [0x01239A, 0x0123FF],
+ [0x012475, 0x01247F],
+ [0x012544, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Cuneiform}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Cuneiform}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Xsux}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Xsux}"
+);
+testPropertyEscapes(
+ /^\P{scx=Cuneiform}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Cuneiform}"
+);
+testPropertyEscapes(
+ /^\P{scx=Xsux}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Xsux}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cypriot.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cypriot.js
new file mode 100644
index 0000000000..69fd714254
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cypriot.js
@@ -0,0 +1,91 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Cypriot`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x010808,
+ 0x01083C,
+ 0x01083F
+ ],
+ ranges: [
+ [0x010100, 0x010102],
+ [0x010107, 0x010133],
+ [0x010137, 0x01013F],
+ [0x010800, 0x010805],
+ [0x01080A, 0x010835],
+ [0x010837, 0x010838]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Cypriot}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Cypriot}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Cprt}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Cprt}"
+);
+testPropertyEscapes(
+ /^\p{scx=Cypriot}+$/u,
+ matchSymbols,
+ "\\p{scx=Cypriot}"
+);
+testPropertyEscapes(
+ /^\p{scx=Cprt}+$/u,
+ matchSymbols,
+ "\\p{scx=Cprt}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x010809,
+ 0x010836
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0100FF],
+ [0x010103, 0x010106],
+ [0x010134, 0x010136],
+ [0x010140, 0x0107FF],
+ [0x010806, 0x010807],
+ [0x010839, 0x01083B],
+ [0x01083D, 0x01083E],
+ [0x010840, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Cypriot}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Cypriot}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Cprt}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Cprt}"
+);
+testPropertyEscapes(
+ /^\P{scx=Cypriot}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Cypriot}"
+);
+testPropertyEscapes(
+ /^\P{scx=Cprt}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Cprt}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cypro_Minoan.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cypro_Minoan.js
new file mode 100644
index 0000000000..d4cca6be76
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cypro_Minoan.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Cypro_Minoan`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010100, 0x010101],
+ [0x012F90, 0x012FF2]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Cypro_Minoan}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Cypro_Minoan}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Cpmn}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Cpmn}"
+);
+testPropertyEscapes(
+ /^\p{scx=Cypro_Minoan}+$/u,
+ matchSymbols,
+ "\\p{scx=Cypro_Minoan}"
+);
+testPropertyEscapes(
+ /^\p{scx=Cpmn}+$/u,
+ matchSymbols,
+ "\\p{scx=Cpmn}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0100FF],
+ [0x010102, 0x012F8F],
+ [0x012FF3, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Cypro_Minoan}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Cypro_Minoan}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Cpmn}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Cpmn}"
+);
+testPropertyEscapes(
+ /^\P{scx=Cypro_Minoan}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Cypro_Minoan}"
+);
+testPropertyEscapes(
+ /^\P{scx=Cpmn}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Cpmn}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cyrillic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cyrillic.js
new file mode 100644
index 0000000000..e478cabcae
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cyrillic.js
@@ -0,0 +1,94 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Cyrillic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x001D2B,
+ 0x001D78,
+ 0x001DF8,
+ 0x002E43,
+ 0x01E08F
+ ],
+ ranges: [
+ [0x000400, 0x00052F],
+ [0x001C80, 0x001C88],
+ [0x002DE0, 0x002DFF],
+ [0x00A640, 0x00A69F],
+ [0x00FE2E, 0x00FE2F],
+ [0x01E030, 0x01E06D]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Cyrillic}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Cyrillic}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Cyrl}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Cyrl}"
+);
+testPropertyEscapes(
+ /^\p{scx=Cyrillic}+$/u,
+ matchSymbols,
+ "\\p{scx=Cyrillic}"
+);
+testPropertyEscapes(
+ /^\p{scx=Cyrl}+$/u,
+ matchSymbols,
+ "\\p{scx=Cyrl}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0003FF],
+ [0x000530, 0x001C7F],
+ [0x001C89, 0x001D2A],
+ [0x001D2C, 0x001D77],
+ [0x001D79, 0x001DF7],
+ [0x001DF9, 0x002DDF],
+ [0x002E00, 0x002E42],
+ [0x002E44, 0x00A63F],
+ [0x00A6A0, 0x00DBFF],
+ [0x00E000, 0x00FE2D],
+ [0x00FE30, 0x01E02F],
+ [0x01E06E, 0x01E08E],
+ [0x01E090, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Cyrillic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Cyrillic}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Cyrl}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Cyrl}"
+);
+testPropertyEscapes(
+ /^\P{scx=Cyrillic}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Cyrillic}"
+);
+testPropertyEscapes(
+ /^\P{scx=Cyrl}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Cyrl}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Deseret.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Deseret.js
new file mode 100644
index 0000000000..3c66f307a4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Deseret.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Deseret`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010400, 0x01044F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Deseret}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Deseret}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Dsrt}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Dsrt}"
+);
+testPropertyEscapes(
+ /^\p{scx=Deseret}+$/u,
+ matchSymbols,
+ "\\p{scx=Deseret}"
+);
+testPropertyEscapes(
+ /^\p{scx=Dsrt}+$/u,
+ matchSymbols,
+ "\\p{scx=Dsrt}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0103FF],
+ [0x010450, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Deseret}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Deseret}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Dsrt}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Dsrt}"
+);
+testPropertyEscapes(
+ /^\P{scx=Deseret}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Deseret}"
+);
+testPropertyEscapes(
+ /^\P{scx=Dsrt}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Dsrt}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Devanagari.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Devanagari.js
new file mode 100644
index 0000000000..b4edfd66ab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Devanagari.js
@@ -0,0 +1,89 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Devanagari`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0020F0
+ ],
+ ranges: [
+ [0x000900, 0x000952],
+ [0x000955, 0x00097F],
+ [0x001CD0, 0x001CF6],
+ [0x001CF8, 0x001CF9],
+ [0x00A830, 0x00A839],
+ [0x00A8E0, 0x00A8FF],
+ [0x011B00, 0x011B09]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Devanagari}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Devanagari}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Deva}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Deva}"
+);
+testPropertyEscapes(
+ /^\p{scx=Devanagari}+$/u,
+ matchSymbols,
+ "\\p{scx=Devanagari}"
+);
+testPropertyEscapes(
+ /^\p{scx=Deva}+$/u,
+ matchSymbols,
+ "\\p{scx=Deva}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x001CF7
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0008FF],
+ [0x000953, 0x000954],
+ [0x000980, 0x001CCF],
+ [0x001CFA, 0x0020EF],
+ [0x0020F1, 0x00A82F],
+ [0x00A83A, 0x00A8DF],
+ [0x00A900, 0x00DBFF],
+ [0x00E000, 0x011AFF],
+ [0x011B0A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Devanagari}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Devanagari}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Deva}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Deva}"
+);
+testPropertyEscapes(
+ /^\P{scx=Devanagari}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Devanagari}"
+);
+testPropertyEscapes(
+ /^\P{scx=Deva}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Deva}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Dives_Akuru.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Dives_Akuru.js
new file mode 100644
index 0000000000..cda1c55cbd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Dives_Akuru.js
@@ -0,0 +1,89 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Dives_Akuru`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x011909
+ ],
+ ranges: [
+ [0x011900, 0x011906],
+ [0x01190C, 0x011913],
+ [0x011915, 0x011916],
+ [0x011918, 0x011935],
+ [0x011937, 0x011938],
+ [0x01193B, 0x011946],
+ [0x011950, 0x011959]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Dives_Akuru}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Dives_Akuru}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Diak}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Diak}"
+);
+testPropertyEscapes(
+ /^\p{scx=Dives_Akuru}+$/u,
+ matchSymbols,
+ "\\p{scx=Dives_Akuru}"
+);
+testPropertyEscapes(
+ /^\p{scx=Diak}+$/u,
+ matchSymbols,
+ "\\p{scx=Diak}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011914,
+ 0x011917,
+ 0x011936
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0118FF],
+ [0x011907, 0x011908],
+ [0x01190A, 0x01190B],
+ [0x011939, 0x01193A],
+ [0x011947, 0x01194F],
+ [0x01195A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Dives_Akuru}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Dives_Akuru}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Diak}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Diak}"
+);
+testPropertyEscapes(
+ /^\P{scx=Dives_Akuru}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Dives_Akuru}"
+);
+testPropertyEscapes(
+ /^\P{scx=Diak}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Diak}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Dogra.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Dogra.js
new file mode 100644
index 0000000000..b4e0dee805
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Dogra.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Dogra`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000964, 0x00096F],
+ [0x00A830, 0x00A839],
+ [0x011800, 0x01183B]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Dogra}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Dogra}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Dogr}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Dogr}"
+);
+testPropertyEscapes(
+ /^\p{scx=Dogra}+$/u,
+ matchSymbols,
+ "\\p{scx=Dogra}"
+);
+testPropertyEscapes(
+ /^\p{scx=Dogr}+$/u,
+ matchSymbols,
+ "\\p{scx=Dogr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000963],
+ [0x000970, 0x00A82F],
+ [0x00A83A, 0x00DBFF],
+ [0x00E000, 0x0117FF],
+ [0x01183C, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Dogra}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Dogra}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Dogr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Dogr}"
+);
+testPropertyEscapes(
+ /^\P{scx=Dogra}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Dogra}"
+);
+testPropertyEscapes(
+ /^\P{scx=Dogr}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Dogr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Duployan.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Duployan.js
new file mode 100644
index 0000000000..7b07e7075b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Duployan.js
@@ -0,0 +1,81 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Duployan`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x01BC00, 0x01BC6A],
+ [0x01BC70, 0x01BC7C],
+ [0x01BC80, 0x01BC88],
+ [0x01BC90, 0x01BC99],
+ [0x01BC9C, 0x01BCA3]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Duployan}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Duployan}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Dupl}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Dupl}"
+);
+testPropertyEscapes(
+ /^\p{scx=Duployan}+$/u,
+ matchSymbols,
+ "\\p{scx=Duployan}"
+);
+testPropertyEscapes(
+ /^\p{scx=Dupl}+$/u,
+ matchSymbols,
+ "\\p{scx=Dupl}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01BBFF],
+ [0x01BC6B, 0x01BC6F],
+ [0x01BC7D, 0x01BC7F],
+ [0x01BC89, 0x01BC8F],
+ [0x01BC9A, 0x01BC9B],
+ [0x01BCA4, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Duployan}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Duployan}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Dupl}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Dupl}"
+);
+testPropertyEscapes(
+ /^\P{scx=Duployan}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Duployan}"
+);
+testPropertyEscapes(
+ /^\P{scx=Dupl}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Dupl}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Egyptian_Hieroglyphs.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Egyptian_Hieroglyphs.js
new file mode 100644
index 0000000000..52fa6d158e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Egyptian_Hieroglyphs.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Egyptian_Hieroglyphs`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x013000, 0x013455]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Egyptian_Hieroglyphs}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Egyptian_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Egyp}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Egyp}"
+);
+testPropertyEscapes(
+ /^\p{scx=Egyptian_Hieroglyphs}+$/u,
+ matchSymbols,
+ "\\p{scx=Egyptian_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\p{scx=Egyp}+$/u,
+ matchSymbols,
+ "\\p{scx=Egyp}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x012FFF],
+ [0x013456, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Egyptian_Hieroglyphs}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Egyptian_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Egyp}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Egyp}"
+);
+testPropertyEscapes(
+ /^\P{scx=Egyptian_Hieroglyphs}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Egyptian_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\P{scx=Egyp}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Egyp}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Elbasan.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Elbasan.js
new file mode 100644
index 0000000000..42ea2c70a9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Elbasan.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Elbasan`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010500, 0x010527]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Elbasan}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Elbasan}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Elba}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Elba}"
+);
+testPropertyEscapes(
+ /^\p{scx=Elbasan}+$/u,
+ matchSymbols,
+ "\\p{scx=Elbasan}"
+);
+testPropertyEscapes(
+ /^\p{scx=Elba}+$/u,
+ matchSymbols,
+ "\\p{scx=Elba}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0104FF],
+ [0x010528, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Elbasan}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Elbasan}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Elba}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Elba}"
+);
+testPropertyEscapes(
+ /^\P{scx=Elbasan}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Elbasan}"
+);
+testPropertyEscapes(
+ /^\P{scx=Elba}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Elba}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Elymaic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Elymaic.js
new file mode 100644
index 0000000000..87a0320e91
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Elymaic.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Elymaic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010FE0, 0x010FF6]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Elymaic}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Elymaic}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Elym}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Elym}"
+);
+testPropertyEscapes(
+ /^\p{scx=Elymaic}+$/u,
+ matchSymbols,
+ "\\p{scx=Elymaic}"
+);
+testPropertyEscapes(
+ /^\p{scx=Elym}+$/u,
+ matchSymbols,
+ "\\p{scx=Elym}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010FDF],
+ [0x010FF7, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Elymaic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Elymaic}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Elym}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Elym}"
+);
+testPropertyEscapes(
+ /^\P{scx=Elymaic}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Elymaic}"
+);
+testPropertyEscapes(
+ /^\P{scx=Elym}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Elym}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ethiopic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ethiopic.js
new file mode 100644
index 0000000000..dc05ba161b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ethiopic.js
@@ -0,0 +1,145 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Ethiopic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x001258,
+ 0x0012C0
+ ],
+ ranges: [
+ [0x001200, 0x001248],
+ [0x00124A, 0x00124D],
+ [0x001250, 0x001256],
+ [0x00125A, 0x00125D],
+ [0x001260, 0x001288],
+ [0x00128A, 0x00128D],
+ [0x001290, 0x0012B0],
+ [0x0012B2, 0x0012B5],
+ [0x0012B8, 0x0012BE],
+ [0x0012C2, 0x0012C5],
+ [0x0012C8, 0x0012D6],
+ [0x0012D8, 0x001310],
+ [0x001312, 0x001315],
+ [0x001318, 0x00135A],
+ [0x00135D, 0x00137C],
+ [0x001380, 0x001399],
+ [0x002D80, 0x002D96],
+ [0x002DA0, 0x002DA6],
+ [0x002DA8, 0x002DAE],
+ [0x002DB0, 0x002DB6],
+ [0x002DB8, 0x002DBE],
+ [0x002DC0, 0x002DC6],
+ [0x002DC8, 0x002DCE],
+ [0x002DD0, 0x002DD6],
+ [0x002DD8, 0x002DDE],
+ [0x00AB01, 0x00AB06],
+ [0x00AB09, 0x00AB0E],
+ [0x00AB11, 0x00AB16],
+ [0x00AB20, 0x00AB26],
+ [0x00AB28, 0x00AB2E],
+ [0x01E7E0, 0x01E7E6],
+ [0x01E7E8, 0x01E7EB],
+ [0x01E7ED, 0x01E7EE],
+ [0x01E7F0, 0x01E7FE]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Ethiopic}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Ethiopic}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Ethi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Ethi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Ethiopic}+$/u,
+ matchSymbols,
+ "\\p{scx=Ethiopic}"
+);
+testPropertyEscapes(
+ /^\p{scx=Ethi}+$/u,
+ matchSymbols,
+ "\\p{scx=Ethi}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x001249,
+ 0x001257,
+ 0x001259,
+ 0x001289,
+ 0x0012B1,
+ 0x0012BF,
+ 0x0012C1,
+ 0x0012D7,
+ 0x001311,
+ 0x002DA7,
+ 0x002DAF,
+ 0x002DB7,
+ 0x002DBF,
+ 0x002DC7,
+ 0x002DCF,
+ 0x002DD7,
+ 0x00AB27,
+ 0x01E7E7,
+ 0x01E7EC,
+ 0x01E7EF
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0011FF],
+ [0x00124E, 0x00124F],
+ [0x00125E, 0x00125F],
+ [0x00128E, 0x00128F],
+ [0x0012B6, 0x0012B7],
+ [0x0012C6, 0x0012C7],
+ [0x001316, 0x001317],
+ [0x00135B, 0x00135C],
+ [0x00137D, 0x00137F],
+ [0x00139A, 0x002D7F],
+ [0x002D97, 0x002D9F],
+ [0x002DDF, 0x00AB00],
+ [0x00AB07, 0x00AB08],
+ [0x00AB0F, 0x00AB10],
+ [0x00AB17, 0x00AB1F],
+ [0x00AB2F, 0x00DBFF],
+ [0x00E000, 0x01E7DF],
+ [0x01E7FF, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Ethiopic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Ethiopic}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Ethi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Ethi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Ethiopic}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Ethiopic}"
+);
+testPropertyEscapes(
+ /^\P{scx=Ethi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Ethi}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Georgian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Georgian.js
new file mode 100644
index 0000000000..750be25148
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Georgian.js
@@ -0,0 +1,91 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Georgian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0010C7,
+ 0x0010CD,
+ 0x002D27,
+ 0x002D2D
+ ],
+ ranges: [
+ [0x0010A0, 0x0010C5],
+ [0x0010D0, 0x0010FF],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CBF],
+ [0x002D00, 0x002D25]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Georgian}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Georgian}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Geor}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Geor}"
+);
+testPropertyEscapes(
+ /^\p{scx=Georgian}+$/u,
+ matchSymbols,
+ "\\p{scx=Georgian}"
+);
+testPropertyEscapes(
+ /^\p{scx=Geor}+$/u,
+ matchSymbols,
+ "\\p{scx=Geor}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0010C6,
+ 0x002D26
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00109F],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x0010CF],
+ [0x001100, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC0, 0x002CFF],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Georgian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Georgian}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Geor}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Geor}"
+);
+testPropertyEscapes(
+ /^\P{scx=Georgian}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Georgian}"
+);
+testPropertyEscapes(
+ /^\P{scx=Geor}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Geor}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Glagolitic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Glagolitic.js
new file mode 100644
index 0000000000..16f0dfbd30
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Glagolitic.js
@@ -0,0 +1,93 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Glagolitic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000484,
+ 0x000487,
+ 0x002E43,
+ 0x00A66F
+ ],
+ ranges: [
+ [0x002C00, 0x002C5F],
+ [0x01E000, 0x01E006],
+ [0x01E008, 0x01E018],
+ [0x01E01B, 0x01E021],
+ [0x01E023, 0x01E024],
+ [0x01E026, 0x01E02A]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Glagolitic}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Glagolitic}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Glag}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Glag}"
+);
+testPropertyEscapes(
+ /^\p{scx=Glagolitic}+$/u,
+ matchSymbols,
+ "\\p{scx=Glagolitic}"
+);
+testPropertyEscapes(
+ /^\p{scx=Glag}+$/u,
+ matchSymbols,
+ "\\p{scx=Glag}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x01E007,
+ 0x01E022,
+ 0x01E025
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000483],
+ [0x000485, 0x000486],
+ [0x000488, 0x002BFF],
+ [0x002C60, 0x002E42],
+ [0x002E44, 0x00A66E],
+ [0x00A670, 0x00DBFF],
+ [0x00E000, 0x01DFFF],
+ [0x01E019, 0x01E01A],
+ [0x01E02B, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Glagolitic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Glagolitic}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Glag}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Glag}"
+);
+testPropertyEscapes(
+ /^\P{scx=Glagolitic}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Glagolitic}"
+);
+testPropertyEscapes(
+ /^\P{scx=Glag}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Glag}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gothic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gothic.js
new file mode 100644
index 0000000000..d23965429d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gothic.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Gothic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010330, 0x01034A]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Gothic}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Gothic}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Goth}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Goth}"
+);
+testPropertyEscapes(
+ /^\p{scx=Gothic}+$/u,
+ matchSymbols,
+ "\\p{scx=Gothic}"
+);
+testPropertyEscapes(
+ /^\p{scx=Goth}+$/u,
+ matchSymbols,
+ "\\p{scx=Goth}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01032F],
+ [0x01034B, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Gothic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Gothic}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Goth}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Goth}"
+);
+testPropertyEscapes(
+ /^\P{scx=Gothic}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Gothic}"
+);
+testPropertyEscapes(
+ /^\P{scx=Goth}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Goth}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Grantha.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Grantha.js
new file mode 100644
index 0000000000..90111960b1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Grantha.js
@@ -0,0 +1,123 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Grantha`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x001CD0,
+ 0x0020F0,
+ 0x011350,
+ 0x011357,
+ 0x011FD3
+ ],
+ ranges: [
+ [0x000951, 0x000952],
+ [0x000964, 0x000965],
+ [0x000BE6, 0x000BF3],
+ [0x001CD2, 0x001CD3],
+ [0x001CF2, 0x001CF4],
+ [0x001CF8, 0x001CF9],
+ [0x011300, 0x011303],
+ [0x011305, 0x01130C],
+ [0x01130F, 0x011310],
+ [0x011313, 0x011328],
+ [0x01132A, 0x011330],
+ [0x011332, 0x011333],
+ [0x011335, 0x011339],
+ [0x01133B, 0x011344],
+ [0x011347, 0x011348],
+ [0x01134B, 0x01134D],
+ [0x01135D, 0x011363],
+ [0x011366, 0x01136C],
+ [0x011370, 0x011374],
+ [0x011FD0, 0x011FD1]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Grantha}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Grantha}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Gran}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Gran}"
+);
+testPropertyEscapes(
+ /^\p{scx=Grantha}+$/u,
+ matchSymbols,
+ "\\p{scx=Grantha}"
+);
+testPropertyEscapes(
+ /^\p{scx=Gran}+$/u,
+ matchSymbols,
+ "\\p{scx=Gran}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x001CD1,
+ 0x011304,
+ 0x011329,
+ 0x011331,
+ 0x011334,
+ 0x01133A,
+ 0x011FD2
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000950],
+ [0x000953, 0x000963],
+ [0x000966, 0x000BE5],
+ [0x000BF4, 0x001CCF],
+ [0x001CD4, 0x001CF1],
+ [0x001CF5, 0x001CF7],
+ [0x001CFA, 0x0020EF],
+ [0x0020F1, 0x00DBFF],
+ [0x00E000, 0x0112FF],
+ [0x01130D, 0x01130E],
+ [0x011311, 0x011312],
+ [0x011345, 0x011346],
+ [0x011349, 0x01134A],
+ [0x01134E, 0x01134F],
+ [0x011351, 0x011356],
+ [0x011358, 0x01135C],
+ [0x011364, 0x011365],
+ [0x01136D, 0x01136F],
+ [0x011375, 0x011FCF],
+ [0x011FD4, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Grantha}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Grantha}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Gran}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Gran}"
+);
+testPropertyEscapes(
+ /^\P{scx=Grantha}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Grantha}"
+);
+testPropertyEscapes(
+ /^\P{scx=Gran}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Gran}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Greek.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Greek.js
new file mode 100644
index 0000000000..753f7b336f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Greek.js
@@ -0,0 +1,149 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Greek`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000342,
+ 0x000345,
+ 0x00037F,
+ 0x000384,
+ 0x000386,
+ 0x00038C,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x002126,
+ 0x00AB65,
+ 0x0101A0
+ ],
+ ranges: [
+ [0x000370, 0x000373],
+ [0x000375, 0x000377],
+ [0x00037A, 0x00037D],
+ [0x000388, 0x00038A],
+ [0x00038E, 0x0003A1],
+ [0x0003A3, 0x0003E1],
+ [0x0003F0, 0x0003FF],
+ [0x001D26, 0x001D2A],
+ [0x001D5D, 0x001D61],
+ [0x001D66, 0x001D6A],
+ [0x001DBF, 0x001DC1],
+ [0x001F00, 0x001F15],
+ [0x001F18, 0x001F1D],
+ [0x001F20, 0x001F45],
+ [0x001F48, 0x001F4D],
+ [0x001F50, 0x001F57],
+ [0x001F5F, 0x001F7D],
+ [0x001F80, 0x001FB4],
+ [0x001FB6, 0x001FC4],
+ [0x001FC6, 0x001FD3],
+ [0x001FD6, 0x001FDB],
+ [0x001FDD, 0x001FEF],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FFE],
+ [0x010140, 0x01018E],
+ [0x01D200, 0x01D245]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Greek}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Greek}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Grek}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Grek}"
+);
+testPropertyEscapes(
+ /^\p{scx=Greek}+$/u,
+ matchSymbols,
+ "\\p{scx=Greek}"
+);
+testPropertyEscapes(
+ /^\p{scx=Grek}+$/u,
+ matchSymbols,
+ "\\p{scx=Grek}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000374,
+ 0x00037E,
+ 0x000385,
+ 0x000387,
+ 0x00038B,
+ 0x00038D,
+ 0x0003A2,
+ 0x001F58,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x001FB5,
+ 0x001FC5,
+ 0x001FDC,
+ 0x001FF5
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000341],
+ [0x000343, 0x000344],
+ [0x000346, 0x00036F],
+ [0x000378, 0x000379],
+ [0x000380, 0x000383],
+ [0x0003E2, 0x0003EF],
+ [0x000400, 0x001D25],
+ [0x001D2B, 0x001D5C],
+ [0x001D62, 0x001D65],
+ [0x001D6B, 0x001DBE],
+ [0x001DC2, 0x001EFF],
+ [0x001F16, 0x001F17],
+ [0x001F1E, 0x001F1F],
+ [0x001F46, 0x001F47],
+ [0x001F4E, 0x001F4F],
+ [0x001F7E, 0x001F7F],
+ [0x001FD4, 0x001FD5],
+ [0x001FF0, 0x001FF1],
+ [0x001FFF, 0x002125],
+ [0x002127, 0x00AB64],
+ [0x00AB66, 0x00DBFF],
+ [0x00E000, 0x01013F],
+ [0x01018F, 0x01019F],
+ [0x0101A1, 0x01D1FF],
+ [0x01D246, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Greek}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Greek}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Grek}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Grek}"
+);
+testPropertyEscapes(
+ /^\P{scx=Greek}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Greek}"
+);
+testPropertyEscapes(
+ /^\P{scx=Grek}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Grek}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gujarati.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gujarati.js
new file mode 100644
index 0000000000..8de7442569
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gujarati.js
@@ -0,0 +1,107 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Gujarati`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000AD0
+ ],
+ ranges: [
+ [0x000951, 0x000952],
+ [0x000964, 0x000965],
+ [0x000A81, 0x000A83],
+ [0x000A85, 0x000A8D],
+ [0x000A8F, 0x000A91],
+ [0x000A93, 0x000AA8],
+ [0x000AAA, 0x000AB0],
+ [0x000AB2, 0x000AB3],
+ [0x000AB5, 0x000AB9],
+ [0x000ABC, 0x000AC5],
+ [0x000AC7, 0x000AC9],
+ [0x000ACB, 0x000ACD],
+ [0x000AE0, 0x000AE3],
+ [0x000AE6, 0x000AF1],
+ [0x000AF9, 0x000AFF],
+ [0x00A830, 0x00A839]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Gujarati}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Gujarati}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Gujr}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Gujr}"
+);
+testPropertyEscapes(
+ /^\p{scx=Gujarati}+$/u,
+ matchSymbols,
+ "\\p{scx=Gujarati}"
+);
+testPropertyEscapes(
+ /^\p{scx=Gujr}+$/u,
+ matchSymbols,
+ "\\p{scx=Gujr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000A84,
+ 0x000A8E,
+ 0x000A92,
+ 0x000AA9,
+ 0x000AB1,
+ 0x000AB4,
+ 0x000AC6,
+ 0x000ACA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000950],
+ [0x000953, 0x000963],
+ [0x000966, 0x000A80],
+ [0x000ABA, 0x000ABB],
+ [0x000ACE, 0x000ACF],
+ [0x000AD1, 0x000ADF],
+ [0x000AE4, 0x000AE5],
+ [0x000AF2, 0x000AF8],
+ [0x000B00, 0x00A82F],
+ [0x00A83A, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Gujarati}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Gujarati}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Gujr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Gujr}"
+);
+testPropertyEscapes(
+ /^\P{scx=Gujarati}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Gujarati}"
+);
+testPropertyEscapes(
+ /^\P{scx=Gujr}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Gujr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gunjala_Gondi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gunjala_Gondi.js
new file mode 100644
index 0000000000..6e00ac8a45
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gunjala_Gondi.js
@@ -0,0 +1,86 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Gunjala_Gondi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000964, 0x000965],
+ [0x011D60, 0x011D65],
+ [0x011D67, 0x011D68],
+ [0x011D6A, 0x011D8E],
+ [0x011D90, 0x011D91],
+ [0x011D93, 0x011D98],
+ [0x011DA0, 0x011DA9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Gunjala_Gondi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Gunjala_Gondi}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Gong}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Gong}"
+);
+testPropertyEscapes(
+ /^\p{scx=Gunjala_Gondi}+$/u,
+ matchSymbols,
+ "\\p{scx=Gunjala_Gondi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Gong}+$/u,
+ matchSymbols,
+ "\\p{scx=Gong}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011D66,
+ 0x011D69,
+ 0x011D8F,
+ 0x011D92
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000963],
+ [0x000966, 0x00DBFF],
+ [0x00E000, 0x011D5F],
+ [0x011D99, 0x011D9F],
+ [0x011DAA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Gunjala_Gondi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Gunjala_Gondi}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Gong}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Gong}"
+);
+testPropertyEscapes(
+ /^\P{scx=Gunjala_Gondi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Gunjala_Gondi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Gong}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Gong}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gurmukhi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gurmukhi.js
new file mode 100644
index 0000000000..e0b906c6bf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gurmukhi.js
@@ -0,0 +1,111 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Gurmukhi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000A3C,
+ 0x000A51,
+ 0x000A5E
+ ],
+ ranges: [
+ [0x000951, 0x000952],
+ [0x000964, 0x000965],
+ [0x000A01, 0x000A03],
+ [0x000A05, 0x000A0A],
+ [0x000A0F, 0x000A10],
+ [0x000A13, 0x000A28],
+ [0x000A2A, 0x000A30],
+ [0x000A32, 0x000A33],
+ [0x000A35, 0x000A36],
+ [0x000A38, 0x000A39],
+ [0x000A3E, 0x000A42],
+ [0x000A47, 0x000A48],
+ [0x000A4B, 0x000A4D],
+ [0x000A59, 0x000A5C],
+ [0x000A66, 0x000A76],
+ [0x00A830, 0x00A839]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Gurmukhi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Gurmukhi}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Guru}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Guru}"
+);
+testPropertyEscapes(
+ /^\p{scx=Gurmukhi}+$/u,
+ matchSymbols,
+ "\\p{scx=Gurmukhi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Guru}+$/u,
+ matchSymbols,
+ "\\p{scx=Guru}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000A04,
+ 0x000A29,
+ 0x000A31,
+ 0x000A34,
+ 0x000A37,
+ 0x000A3D,
+ 0x000A5D
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000950],
+ [0x000953, 0x000963],
+ [0x000966, 0x000A00],
+ [0x000A0B, 0x000A0E],
+ [0x000A11, 0x000A12],
+ [0x000A3A, 0x000A3B],
+ [0x000A43, 0x000A46],
+ [0x000A49, 0x000A4A],
+ [0x000A4E, 0x000A50],
+ [0x000A52, 0x000A58],
+ [0x000A5F, 0x000A65],
+ [0x000A77, 0x00A82F],
+ [0x00A83A, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Gurmukhi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Gurmukhi}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Guru}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Guru}"
+);
+testPropertyEscapes(
+ /^\P{scx=Gurmukhi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Gurmukhi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Guru}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Guru}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Han.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Han.js
new file mode 100644
index 0000000000..afda8c17de
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Han.js
@@ -0,0 +1,149 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Han`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x003030,
+ 0x0030FB,
+ 0x0032FF
+ ],
+ ranges: [
+ [0x002E80, 0x002E99],
+ [0x002E9B, 0x002EF3],
+ [0x002F00, 0x002FD5],
+ [0x003001, 0x003003],
+ [0x003005, 0x003011],
+ [0x003013, 0x00301F],
+ [0x003021, 0x00302D],
+ [0x003037, 0x00303F],
+ [0x003190, 0x00319F],
+ [0x0031C0, 0x0031E3],
+ [0x003220, 0x003247],
+ [0x003280, 0x0032B0],
+ [0x0032C0, 0x0032CB],
+ [0x003358, 0x003370],
+ [0x00337B, 0x00337F],
+ [0x0033E0, 0x0033FE],
+ [0x003400, 0x004DBF],
+ [0x004E00, 0x009FFF],
+ [0x00A700, 0x00A707],
+ [0x00F900, 0x00FA6D],
+ [0x00FA70, 0x00FAD9],
+ [0x00FE45, 0x00FE46],
+ [0x00FF61, 0x00FF65],
+ [0x016FE2, 0x016FE3],
+ [0x016FF0, 0x016FF1],
+ [0x01D360, 0x01D371],
+ [0x01F250, 0x01F251],
+ [0x020000, 0x02A6DF],
+ [0x02A700, 0x02B739],
+ [0x02B740, 0x02B81D],
+ [0x02B820, 0x02CEA1],
+ [0x02CEB0, 0x02EBE0],
+ [0x02F800, 0x02FA1D],
+ [0x030000, 0x03134A],
+ [0x031350, 0x0323AF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Han}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Han}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Hani}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Hani}"
+);
+testPropertyEscapes(
+ /^\p{scx=Han}+$/u,
+ matchSymbols,
+ "\\p{scx=Han}"
+);
+testPropertyEscapes(
+ /^\p{scx=Hani}+$/u,
+ matchSymbols,
+ "\\p{scx=Hani}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x002E9A,
+ 0x003004,
+ 0x003012,
+ 0x003020,
+ 0x0033FF
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x002E7F],
+ [0x002EF4, 0x002EFF],
+ [0x002FD6, 0x003000],
+ [0x00302E, 0x00302F],
+ [0x003031, 0x003036],
+ [0x003040, 0x0030FA],
+ [0x0030FC, 0x00318F],
+ [0x0031A0, 0x0031BF],
+ [0x0031E4, 0x00321F],
+ [0x003248, 0x00327F],
+ [0x0032B1, 0x0032BF],
+ [0x0032CC, 0x0032FE],
+ [0x003300, 0x003357],
+ [0x003371, 0x00337A],
+ [0x003380, 0x0033DF],
+ [0x004DC0, 0x004DFF],
+ [0x00A000, 0x00A6FF],
+ [0x00A708, 0x00DBFF],
+ [0x00E000, 0x00F8FF],
+ [0x00FA6E, 0x00FA6F],
+ [0x00FADA, 0x00FE44],
+ [0x00FE47, 0x00FF60],
+ [0x00FF66, 0x016FE1],
+ [0x016FE4, 0x016FEF],
+ [0x016FF2, 0x01D35F],
+ [0x01D372, 0x01F24F],
+ [0x01F252, 0x01FFFF],
+ [0x02A6E0, 0x02A6FF],
+ [0x02B73A, 0x02B73F],
+ [0x02B81E, 0x02B81F],
+ [0x02CEA2, 0x02CEAF],
+ [0x02EBE1, 0x02F7FF],
+ [0x02FA1E, 0x02FFFF],
+ [0x03134B, 0x03134F],
+ [0x0323B0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Han}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Han}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Hani}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Hani}"
+);
+testPropertyEscapes(
+ /^\P{scx=Han}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Han}"
+);
+testPropertyEscapes(
+ /^\P{scx=Hani}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Hani}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hangul.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hangul.js
new file mode 100644
index 0000000000..34dde15511
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hangul.js
@@ -0,0 +1,115 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Hangul`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x003037,
+ 0x0030FB
+ ],
+ ranges: [
+ [0x001100, 0x0011FF],
+ [0x003001, 0x003003],
+ [0x003008, 0x003011],
+ [0x003013, 0x00301F],
+ [0x00302E, 0x003030],
+ [0x003131, 0x00318E],
+ [0x003200, 0x00321E],
+ [0x003260, 0x00327E],
+ [0x00A960, 0x00A97C],
+ [0x00AC00, 0x00D7A3],
+ [0x00D7B0, 0x00D7C6],
+ [0x00D7CB, 0x00D7FB],
+ [0x00FE45, 0x00FE46],
+ [0x00FF61, 0x00FF65],
+ [0x00FFA0, 0x00FFBE],
+ [0x00FFC2, 0x00FFC7],
+ [0x00FFCA, 0x00FFCF],
+ [0x00FFD2, 0x00FFD7],
+ [0x00FFDA, 0x00FFDC]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Hangul}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Hangul}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Hang}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Hang}"
+);
+testPropertyEscapes(
+ /^\p{scx=Hangul}+$/u,
+ matchSymbols,
+ "\\p{scx=Hangul}"
+);
+testPropertyEscapes(
+ /^\p{scx=Hang}+$/u,
+ matchSymbols,
+ "\\p{scx=Hang}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x003012
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0010FF],
+ [0x001200, 0x003000],
+ [0x003004, 0x003007],
+ [0x003020, 0x00302D],
+ [0x003031, 0x003036],
+ [0x003038, 0x0030FA],
+ [0x0030FC, 0x003130],
+ [0x00318F, 0x0031FF],
+ [0x00321F, 0x00325F],
+ [0x00327F, 0x00A95F],
+ [0x00A97D, 0x00ABFF],
+ [0x00D7A4, 0x00D7AF],
+ [0x00D7C7, 0x00D7CA],
+ [0x00D7FC, 0x00DBFF],
+ [0x00E000, 0x00FE44],
+ [0x00FE47, 0x00FF60],
+ [0x00FF66, 0x00FF9F],
+ [0x00FFBF, 0x00FFC1],
+ [0x00FFC8, 0x00FFC9],
+ [0x00FFD0, 0x00FFD1],
+ [0x00FFD8, 0x00FFD9],
+ [0x00FFDD, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Hangul}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Hangul}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Hang}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Hang}"
+);
+testPropertyEscapes(
+ /^\P{scx=Hangul}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Hangul}"
+);
+testPropertyEscapes(
+ /^\P{scx=Hang}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Hang}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hanifi_Rohingya.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hanifi_Rohingya.js
new file mode 100644
index 0000000000..1837d2ca78
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hanifi_Rohingya.js
@@ -0,0 +1,86 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Hanifi_Rohingya`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00060C,
+ 0x00061B,
+ 0x00061F,
+ 0x000640,
+ 0x0006D4
+ ],
+ ranges: [
+ [0x010D00, 0x010D27],
+ [0x010D30, 0x010D39]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Hanifi_Rohingya}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Hanifi_Rohingya}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Rohg}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Rohg}"
+);
+testPropertyEscapes(
+ /^\p{scx=Hanifi_Rohingya}+$/u,
+ matchSymbols,
+ "\\p{scx=Hanifi_Rohingya}"
+);
+testPropertyEscapes(
+ /^\p{scx=Rohg}+$/u,
+ matchSymbols,
+ "\\p{scx=Rohg}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00060B],
+ [0x00060D, 0x00061A],
+ [0x00061C, 0x00061E],
+ [0x000620, 0x00063F],
+ [0x000641, 0x0006D3],
+ [0x0006D5, 0x00DBFF],
+ [0x00E000, 0x010CFF],
+ [0x010D28, 0x010D2F],
+ [0x010D3A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Hanifi_Rohingya}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Hanifi_Rohingya}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Rohg}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Rohg}"
+);
+testPropertyEscapes(
+ /^\P{scx=Hanifi_Rohingya}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Hanifi_Rohingya}"
+);
+testPropertyEscapes(
+ /^\P{scx=Rohg}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Rohg}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hanunoo.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hanunoo.js
new file mode 100644
index 0000000000..cc83ac7b4d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hanunoo.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Hanunoo`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001720, 0x001736]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Hanunoo}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Hanunoo}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Hano}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Hano}"
+);
+testPropertyEscapes(
+ /^\p{scx=Hanunoo}+$/u,
+ matchSymbols,
+ "\\p{scx=Hanunoo}"
+);
+testPropertyEscapes(
+ /^\p{scx=Hano}+$/u,
+ matchSymbols,
+ "\\p{scx=Hano}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00171F],
+ [0x001737, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Hanunoo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Hanunoo}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Hano}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Hano}"
+);
+testPropertyEscapes(
+ /^\P{scx=Hanunoo}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Hanunoo}"
+);
+testPropertyEscapes(
+ /^\P{scx=Hano}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Hano}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hatran.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hatran.js
new file mode 100644
index 0000000000..ebb03da0ed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hatran.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Hatran`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0108E0, 0x0108F2],
+ [0x0108F4, 0x0108F5],
+ [0x0108FB, 0x0108FF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Hatran}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Hatran}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Hatr}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Hatr}"
+);
+testPropertyEscapes(
+ /^\p{scx=Hatran}+$/u,
+ matchSymbols,
+ "\\p{scx=Hatran}"
+);
+testPropertyEscapes(
+ /^\p{scx=Hatr}+$/u,
+ matchSymbols,
+ "\\p{scx=Hatr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0108F3
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0108DF],
+ [0x0108F6, 0x0108FA],
+ [0x010900, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Hatran}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Hatran}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Hatr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Hatr}"
+);
+testPropertyEscapes(
+ /^\P{scx=Hatran}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Hatran}"
+);
+testPropertyEscapes(
+ /^\P{scx=Hatr}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Hatr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hebrew.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hebrew.js
new file mode 100644
index 0000000000..d46bd57180
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hebrew.js
@@ -0,0 +1,91 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Hebrew`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00FB3E
+ ],
+ ranges: [
+ [0x000591, 0x0005C7],
+ [0x0005D0, 0x0005EA],
+ [0x0005EF, 0x0005F4],
+ [0x00FB1D, 0x00FB36],
+ [0x00FB38, 0x00FB3C],
+ [0x00FB40, 0x00FB41],
+ [0x00FB43, 0x00FB44],
+ [0x00FB46, 0x00FB4F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Hebrew}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Hebrew}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Hebr}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Hebr}"
+);
+testPropertyEscapes(
+ /^\p{scx=Hebrew}+$/u,
+ matchSymbols,
+ "\\p{scx=Hebrew}"
+);
+testPropertyEscapes(
+ /^\p{scx=Hebr}+$/u,
+ matchSymbols,
+ "\\p{scx=Hebr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00FB37,
+ 0x00FB3D,
+ 0x00FB3F,
+ 0x00FB42,
+ 0x00FB45
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000590],
+ [0x0005C8, 0x0005CF],
+ [0x0005EB, 0x0005EE],
+ [0x0005F5, 0x00DBFF],
+ [0x00E000, 0x00FB1C],
+ [0x00FB50, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Hebrew}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Hebrew}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Hebr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Hebr}"
+);
+testPropertyEscapes(
+ /^\P{scx=Hebrew}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Hebrew}"
+);
+testPropertyEscapes(
+ /^\P{scx=Hebr}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Hebr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hiragana.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hiragana.js
new file mode 100644
index 0000000000..8d13ebd3f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hiragana.js
@@ -0,0 +1,107 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Hiragana`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x003037,
+ 0x00FF70,
+ 0x01B132,
+ 0x01F200
+ ],
+ ranges: [
+ [0x003001, 0x003003],
+ [0x003008, 0x003011],
+ [0x003013, 0x00301F],
+ [0x003030, 0x003035],
+ [0x00303C, 0x00303D],
+ [0x003041, 0x003096],
+ [0x003099, 0x0030A0],
+ [0x0030FB, 0x0030FC],
+ [0x00FE45, 0x00FE46],
+ [0x00FF61, 0x00FF65],
+ [0x00FF9E, 0x00FF9F],
+ [0x01B001, 0x01B11F],
+ [0x01B150, 0x01B152]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Hiragana}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Hiragana}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Hira}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Hira}"
+);
+testPropertyEscapes(
+ /^\p{scx=Hiragana}+$/u,
+ matchSymbols,
+ "\\p{scx=Hiragana}"
+);
+testPropertyEscapes(
+ /^\p{scx=Hira}+$/u,
+ matchSymbols,
+ "\\p{scx=Hira}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x003012,
+ 0x003036
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x003000],
+ [0x003004, 0x003007],
+ [0x003020, 0x00302F],
+ [0x003038, 0x00303B],
+ [0x00303E, 0x003040],
+ [0x003097, 0x003098],
+ [0x0030A1, 0x0030FA],
+ [0x0030FD, 0x00DBFF],
+ [0x00E000, 0x00FE44],
+ [0x00FE47, 0x00FF60],
+ [0x00FF66, 0x00FF6F],
+ [0x00FF71, 0x00FF9D],
+ [0x00FFA0, 0x01B000],
+ [0x01B120, 0x01B131],
+ [0x01B133, 0x01B14F],
+ [0x01B153, 0x01F1FF],
+ [0x01F201, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Hiragana}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Hiragana}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Hira}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Hira}"
+);
+testPropertyEscapes(
+ /^\P{scx=Hiragana}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Hiragana}"
+);
+testPropertyEscapes(
+ /^\P{scx=Hira}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Hira}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Imperial_Aramaic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Imperial_Aramaic.js
new file mode 100644
index 0000000000..69a39e1507
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Imperial_Aramaic.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Imperial_Aramaic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010840, 0x010855],
+ [0x010857, 0x01085F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Imperial_Aramaic}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Imperial_Aramaic}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Armi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Armi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Imperial_Aramaic}+$/u,
+ matchSymbols,
+ "\\p{scx=Imperial_Aramaic}"
+);
+testPropertyEscapes(
+ /^\p{scx=Armi}+$/u,
+ matchSymbols,
+ "\\p{scx=Armi}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x010856
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01083F],
+ [0x010860, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Imperial_Aramaic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Imperial_Aramaic}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Armi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Armi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Imperial_Aramaic}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Imperial_Aramaic}"
+);
+testPropertyEscapes(
+ /^\P{scx=Armi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Armi}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inherited.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inherited.js
new file mode 100644
index 0000000000..922b5b0077
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inherited.js
@@ -0,0 +1,133 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Inherited`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x001DF9,
+ 0x0101FD
+ ],
+ ranges: [
+ [0x000300, 0x000341],
+ [0x000343, 0x000344],
+ [0x000346, 0x000362],
+ [0x000953, 0x000954],
+ [0x001AB0, 0x001ACE],
+ [0x001DC2, 0x001DF7],
+ [0x001DFB, 0x001DFF],
+ [0x00200C, 0x00200D],
+ [0x0020D0, 0x0020EF],
+ [0x00FE00, 0x00FE0F],
+ [0x00FE20, 0x00FE2D],
+ [0x01CF00, 0x01CF2D],
+ [0x01CF30, 0x01CF46],
+ [0x01D167, 0x01D169],
+ [0x01D17B, 0x01D182],
+ [0x01D185, 0x01D18B],
+ [0x01D1AA, 0x01D1AD],
+ [0x0E0100, 0x0E01EF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Inherited}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Inherited}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Zinh}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Zinh}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Qaai}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Qaai}"
+);
+testPropertyEscapes(
+ /^\p{scx=Inherited}+$/u,
+ matchSymbols,
+ "\\p{scx=Inherited}"
+);
+testPropertyEscapes(
+ /^\p{scx=Zinh}+$/u,
+ matchSymbols,
+ "\\p{scx=Zinh}"
+);
+testPropertyEscapes(
+ /^\p{scx=Qaai}+$/u,
+ matchSymbols,
+ "\\p{scx=Qaai}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000342,
+ 0x000345,
+ 0x001DF8,
+ 0x001DFA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0002FF],
+ [0x000363, 0x000952],
+ [0x000955, 0x001AAF],
+ [0x001ACF, 0x001DC1],
+ [0x001E00, 0x00200B],
+ [0x00200E, 0x0020CF],
+ [0x0020F0, 0x00DBFF],
+ [0x00E000, 0x00FDFF],
+ [0x00FE10, 0x00FE1F],
+ [0x00FE2E, 0x0101FC],
+ [0x0101FE, 0x01CEFF],
+ [0x01CF2E, 0x01CF2F],
+ [0x01CF47, 0x01D166],
+ [0x01D16A, 0x01D17A],
+ [0x01D183, 0x01D184],
+ [0x01D18C, 0x01D1A9],
+ [0x01D1AE, 0x0E00FF],
+ [0x0E01F0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Inherited}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Inherited}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Zinh}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Zinh}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Qaai}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Qaai}"
+);
+testPropertyEscapes(
+ /^\P{scx=Inherited}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Inherited}"
+);
+testPropertyEscapes(
+ /^\P{scx=Zinh}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Zinh}"
+);
+testPropertyEscapes(
+ /^\P{scx=Qaai}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Qaai}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inscriptional_Pahlavi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inscriptional_Pahlavi.js
new file mode 100644
index 0000000000..da0bc1aa4f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inscriptional_Pahlavi.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Inscriptional_Pahlavi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010B60, 0x010B72],
+ [0x010B78, 0x010B7F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Inscriptional_Pahlavi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Inscriptional_Pahlavi}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Phli}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Phli}"
+);
+testPropertyEscapes(
+ /^\p{scx=Inscriptional_Pahlavi}+$/u,
+ matchSymbols,
+ "\\p{scx=Inscriptional_Pahlavi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Phli}+$/u,
+ matchSymbols,
+ "\\p{scx=Phli}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010B5F],
+ [0x010B73, 0x010B77],
+ [0x010B80, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Inscriptional_Pahlavi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Inscriptional_Pahlavi}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Phli}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Phli}"
+);
+testPropertyEscapes(
+ /^\P{scx=Inscriptional_Pahlavi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Inscriptional_Pahlavi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Phli}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Phli}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inscriptional_Parthian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inscriptional_Parthian.js
new file mode 100644
index 0000000000..a81529feaa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inscriptional_Parthian.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Inscriptional_Parthian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010B40, 0x010B55],
+ [0x010B58, 0x010B5F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Inscriptional_Parthian}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Inscriptional_Parthian}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Prti}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Prti}"
+);
+testPropertyEscapes(
+ /^\p{scx=Inscriptional_Parthian}+$/u,
+ matchSymbols,
+ "\\p{scx=Inscriptional_Parthian}"
+);
+testPropertyEscapes(
+ /^\p{scx=Prti}+$/u,
+ matchSymbols,
+ "\\p{scx=Prti}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010B3F],
+ [0x010B56, 0x010B57],
+ [0x010B60, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Inscriptional_Parthian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Inscriptional_Parthian}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Prti}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Prti}"
+);
+testPropertyEscapes(
+ /^\P{scx=Inscriptional_Parthian}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Inscriptional_Parthian}"
+);
+testPropertyEscapes(
+ /^\P{scx=Prti}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Prti}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Javanese.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Javanese.js
new file mode 100644
index 0000000000..06f6bc758c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Javanese.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Javanese`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00A980, 0x00A9CD],
+ [0x00A9CF, 0x00A9D9],
+ [0x00A9DE, 0x00A9DF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Javanese}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Javanese}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Java}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Java}"
+);
+testPropertyEscapes(
+ /^\p{scx=Javanese}+$/u,
+ matchSymbols,
+ "\\p{scx=Javanese}"
+);
+testPropertyEscapes(
+ /^\p{scx=Java}+$/u,
+ matchSymbols,
+ "\\p{scx=Java}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00A9CE
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A97F],
+ [0x00A9DA, 0x00A9DD],
+ [0x00A9E0, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Javanese}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Javanese}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Java}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Java}"
+);
+testPropertyEscapes(
+ /^\P{scx=Javanese}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Javanese}"
+);
+testPropertyEscapes(
+ /^\P{scx=Java}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Java}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kaithi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kaithi.js
new file mode 100644
index 0000000000..afa0c5a1ae
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kaithi.js
@@ -0,0 +1,80 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Kaithi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0110CD
+ ],
+ ranges: [
+ [0x000966, 0x00096F],
+ [0x00A830, 0x00A839],
+ [0x011080, 0x0110C2]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Kaithi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Kaithi}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Kthi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Kthi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Kaithi}+$/u,
+ matchSymbols,
+ "\\p{scx=Kaithi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Kthi}+$/u,
+ matchSymbols,
+ "\\p{scx=Kthi}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000965],
+ [0x000970, 0x00A82F],
+ [0x00A83A, 0x00DBFF],
+ [0x00E000, 0x01107F],
+ [0x0110C3, 0x0110CC],
+ [0x0110CE, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Kaithi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Kaithi}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Kthi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Kthi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Kaithi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Kaithi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Kthi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Kthi}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kannada.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kannada.js
new file mode 100644
index 0000000000..037b733ce4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kannada.js
@@ -0,0 +1,115 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Kannada`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x001CD0,
+ 0x001CD2,
+ 0x001CDA,
+ 0x001CF2,
+ 0x001CF4
+ ],
+ ranges: [
+ [0x000951, 0x000952],
+ [0x000964, 0x000965],
+ [0x000C80, 0x000C8C],
+ [0x000C8E, 0x000C90],
+ [0x000C92, 0x000CA8],
+ [0x000CAA, 0x000CB3],
+ [0x000CB5, 0x000CB9],
+ [0x000CBC, 0x000CC4],
+ [0x000CC6, 0x000CC8],
+ [0x000CCA, 0x000CCD],
+ [0x000CD5, 0x000CD6],
+ [0x000CDD, 0x000CDE],
+ [0x000CE0, 0x000CE3],
+ [0x000CE6, 0x000CEF],
+ [0x000CF1, 0x000CF3],
+ [0x00A830, 0x00A835]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Kannada}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Kannada}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Knda}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Knda}"
+);
+testPropertyEscapes(
+ /^\p{scx=Kannada}+$/u,
+ matchSymbols,
+ "\\p{scx=Kannada}"
+);
+testPropertyEscapes(
+ /^\p{scx=Knda}+$/u,
+ matchSymbols,
+ "\\p{scx=Knda}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000C8D,
+ 0x000C91,
+ 0x000CA9,
+ 0x000CB4,
+ 0x000CC5,
+ 0x000CC9,
+ 0x000CDF,
+ 0x000CF0,
+ 0x001CD1,
+ 0x001CF3
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000950],
+ [0x000953, 0x000963],
+ [0x000966, 0x000C7F],
+ [0x000CBA, 0x000CBB],
+ [0x000CCE, 0x000CD4],
+ [0x000CD7, 0x000CDC],
+ [0x000CE4, 0x000CE5],
+ [0x000CF4, 0x001CCF],
+ [0x001CD3, 0x001CD9],
+ [0x001CDB, 0x001CF1],
+ [0x001CF5, 0x00A82F],
+ [0x00A836, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Kannada}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Kannada}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Knda}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Knda}"
+);
+testPropertyEscapes(
+ /^\P{scx=Kannada}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Kannada}"
+);
+testPropertyEscapes(
+ /^\P{scx=Knda}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Knda}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Katakana.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Katakana.js
new file mode 100644
index 0000000000..ba8d1e7810
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Katakana.js
@@ -0,0 +1,113 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Katakana`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x003037,
+ 0x01B000,
+ 0x01B155
+ ],
+ ranges: [
+ [0x003001, 0x003003],
+ [0x003008, 0x003011],
+ [0x003013, 0x00301F],
+ [0x003030, 0x003035],
+ [0x00303C, 0x00303D],
+ [0x003099, 0x00309C],
+ [0x0030A0, 0x0030FF],
+ [0x0031F0, 0x0031FF],
+ [0x0032D0, 0x0032FE],
+ [0x003300, 0x003357],
+ [0x00FE45, 0x00FE46],
+ [0x00FF61, 0x00FF9F],
+ [0x01AFF0, 0x01AFF3],
+ [0x01AFF5, 0x01AFFB],
+ [0x01AFFD, 0x01AFFE],
+ [0x01B120, 0x01B122],
+ [0x01B164, 0x01B167]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Katakana}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Katakana}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Kana}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Kana}"
+);
+testPropertyEscapes(
+ /^\p{scx=Katakana}+$/u,
+ matchSymbols,
+ "\\p{scx=Katakana}"
+);
+testPropertyEscapes(
+ /^\p{scx=Kana}+$/u,
+ matchSymbols,
+ "\\p{scx=Kana}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x003012,
+ 0x003036,
+ 0x0032FF,
+ 0x01AFF4,
+ 0x01AFFC,
+ 0x01AFFF
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x003000],
+ [0x003004, 0x003007],
+ [0x003020, 0x00302F],
+ [0x003038, 0x00303B],
+ [0x00303E, 0x003098],
+ [0x00309D, 0x00309F],
+ [0x003100, 0x0031EF],
+ [0x003200, 0x0032CF],
+ [0x003358, 0x00DBFF],
+ [0x00E000, 0x00FE44],
+ [0x00FE47, 0x00FF60],
+ [0x00FFA0, 0x01AFEF],
+ [0x01B001, 0x01B11F],
+ [0x01B123, 0x01B154],
+ [0x01B156, 0x01B163],
+ [0x01B168, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Katakana}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Katakana}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Kana}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Kana}"
+);
+testPropertyEscapes(
+ /^\P{scx=Katakana}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Katakana}"
+);
+testPropertyEscapes(
+ /^\P{scx=Kana}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Kana}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kawi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kawi.js
new file mode 100644
index 0000000000..31abbac649
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kawi.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Kawi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011F00, 0x011F10],
+ [0x011F12, 0x011F3A],
+ [0x011F3E, 0x011F59]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Kawi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Kawi}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Kawi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Kawi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Kawi}+$/u,
+ matchSymbols,
+ "\\p{scx=Kawi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Kawi}+$/u,
+ matchSymbols,
+ "\\p{scx=Kawi}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011F11
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x011EFF],
+ [0x011F3B, 0x011F3D],
+ [0x011F5A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Kawi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Kawi}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Kawi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Kawi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Kawi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Kawi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Kawi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Kawi}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kayah_Li.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kayah_Li.js
new file mode 100644
index 0000000000..53ed26ff40
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kayah_Li.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Kayah_Li`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00A900, 0x00A92F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Kayah_Li}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Kayah_Li}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Kali}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Kali}"
+);
+testPropertyEscapes(
+ /^\p{scx=Kayah_Li}+$/u,
+ matchSymbols,
+ "\\p{scx=Kayah_Li}"
+);
+testPropertyEscapes(
+ /^\p{scx=Kali}+$/u,
+ matchSymbols,
+ "\\p{scx=Kali}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A8FF],
+ [0x00A930, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Kayah_Li}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Kayah_Li}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Kali}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Kali}"
+);
+testPropertyEscapes(
+ /^\P{scx=Kayah_Li}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Kayah_Li}"
+);
+testPropertyEscapes(
+ /^\P{scx=Kali}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Kali}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kharoshthi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kharoshthi.js
new file mode 100644
index 0000000000..906e7f46b0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kharoshthi.js
@@ -0,0 +1,88 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Kharoshthi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010A00, 0x010A03],
+ [0x010A05, 0x010A06],
+ [0x010A0C, 0x010A13],
+ [0x010A15, 0x010A17],
+ [0x010A19, 0x010A35],
+ [0x010A38, 0x010A3A],
+ [0x010A3F, 0x010A48],
+ [0x010A50, 0x010A58]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Kharoshthi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Kharoshthi}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Khar}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Khar}"
+);
+testPropertyEscapes(
+ /^\p{scx=Kharoshthi}+$/u,
+ matchSymbols,
+ "\\p{scx=Kharoshthi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Khar}+$/u,
+ matchSymbols,
+ "\\p{scx=Khar}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x010A04,
+ 0x010A14,
+ 0x010A18
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0109FF],
+ [0x010A07, 0x010A0B],
+ [0x010A36, 0x010A37],
+ [0x010A3B, 0x010A3E],
+ [0x010A49, 0x010A4F],
+ [0x010A59, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Kharoshthi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Kharoshthi}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Khar}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Khar}"
+);
+testPropertyEscapes(
+ /^\P{scx=Kharoshthi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Kharoshthi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Khar}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Khar}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khitan_Small_Script.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khitan_Small_Script.js
new file mode 100644
index 0000000000..c1a6bba218
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khitan_Small_Script.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Khitan_Small_Script`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x016FE4
+ ],
+ ranges: [
+ [0x018B00, 0x018CD5]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Khitan_Small_Script}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Khitan_Small_Script}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Kits}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Kits}"
+);
+testPropertyEscapes(
+ /^\p{scx=Khitan_Small_Script}+$/u,
+ matchSymbols,
+ "\\p{scx=Khitan_Small_Script}"
+);
+testPropertyEscapes(
+ /^\p{scx=Kits}+$/u,
+ matchSymbols,
+ "\\p{scx=Kits}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016FE3],
+ [0x016FE5, 0x018AFF],
+ [0x018CD6, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Khitan_Small_Script}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Khitan_Small_Script}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Kits}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Kits}"
+);
+testPropertyEscapes(
+ /^\P{scx=Khitan_Small_Script}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Khitan_Small_Script}"
+);
+testPropertyEscapes(
+ /^\P{scx=Kits}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Kits}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khmer.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khmer.js
new file mode 100644
index 0000000000..f887b1a1a8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khmer.js
@@ -0,0 +1,79 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Khmer`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001780, 0x0017DD],
+ [0x0017E0, 0x0017E9],
+ [0x0017F0, 0x0017F9],
+ [0x0019E0, 0x0019FF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Khmer}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Khmer}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Khmr}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Khmr}"
+);
+testPropertyEscapes(
+ /^\p{scx=Khmer}+$/u,
+ matchSymbols,
+ "\\p{scx=Khmer}"
+);
+testPropertyEscapes(
+ /^\p{scx=Khmr}+$/u,
+ matchSymbols,
+ "\\p{scx=Khmr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00177F],
+ [0x0017DE, 0x0017DF],
+ [0x0017EA, 0x0017EF],
+ [0x0017FA, 0x0019DF],
+ [0x001A00, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Khmer}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Khmer}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Khmr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Khmr}"
+);
+testPropertyEscapes(
+ /^\P{scx=Khmer}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Khmer}"
+);
+testPropertyEscapes(
+ /^\P{scx=Khmr}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Khmr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khojki.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khojki.js
new file mode 100644
index 0000000000..de582481b7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khojki.js
@@ -0,0 +1,80 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Khojki`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000AE6, 0x000AEF],
+ [0x00A830, 0x00A839],
+ [0x011200, 0x011211],
+ [0x011213, 0x011241]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Khojki}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Khojki}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Khoj}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Khoj}"
+);
+testPropertyEscapes(
+ /^\p{scx=Khojki}+$/u,
+ matchSymbols,
+ "\\p{scx=Khojki}"
+);
+testPropertyEscapes(
+ /^\p{scx=Khoj}+$/u,
+ matchSymbols,
+ "\\p{scx=Khoj}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011212
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000AE5],
+ [0x000AF0, 0x00A82F],
+ [0x00A83A, 0x00DBFF],
+ [0x00E000, 0x0111FF],
+ [0x011242, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Khojki}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Khojki}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Khoj}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Khoj}"
+);
+testPropertyEscapes(
+ /^\P{scx=Khojki}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Khojki}"
+);
+testPropertyEscapes(
+ /^\P{scx=Khoj}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Khoj}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khudawadi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khudawadi.js
new file mode 100644
index 0000000000..a7dd376e1b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khudawadi.js
@@ -0,0 +1,79 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Khudawadi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000964, 0x000965],
+ [0x00A830, 0x00A839],
+ [0x0112B0, 0x0112EA],
+ [0x0112F0, 0x0112F9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Khudawadi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Khudawadi}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Sind}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Sind}"
+);
+testPropertyEscapes(
+ /^\p{scx=Khudawadi}+$/u,
+ matchSymbols,
+ "\\p{scx=Khudawadi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Sind}+$/u,
+ matchSymbols,
+ "\\p{scx=Sind}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000963],
+ [0x000966, 0x00A82F],
+ [0x00A83A, 0x00DBFF],
+ [0x00E000, 0x0112AF],
+ [0x0112EB, 0x0112EF],
+ [0x0112FA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Khudawadi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Khudawadi}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Sind}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Sind}"
+);
+testPropertyEscapes(
+ /^\P{scx=Khudawadi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Khudawadi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Sind}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Sind}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lao.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lao.js
new file mode 100644
index 0000000000..12281a09ad
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lao.js
@@ -0,0 +1,95 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Lao`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000E84,
+ 0x000EA5,
+ 0x000EC6
+ ],
+ ranges: [
+ [0x000E81, 0x000E82],
+ [0x000E86, 0x000E8A],
+ [0x000E8C, 0x000EA3],
+ [0x000EA7, 0x000EBD],
+ [0x000EC0, 0x000EC4],
+ [0x000EC8, 0x000ECE],
+ [0x000ED0, 0x000ED9],
+ [0x000EDC, 0x000EDF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Lao}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Lao}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Laoo}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Laoo}"
+);
+testPropertyEscapes(
+ /^\p{scx=Lao}+$/u,
+ matchSymbols,
+ "\\p{scx=Lao}"
+);
+testPropertyEscapes(
+ /^\p{scx=Laoo}+$/u,
+ matchSymbols,
+ "\\p{scx=Laoo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000E83,
+ 0x000E85,
+ 0x000E8B,
+ 0x000EA4,
+ 0x000EA6,
+ 0x000EC5,
+ 0x000EC7,
+ 0x000ECF
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000E80],
+ [0x000EBE, 0x000EBF],
+ [0x000EDA, 0x000EDB],
+ [0x000EE0, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Lao}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Lao}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Laoo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Laoo}"
+);
+testPropertyEscapes(
+ /^\P{scx=Lao}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Lao}"
+);
+testPropertyEscapes(
+ /^\P{scx=Laoo}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Laoo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Latin.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Latin.js
new file mode 100644
index 0000000000..49a286a298
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Latin.js
@@ -0,0 +1,167 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Latin`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000AA,
+ 0x0000BA,
+ 0x0010FB,
+ 0x00202F,
+ 0x002071,
+ 0x00207F,
+ 0x0020F0,
+ 0x002132,
+ 0x00214E,
+ 0x00A7D3,
+ 0x00A92E
+ ],
+ ranges: [
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000F6],
+ [0x0000F8, 0x0002B8],
+ [0x0002E0, 0x0002E4],
+ [0x000363, 0x00036F],
+ [0x000485, 0x000486],
+ [0x000951, 0x000952],
+ [0x001D00, 0x001D25],
+ [0x001D2C, 0x001D5C],
+ [0x001D62, 0x001D65],
+ [0x001D6B, 0x001D77],
+ [0x001D79, 0x001DBE],
+ [0x001E00, 0x001EFF],
+ [0x002090, 0x00209C],
+ [0x00212A, 0x00212B],
+ [0x002160, 0x002188],
+ [0x002C60, 0x002C7F],
+ [0x00A700, 0x00A707],
+ [0x00A722, 0x00A787],
+ [0x00A78B, 0x00A7CA],
+ [0x00A7D0, 0x00A7D1],
+ [0x00A7D5, 0x00A7D9],
+ [0x00A7F2, 0x00A7FF],
+ [0x00AB30, 0x00AB5A],
+ [0x00AB5C, 0x00AB64],
+ [0x00AB66, 0x00AB69],
+ [0x00FB00, 0x00FB06],
+ [0x00FF21, 0x00FF3A],
+ [0x00FF41, 0x00FF5A],
+ [0x010780, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x01DF00, 0x01DF1E],
+ [0x01DF25, 0x01DF2A]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Latin}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Latin}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Latn}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Latn}"
+);
+testPropertyEscapes(
+ /^\p{scx=Latin}+$/u,
+ matchSymbols,
+ "\\p{scx=Latin}"
+);
+testPropertyEscapes(
+ /^\p{scx=Latn}+$/u,
+ matchSymbols,
+ "\\p{scx=Latn}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000D7,
+ 0x0000F7,
+ 0x001D78,
+ 0x00A7D2,
+ 0x00A7D4,
+ 0x00AB5B,
+ 0x00AB65,
+ 0x010786,
+ 0x0107B1
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000040],
+ [0x00005B, 0x000060],
+ [0x00007B, 0x0000A9],
+ [0x0000AB, 0x0000B9],
+ [0x0000BB, 0x0000BF],
+ [0x0002B9, 0x0002DF],
+ [0x0002E5, 0x000362],
+ [0x000370, 0x000484],
+ [0x000487, 0x000950],
+ [0x000953, 0x0010FA],
+ [0x0010FC, 0x001CFF],
+ [0x001D26, 0x001D2B],
+ [0x001D5D, 0x001D61],
+ [0x001D66, 0x001D6A],
+ [0x001DBF, 0x001DFF],
+ [0x001F00, 0x00202E],
+ [0x002030, 0x002070],
+ [0x002072, 0x00207E],
+ [0x002080, 0x00208F],
+ [0x00209D, 0x0020EF],
+ [0x0020F1, 0x002129],
+ [0x00212C, 0x002131],
+ [0x002133, 0x00214D],
+ [0x00214F, 0x00215F],
+ [0x002189, 0x002C5F],
+ [0x002C80, 0x00A6FF],
+ [0x00A708, 0x00A721],
+ [0x00A788, 0x00A78A],
+ [0x00A7CB, 0x00A7CF],
+ [0x00A7DA, 0x00A7F1],
+ [0x00A800, 0x00A92D],
+ [0x00A92F, 0x00AB2F],
+ [0x00AB6A, 0x00DBFF],
+ [0x00E000, 0x00FAFF],
+ [0x00FB07, 0x00FF20],
+ [0x00FF3B, 0x00FF40],
+ [0x00FF5B, 0x01077F],
+ [0x0107BB, 0x01DEFF],
+ [0x01DF1F, 0x01DF24],
+ [0x01DF2B, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Latin}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Latin}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Latn}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Latn}"
+);
+testPropertyEscapes(
+ /^\P{scx=Latin}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Latin}"
+);
+testPropertyEscapes(
+ /^\P{scx=Latn}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Latn}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lepcha.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lepcha.js
new file mode 100644
index 0000000000..879fdb54f3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lepcha.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Lepcha`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001C00, 0x001C37],
+ [0x001C3B, 0x001C49],
+ [0x001C4D, 0x001C4F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Lepcha}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Lepcha}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Lepc}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Lepc}"
+);
+testPropertyEscapes(
+ /^\p{scx=Lepcha}+$/u,
+ matchSymbols,
+ "\\p{scx=Lepcha}"
+);
+testPropertyEscapes(
+ /^\p{scx=Lepc}+$/u,
+ matchSymbols,
+ "\\p{scx=Lepc}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x001BFF],
+ [0x001C38, 0x001C3A],
+ [0x001C4A, 0x001C4C],
+ [0x001C50, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Lepcha}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Lepcha}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Lepc}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Lepc}"
+);
+testPropertyEscapes(
+ /^\P{scx=Lepcha}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Lepcha}"
+);
+testPropertyEscapes(
+ /^\P{scx=Lepc}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Lepc}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Limbu.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Limbu.js
new file mode 100644
index 0000000000..7d790ff104
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Limbu.js
@@ -0,0 +1,85 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Limbu`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000965,
+ 0x001940
+ ],
+ ranges: [
+ [0x001900, 0x00191E],
+ [0x001920, 0x00192B],
+ [0x001930, 0x00193B],
+ [0x001944, 0x00194F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Limbu}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Limbu}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Limb}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Limb}"
+);
+testPropertyEscapes(
+ /^\p{scx=Limbu}+$/u,
+ matchSymbols,
+ "\\p{scx=Limbu}"
+);
+testPropertyEscapes(
+ /^\p{scx=Limb}+$/u,
+ matchSymbols,
+ "\\p{scx=Limb}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00191F
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000964],
+ [0x000966, 0x0018FF],
+ [0x00192C, 0x00192F],
+ [0x00193C, 0x00193F],
+ [0x001941, 0x001943],
+ [0x001950, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Limbu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Limbu}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Limb}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Limb}"
+);
+testPropertyEscapes(
+ /^\P{scx=Limbu}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Limbu}"
+);
+testPropertyEscapes(
+ /^\P{scx=Limb}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Limb}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Linear_A.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Linear_A.js
new file mode 100644
index 0000000000..d53b7bf47f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Linear_A.js
@@ -0,0 +1,79 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Linear_A`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010107, 0x010133],
+ [0x010600, 0x010736],
+ [0x010740, 0x010755],
+ [0x010760, 0x010767]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Linear_A}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Linear_A}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Lina}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Lina}"
+);
+testPropertyEscapes(
+ /^\p{scx=Linear_A}+$/u,
+ matchSymbols,
+ "\\p{scx=Linear_A}"
+);
+testPropertyEscapes(
+ /^\p{scx=Lina}+$/u,
+ matchSymbols,
+ "\\p{scx=Lina}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010106],
+ [0x010134, 0x0105FF],
+ [0x010737, 0x01073F],
+ [0x010756, 0x01075F],
+ [0x010768, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Linear_A}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Linear_A}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Lina}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Lina}"
+);
+testPropertyEscapes(
+ /^\P{scx=Linear_A}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Linear_A}"
+);
+testPropertyEscapes(
+ /^\P{scx=Lina}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Lina}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Linear_B.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Linear_B.js
new file mode 100644
index 0000000000..d8ffc94fb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Linear_B.js
@@ -0,0 +1,92 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Linear_B`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010000, 0x01000B],
+ [0x01000D, 0x010026],
+ [0x010028, 0x01003A],
+ [0x01003C, 0x01003D],
+ [0x01003F, 0x01004D],
+ [0x010050, 0x01005D],
+ [0x010080, 0x0100FA],
+ [0x010100, 0x010102],
+ [0x010107, 0x010133],
+ [0x010137, 0x01013F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Linear_B}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Linear_B}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Linb}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Linb}"
+);
+testPropertyEscapes(
+ /^\p{scx=Linear_B}+$/u,
+ matchSymbols,
+ "\\p{scx=Linear_B}"
+);
+testPropertyEscapes(
+ /^\p{scx=Linb}+$/u,
+ matchSymbols,
+ "\\p{scx=Linb}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x01000C,
+ 0x010027,
+ 0x01003B,
+ 0x01003E
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x00FFFF],
+ [0x01004E, 0x01004F],
+ [0x01005E, 0x01007F],
+ [0x0100FB, 0x0100FF],
+ [0x010103, 0x010106],
+ [0x010134, 0x010136],
+ [0x010140, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Linear_B}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Linear_B}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Linb}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Linb}"
+);
+testPropertyEscapes(
+ /^\P{scx=Linear_B}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Linear_B}"
+);
+testPropertyEscapes(
+ /^\P{scx=Linb}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Linb}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lisu.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lisu.js
new file mode 100644
index 0000000000..758e53c99b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lisu.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Lisu`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x011FB0
+ ],
+ ranges: [
+ [0x00A4D0, 0x00A4FF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Lisu}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Lisu}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Lisu}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Lisu}"
+);
+testPropertyEscapes(
+ /^\p{scx=Lisu}+$/u,
+ matchSymbols,
+ "\\p{scx=Lisu}"
+);
+testPropertyEscapes(
+ /^\p{scx=Lisu}+$/u,
+ matchSymbols,
+ "\\p{scx=Lisu}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A4CF],
+ [0x00A500, 0x00DBFF],
+ [0x00E000, 0x011FAF],
+ [0x011FB1, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Lisu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Lisu}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Lisu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Lisu}"
+);
+testPropertyEscapes(
+ /^\P{scx=Lisu}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Lisu}"
+);
+testPropertyEscapes(
+ /^\P{scx=Lisu}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Lisu}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lycian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lycian.js
new file mode 100644
index 0000000000..3c065d909d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lycian.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Lycian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010280, 0x01029C]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Lycian}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Lycian}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Lyci}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Lyci}"
+);
+testPropertyEscapes(
+ /^\p{scx=Lycian}+$/u,
+ matchSymbols,
+ "\\p{scx=Lycian}"
+);
+testPropertyEscapes(
+ /^\p{scx=Lyci}+$/u,
+ matchSymbols,
+ "\\p{scx=Lyci}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01027F],
+ [0x01029D, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Lycian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Lycian}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Lyci}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Lyci}"
+);
+testPropertyEscapes(
+ /^\P{scx=Lycian}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Lycian}"
+);
+testPropertyEscapes(
+ /^\P{scx=Lyci}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Lyci}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lydian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lydian.js
new file mode 100644
index 0000000000..af89318235
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lydian.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Lydian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x01093F
+ ],
+ ranges: [
+ [0x010920, 0x010939]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Lydian}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Lydian}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Lydi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Lydi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Lydian}+$/u,
+ matchSymbols,
+ "\\p{scx=Lydian}"
+);
+testPropertyEscapes(
+ /^\p{scx=Lydi}+$/u,
+ matchSymbols,
+ "\\p{scx=Lydi}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01091F],
+ [0x01093A, 0x01093E],
+ [0x010940, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Lydian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Lydian}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Lydi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Lydi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Lydian}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Lydian}"
+);
+testPropertyEscapes(
+ /^\P{scx=Lydi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Lydi}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mahajani.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mahajani.js
new file mode 100644
index 0000000000..feebf3827b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mahajani.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Mahajani`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000964, 0x00096F],
+ [0x00A830, 0x00A839],
+ [0x011150, 0x011176]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Mahajani}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Mahajani}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Mahj}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Mahj}"
+);
+testPropertyEscapes(
+ /^\p{scx=Mahajani}+$/u,
+ matchSymbols,
+ "\\p{scx=Mahajani}"
+);
+testPropertyEscapes(
+ /^\p{scx=Mahj}+$/u,
+ matchSymbols,
+ "\\p{scx=Mahj}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000963],
+ [0x000970, 0x00A82F],
+ [0x00A83A, 0x00DBFF],
+ [0x00E000, 0x01114F],
+ [0x011177, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Mahajani}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Mahajani}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Mahj}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Mahj}"
+);
+testPropertyEscapes(
+ /^\P{scx=Mahajani}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Mahajani}"
+);
+testPropertyEscapes(
+ /^\P{scx=Mahj}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Mahj}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Makasar.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Makasar.js
new file mode 100644
index 0000000000..701ee1dc1b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Makasar.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Makasar`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011EE0, 0x011EF8]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Makasar}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Makasar}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Maka}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Maka}"
+);
+testPropertyEscapes(
+ /^\p{scx=Makasar}+$/u,
+ matchSymbols,
+ "\\p{scx=Makasar}"
+);
+testPropertyEscapes(
+ /^\p{scx=Maka}+$/u,
+ matchSymbols,
+ "\\p{scx=Maka}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x011EDF],
+ [0x011EF9, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Makasar}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Makasar}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Maka}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Maka}"
+);
+testPropertyEscapes(
+ /^\P{scx=Makasar}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Makasar}"
+);
+testPropertyEscapes(
+ /^\P{scx=Maka}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Maka}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Malayalam.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Malayalam.js
new file mode 100644
index 0000000000..39cd2edddf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Malayalam.js
@@ -0,0 +1,95 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Malayalam`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x001CDA
+ ],
+ ranges: [
+ [0x000951, 0x000952],
+ [0x000964, 0x000965],
+ [0x000D00, 0x000D0C],
+ [0x000D0E, 0x000D10],
+ [0x000D12, 0x000D44],
+ [0x000D46, 0x000D48],
+ [0x000D4A, 0x000D4F],
+ [0x000D54, 0x000D63],
+ [0x000D66, 0x000D7F],
+ [0x00A830, 0x00A832]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Malayalam}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Malayalam}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Mlym}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Mlym}"
+);
+testPropertyEscapes(
+ /^\p{scx=Malayalam}+$/u,
+ matchSymbols,
+ "\\p{scx=Malayalam}"
+);
+testPropertyEscapes(
+ /^\p{scx=Mlym}+$/u,
+ matchSymbols,
+ "\\p{scx=Mlym}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000D0D,
+ 0x000D11,
+ 0x000D45,
+ 0x000D49
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000950],
+ [0x000953, 0x000963],
+ [0x000966, 0x000CFF],
+ [0x000D50, 0x000D53],
+ [0x000D64, 0x000D65],
+ [0x000D80, 0x001CD9],
+ [0x001CDB, 0x00A82F],
+ [0x00A833, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Malayalam}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Malayalam}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Mlym}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Mlym}"
+);
+testPropertyEscapes(
+ /^\P{scx=Malayalam}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Malayalam}"
+);
+testPropertyEscapes(
+ /^\P{scx=Mlym}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Mlym}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mandaic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mandaic.js
new file mode 100644
index 0000000000..84dc0aadd4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mandaic.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Mandaic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000640,
+ 0x00085E
+ ],
+ ranges: [
+ [0x000840, 0x00085B]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Mandaic}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Mandaic}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Mand}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Mand}"
+);
+testPropertyEscapes(
+ /^\p{scx=Mandaic}+$/u,
+ matchSymbols,
+ "\\p{scx=Mandaic}"
+);
+testPropertyEscapes(
+ /^\p{scx=Mand}+$/u,
+ matchSymbols,
+ "\\p{scx=Mand}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00063F],
+ [0x000641, 0x00083F],
+ [0x00085C, 0x00085D],
+ [0x00085F, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Mandaic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Mandaic}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Mand}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Mand}"
+);
+testPropertyEscapes(
+ /^\P{scx=Mandaic}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Mandaic}"
+);
+testPropertyEscapes(
+ /^\P{scx=Mand}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Mand}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Manichaean.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Manichaean.js
new file mode 100644
index 0000000000..d3055c5963
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Manichaean.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Manichaean`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000640
+ ],
+ ranges: [
+ [0x010AC0, 0x010AE6],
+ [0x010AEB, 0x010AF6]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Manichaean}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Manichaean}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Mani}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Mani}"
+);
+testPropertyEscapes(
+ /^\p{scx=Manichaean}+$/u,
+ matchSymbols,
+ "\\p{scx=Manichaean}"
+);
+testPropertyEscapes(
+ /^\p{scx=Mani}+$/u,
+ matchSymbols,
+ "\\p{scx=Mani}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00063F],
+ [0x000641, 0x00DBFF],
+ [0x00E000, 0x010ABF],
+ [0x010AE7, 0x010AEA],
+ [0x010AF7, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Manichaean}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Manichaean}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Mani}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Mani}"
+);
+testPropertyEscapes(
+ /^\P{scx=Manichaean}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Manichaean}"
+);
+testPropertyEscapes(
+ /^\P{scx=Mani}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Mani}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Marchen.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Marchen.js
new file mode 100644
index 0000000000..aebafde323
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Marchen.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Marchen`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011C70, 0x011C8F],
+ [0x011C92, 0x011CA7],
+ [0x011CA9, 0x011CB6]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Marchen}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Marchen}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Marc}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Marc}"
+);
+testPropertyEscapes(
+ /^\p{scx=Marchen}+$/u,
+ matchSymbols,
+ "\\p{scx=Marchen}"
+);
+testPropertyEscapes(
+ /^\p{scx=Marc}+$/u,
+ matchSymbols,
+ "\\p{scx=Marc}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011CA8
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x011C6F],
+ [0x011C90, 0x011C91],
+ [0x011CB7, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Marchen}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Marchen}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Marc}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Marc}"
+);
+testPropertyEscapes(
+ /^\P{scx=Marchen}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Marchen}"
+);
+testPropertyEscapes(
+ /^\P{scx=Marc}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Marc}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Masaram_Gondi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Masaram_Gondi.js
new file mode 100644
index 0000000000..f24ea83720
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Masaram_Gondi.js
@@ -0,0 +1,89 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Masaram_Gondi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x011D3A
+ ],
+ ranges: [
+ [0x000964, 0x000965],
+ [0x011D00, 0x011D06],
+ [0x011D08, 0x011D09],
+ [0x011D0B, 0x011D36],
+ [0x011D3C, 0x011D3D],
+ [0x011D3F, 0x011D47],
+ [0x011D50, 0x011D59]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Masaram_Gondi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Masaram_Gondi}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Gonm}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Gonm}"
+);
+testPropertyEscapes(
+ /^\p{scx=Masaram_Gondi}+$/u,
+ matchSymbols,
+ "\\p{scx=Masaram_Gondi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Gonm}+$/u,
+ matchSymbols,
+ "\\p{scx=Gonm}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011D07,
+ 0x011D0A,
+ 0x011D3B,
+ 0x011D3E
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000963],
+ [0x000966, 0x00DBFF],
+ [0x00E000, 0x011CFF],
+ [0x011D37, 0x011D39],
+ [0x011D48, 0x011D4F],
+ [0x011D5A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Masaram_Gondi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Masaram_Gondi}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Gonm}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Gonm}"
+);
+testPropertyEscapes(
+ /^\P{scx=Masaram_Gondi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Masaram_Gondi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Gonm}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Gonm}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Medefaidrin.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Medefaidrin.js
new file mode 100644
index 0000000000..ae8f0bbf69
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Medefaidrin.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Medefaidrin`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x016E40, 0x016E9A]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Medefaidrin}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Medefaidrin}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Medf}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Medf}"
+);
+testPropertyEscapes(
+ /^\p{scx=Medefaidrin}+$/u,
+ matchSymbols,
+ "\\p{scx=Medefaidrin}"
+);
+testPropertyEscapes(
+ /^\p{scx=Medf}+$/u,
+ matchSymbols,
+ "\\p{scx=Medf}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016E3F],
+ [0x016E9B, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Medefaidrin}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Medefaidrin}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Medf}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Medf}"
+);
+testPropertyEscapes(
+ /^\P{scx=Medefaidrin}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Medefaidrin}"
+);
+testPropertyEscapes(
+ /^\P{scx=Medf}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Medf}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meetei_Mayek.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meetei_Mayek.js
new file mode 100644
index 0000000000..75c6d5d13f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meetei_Mayek.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Meetei_Mayek`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00AAE0, 0x00AAF6],
+ [0x00ABC0, 0x00ABED],
+ [0x00ABF0, 0x00ABF9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Meetei_Mayek}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Meetei_Mayek}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Mtei}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Mtei}"
+);
+testPropertyEscapes(
+ /^\p{scx=Meetei_Mayek}+$/u,
+ matchSymbols,
+ "\\p{scx=Meetei_Mayek}"
+);
+testPropertyEscapes(
+ /^\p{scx=Mtei}+$/u,
+ matchSymbols,
+ "\\p{scx=Mtei}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00AADF],
+ [0x00AAF7, 0x00ABBF],
+ [0x00ABEE, 0x00ABEF],
+ [0x00ABFA, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Meetei_Mayek}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Meetei_Mayek}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Mtei}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Mtei}"
+);
+testPropertyEscapes(
+ /^\P{scx=Meetei_Mayek}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Meetei_Mayek}"
+);
+testPropertyEscapes(
+ /^\P{scx=Mtei}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Mtei}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mende_Kikakui.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mende_Kikakui.js
new file mode 100644
index 0000000000..b7f99bf477
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mende_Kikakui.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Mende_Kikakui`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x01E800, 0x01E8C4],
+ [0x01E8C7, 0x01E8D6]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Mende_Kikakui}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Mende_Kikakui}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Mend}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Mend}"
+);
+testPropertyEscapes(
+ /^\p{scx=Mende_Kikakui}+$/u,
+ matchSymbols,
+ "\\p{scx=Mende_Kikakui}"
+);
+testPropertyEscapes(
+ /^\p{scx=Mend}+$/u,
+ matchSymbols,
+ "\\p{scx=Mend}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01E7FF],
+ [0x01E8C5, 0x01E8C6],
+ [0x01E8D7, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Mende_Kikakui}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Mende_Kikakui}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Mend}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Mend}"
+);
+testPropertyEscapes(
+ /^\P{scx=Mende_Kikakui}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Mende_Kikakui}"
+);
+testPropertyEscapes(
+ /^\P{scx=Mend}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Mend}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meroitic_Cursive.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meroitic_Cursive.js
new file mode 100644
index 0000000000..98a217d398
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meroitic_Cursive.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Meroitic_Cursive`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0109A0, 0x0109B7],
+ [0x0109BC, 0x0109CF],
+ [0x0109D2, 0x0109FF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Meroitic_Cursive}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Meroitic_Cursive}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Merc}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Merc}"
+);
+testPropertyEscapes(
+ /^\p{scx=Meroitic_Cursive}+$/u,
+ matchSymbols,
+ "\\p{scx=Meroitic_Cursive}"
+);
+testPropertyEscapes(
+ /^\p{scx=Merc}+$/u,
+ matchSymbols,
+ "\\p{scx=Merc}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01099F],
+ [0x0109B8, 0x0109BB],
+ [0x0109D0, 0x0109D1],
+ [0x010A00, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Meroitic_Cursive}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Meroitic_Cursive}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Merc}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Merc}"
+);
+testPropertyEscapes(
+ /^\P{scx=Meroitic_Cursive}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Meroitic_Cursive}"
+);
+testPropertyEscapes(
+ /^\P{scx=Merc}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Merc}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meroitic_Hieroglyphs.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meroitic_Hieroglyphs.js
new file mode 100644
index 0000000000..e5bdd2596b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meroitic_Hieroglyphs.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Meroitic_Hieroglyphs`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010980, 0x01099F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Meroitic_Hieroglyphs}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Meroitic_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Mero}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Mero}"
+);
+testPropertyEscapes(
+ /^\p{scx=Meroitic_Hieroglyphs}+$/u,
+ matchSymbols,
+ "\\p{scx=Meroitic_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\p{scx=Mero}+$/u,
+ matchSymbols,
+ "\\p{scx=Mero}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01097F],
+ [0x0109A0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Meroitic_Hieroglyphs}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Meroitic_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Mero}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Mero}"
+);
+testPropertyEscapes(
+ /^\P{scx=Meroitic_Hieroglyphs}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Meroitic_Hieroglyphs}"
+);
+testPropertyEscapes(
+ /^\P{scx=Mero}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Mero}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Miao.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Miao.js
new file mode 100644
index 0000000000..ed2a7f199f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Miao.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Miao`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x016F00, 0x016F4A],
+ [0x016F4F, 0x016F87],
+ [0x016F8F, 0x016F9F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Miao}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Miao}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Plrd}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Plrd}"
+);
+testPropertyEscapes(
+ /^\p{scx=Miao}+$/u,
+ matchSymbols,
+ "\\p{scx=Miao}"
+);
+testPropertyEscapes(
+ /^\p{scx=Plrd}+$/u,
+ matchSymbols,
+ "\\p{scx=Plrd}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016EFF],
+ [0x016F4B, 0x016F4E],
+ [0x016F88, 0x016F8E],
+ [0x016FA0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Miao}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Miao}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Plrd}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Plrd}"
+);
+testPropertyEscapes(
+ /^\P{scx=Miao}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Miao}"
+);
+testPropertyEscapes(
+ /^\P{scx=Plrd}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Plrd}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Modi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Modi.js
new file mode 100644
index 0000000000..d5b65f0130
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Modi.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Modi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00A830, 0x00A839],
+ [0x011600, 0x011644],
+ [0x011650, 0x011659]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Modi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Modi}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Modi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Modi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Modi}+$/u,
+ matchSymbols,
+ "\\p{scx=Modi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Modi}+$/u,
+ matchSymbols,
+ "\\p{scx=Modi}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A82F],
+ [0x00A83A, 0x00DBFF],
+ [0x00E000, 0x0115FF],
+ [0x011645, 0x01164F],
+ [0x01165A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Modi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Modi}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Modi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Modi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Modi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Modi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Modi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Modi}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mongolian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mongolian.js
new file mode 100644
index 0000000000..494e359a21
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mongolian.js
@@ -0,0 +1,82 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Mongolian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00202F
+ ],
+ ranges: [
+ [0x001800, 0x001819],
+ [0x001820, 0x001878],
+ [0x001880, 0x0018AA],
+ [0x011660, 0x01166C]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Mongolian}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Mongolian}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Mong}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Mong}"
+);
+testPropertyEscapes(
+ /^\p{scx=Mongolian}+$/u,
+ matchSymbols,
+ "\\p{scx=Mongolian}"
+);
+testPropertyEscapes(
+ /^\p{scx=Mong}+$/u,
+ matchSymbols,
+ "\\p{scx=Mong}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0017FF],
+ [0x00181A, 0x00181F],
+ [0x001879, 0x00187F],
+ [0x0018AB, 0x00202E],
+ [0x002030, 0x00DBFF],
+ [0x00E000, 0x01165F],
+ [0x01166D, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Mongolian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Mongolian}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Mong}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Mong}"
+);
+testPropertyEscapes(
+ /^\P{scx=Mongolian}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Mongolian}"
+);
+testPropertyEscapes(
+ /^\P{scx=Mong}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Mong}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mro.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mro.js
new file mode 100644
index 0000000000..cb0122c5b6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mro.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Mro`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x016A40, 0x016A5E],
+ [0x016A60, 0x016A69],
+ [0x016A6E, 0x016A6F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Mro}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Mro}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Mroo}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Mroo}"
+);
+testPropertyEscapes(
+ /^\p{scx=Mro}+$/u,
+ matchSymbols,
+ "\\p{scx=Mro}"
+);
+testPropertyEscapes(
+ /^\p{scx=Mroo}+$/u,
+ matchSymbols,
+ "\\p{scx=Mroo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x016A5F
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016A3F],
+ [0x016A6A, 0x016A6D],
+ [0x016A70, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Mro}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Mro}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Mroo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Mroo}"
+);
+testPropertyEscapes(
+ /^\P{scx=Mro}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Mro}"
+);
+testPropertyEscapes(
+ /^\P{scx=Mroo}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Mroo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Multani.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Multani.js
new file mode 100644
index 0000000000..bd72aad226
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Multani.js
@@ -0,0 +1,85 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Multani`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x011288
+ ],
+ ranges: [
+ [0x000A66, 0x000A6F],
+ [0x011280, 0x011286],
+ [0x01128A, 0x01128D],
+ [0x01128F, 0x01129D],
+ [0x01129F, 0x0112A9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Multani}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Multani}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Mult}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Mult}"
+);
+testPropertyEscapes(
+ /^\p{scx=Multani}+$/u,
+ matchSymbols,
+ "\\p{scx=Multani}"
+);
+testPropertyEscapes(
+ /^\p{scx=Mult}+$/u,
+ matchSymbols,
+ "\\p{scx=Mult}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x011287,
+ 0x011289,
+ 0x01128E,
+ 0x01129E
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000A65],
+ [0x000A70, 0x00DBFF],
+ [0x00E000, 0x01127F],
+ [0x0112AA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Multani}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Multani}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Mult}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Mult}"
+);
+testPropertyEscapes(
+ /^\P{scx=Multani}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Multani}"
+);
+testPropertyEscapes(
+ /^\P{scx=Mult}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Mult}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Myanmar.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Myanmar.js
new file mode 100644
index 0000000000..4faf1129ca
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Myanmar.js
@@ -0,0 +1,80 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Myanmar`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00A92E
+ ],
+ ranges: [
+ [0x001000, 0x00109F],
+ [0x00A9E0, 0x00A9FE],
+ [0x00AA60, 0x00AA7F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Myanmar}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Myanmar}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Mymr}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Mymr}"
+);
+testPropertyEscapes(
+ /^\p{scx=Myanmar}+$/u,
+ matchSymbols,
+ "\\p{scx=Myanmar}"
+);
+testPropertyEscapes(
+ /^\p{scx=Mymr}+$/u,
+ matchSymbols,
+ "\\p{scx=Mymr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000FFF],
+ [0x0010A0, 0x00A92D],
+ [0x00A92F, 0x00A9DF],
+ [0x00A9FF, 0x00AA5F],
+ [0x00AA80, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Myanmar}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Myanmar}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Mymr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Mymr}"
+);
+testPropertyEscapes(
+ /^\P{scx=Myanmar}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Myanmar}"
+);
+testPropertyEscapes(
+ /^\P{scx=Mymr}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Mymr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nabataean.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nabataean.js
new file mode 100644
index 0000000000..1ef6ba9261
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nabataean.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Nabataean`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010880, 0x01089E],
+ [0x0108A7, 0x0108AF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Nabataean}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Nabataean}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Nbat}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Nbat}"
+);
+testPropertyEscapes(
+ /^\p{scx=Nabataean}+$/u,
+ matchSymbols,
+ "\\p{scx=Nabataean}"
+);
+testPropertyEscapes(
+ /^\p{scx=Nbat}+$/u,
+ matchSymbols,
+ "\\p{scx=Nbat}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01087F],
+ [0x01089F, 0x0108A6],
+ [0x0108B0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Nabataean}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Nabataean}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Nbat}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Nbat}"
+);
+testPropertyEscapes(
+ /^\P{scx=Nabataean}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Nabataean}"
+);
+testPropertyEscapes(
+ /^\P{scx=Nbat}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Nbat}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nag_Mundari.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nag_Mundari.js
new file mode 100644
index 0000000000..52fc0e732d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nag_Mundari.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Nag_Mundari`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x01E4D0, 0x01E4F9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Nag_Mundari}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Nag_Mundari}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Nagm}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Nagm}"
+);
+testPropertyEscapes(
+ /^\p{scx=Nag_Mundari}+$/u,
+ matchSymbols,
+ "\\p{scx=Nag_Mundari}"
+);
+testPropertyEscapes(
+ /^\p{scx=Nagm}+$/u,
+ matchSymbols,
+ "\\p{scx=Nagm}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01E4CF],
+ [0x01E4FA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Nag_Mundari}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Nag_Mundari}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Nagm}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Nagm}"
+);
+testPropertyEscapes(
+ /^\P{scx=Nag_Mundari}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Nag_Mundari}"
+);
+testPropertyEscapes(
+ /^\P{scx=Nagm}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Nagm}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nandinagari.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nandinagari.js
new file mode 100644
index 0000000000..c9440ace83
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nandinagari.js
@@ -0,0 +1,90 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Nandinagari`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x001CE9,
+ 0x001CF2,
+ 0x001CFA
+ ],
+ ranges: [
+ [0x000964, 0x000965],
+ [0x000CE6, 0x000CEF],
+ [0x00A830, 0x00A835],
+ [0x0119A0, 0x0119A7],
+ [0x0119AA, 0x0119D7],
+ [0x0119DA, 0x0119E4]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Nandinagari}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Nandinagari}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Nand}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Nand}"
+);
+testPropertyEscapes(
+ /^\p{scx=Nandinagari}+$/u,
+ matchSymbols,
+ "\\p{scx=Nandinagari}"
+);
+testPropertyEscapes(
+ /^\p{scx=Nand}+$/u,
+ matchSymbols,
+ "\\p{scx=Nand}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000963],
+ [0x000966, 0x000CE5],
+ [0x000CF0, 0x001CE8],
+ [0x001CEA, 0x001CF1],
+ [0x001CF3, 0x001CF9],
+ [0x001CFB, 0x00A82F],
+ [0x00A836, 0x00DBFF],
+ [0x00E000, 0x01199F],
+ [0x0119A8, 0x0119A9],
+ [0x0119D8, 0x0119D9],
+ [0x0119E5, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Nandinagari}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Nandinagari}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Nand}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Nand}"
+);
+testPropertyEscapes(
+ /^\P{scx=Nandinagari}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Nandinagari}"
+);
+testPropertyEscapes(
+ /^\P{scx=Nand}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Nand}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_New_Tai_Lue.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_New_Tai_Lue.js
new file mode 100644
index 0000000000..69d7b1e3a2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_New_Tai_Lue.js
@@ -0,0 +1,79 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=New_Tai_Lue`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001980, 0x0019AB],
+ [0x0019B0, 0x0019C9],
+ [0x0019D0, 0x0019DA],
+ [0x0019DE, 0x0019DF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=New_Tai_Lue}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=New_Tai_Lue}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Talu}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Talu}"
+);
+testPropertyEscapes(
+ /^\p{scx=New_Tai_Lue}+$/u,
+ matchSymbols,
+ "\\p{scx=New_Tai_Lue}"
+);
+testPropertyEscapes(
+ /^\p{scx=Talu}+$/u,
+ matchSymbols,
+ "\\p{scx=Talu}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00197F],
+ [0x0019AC, 0x0019AF],
+ [0x0019CA, 0x0019CF],
+ [0x0019DB, 0x0019DD],
+ [0x0019E0, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=New_Tai_Lue}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=New_Tai_Lue}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Talu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Talu}"
+);
+testPropertyEscapes(
+ /^\P{scx=New_Tai_Lue}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=New_Tai_Lue}"
+);
+testPropertyEscapes(
+ /^\P{scx=Talu}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Talu}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Newa.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Newa.js
new file mode 100644
index 0000000000..089add5c10
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Newa.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Newa`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011400, 0x01145B],
+ [0x01145D, 0x011461]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Newa}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Newa}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Newa}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Newa}"
+);
+testPropertyEscapes(
+ /^\p{scx=Newa}+$/u,
+ matchSymbols,
+ "\\p{scx=Newa}"
+);
+testPropertyEscapes(
+ /^\p{scx=Newa}+$/u,
+ matchSymbols,
+ "\\p{scx=Newa}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x01145C
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0113FF],
+ [0x011462, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Newa}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Newa}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Newa}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Newa}"
+);
+testPropertyEscapes(
+ /^\P{scx=Newa}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Newa}"
+);
+testPropertyEscapes(
+ /^\P{scx=Newa}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Newa}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nko.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nko.js
new file mode 100644
index 0000000000..bc8290aa0f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nko.js
@@ -0,0 +1,84 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Nko`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00060C,
+ 0x00061B,
+ 0x00061F
+ ],
+ ranges: [
+ [0x0007C0, 0x0007FA],
+ [0x0007FD, 0x0007FF],
+ [0x00FD3E, 0x00FD3F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Nko}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Nko}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Nkoo}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Nkoo}"
+);
+testPropertyEscapes(
+ /^\p{scx=Nko}+$/u,
+ matchSymbols,
+ "\\p{scx=Nko}"
+);
+testPropertyEscapes(
+ /^\p{scx=Nkoo}+$/u,
+ matchSymbols,
+ "\\p{scx=Nkoo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00060B],
+ [0x00060D, 0x00061A],
+ [0x00061C, 0x00061E],
+ [0x000620, 0x0007BF],
+ [0x0007FB, 0x0007FC],
+ [0x000800, 0x00DBFF],
+ [0x00E000, 0x00FD3D],
+ [0x00FD40, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Nko}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Nko}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Nkoo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Nkoo}"
+);
+testPropertyEscapes(
+ /^\P{scx=Nko}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Nko}"
+);
+testPropertyEscapes(
+ /^\P{scx=Nkoo}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Nkoo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nushu.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nushu.js
new file mode 100644
index 0000000000..f637aee394
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nushu.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Nushu`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x016FE1
+ ],
+ ranges: [
+ [0x01B170, 0x01B2FB]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Nushu}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Nushu}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Nshu}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Nshu}"
+);
+testPropertyEscapes(
+ /^\p{scx=Nushu}+$/u,
+ matchSymbols,
+ "\\p{scx=Nushu}"
+);
+testPropertyEscapes(
+ /^\p{scx=Nshu}+$/u,
+ matchSymbols,
+ "\\p{scx=Nshu}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016FE0],
+ [0x016FE2, 0x01B16F],
+ [0x01B2FC, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Nushu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Nushu}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Nshu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Nshu}"
+);
+testPropertyEscapes(
+ /^\P{scx=Nushu}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Nushu}"
+);
+testPropertyEscapes(
+ /^\P{scx=Nshu}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Nshu}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nyiakeng_Puachue_Hmong.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nyiakeng_Puachue_Hmong.js
new file mode 100644
index 0000000000..636cfc232f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nyiakeng_Puachue_Hmong.js
@@ -0,0 +1,79 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Nyiakeng_Puachue_Hmong`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x01E100, 0x01E12C],
+ [0x01E130, 0x01E13D],
+ [0x01E140, 0x01E149],
+ [0x01E14E, 0x01E14F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Nyiakeng_Puachue_Hmong}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Nyiakeng_Puachue_Hmong}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Hmnp}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Hmnp}"
+);
+testPropertyEscapes(
+ /^\p{scx=Nyiakeng_Puachue_Hmong}+$/u,
+ matchSymbols,
+ "\\p{scx=Nyiakeng_Puachue_Hmong}"
+);
+testPropertyEscapes(
+ /^\p{scx=Hmnp}+$/u,
+ matchSymbols,
+ "\\p{scx=Hmnp}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01E0FF],
+ [0x01E12D, 0x01E12F],
+ [0x01E13E, 0x01E13F],
+ [0x01E14A, 0x01E14D],
+ [0x01E150, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Nyiakeng_Puachue_Hmong}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Nyiakeng_Puachue_Hmong}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Hmnp}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Hmnp}"
+);
+testPropertyEscapes(
+ /^\P{scx=Nyiakeng_Puachue_Hmong}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Nyiakeng_Puachue_Hmong}"
+);
+testPropertyEscapes(
+ /^\P{scx=Hmnp}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Hmnp}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ogham.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ogham.js
new file mode 100644
index 0000000000..8387ae9afa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ogham.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Ogham`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001680, 0x00169C]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Ogham}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Ogham}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Ogam}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Ogam}"
+);
+testPropertyEscapes(
+ /^\p{scx=Ogham}+$/u,
+ matchSymbols,
+ "\\p{scx=Ogham}"
+);
+testPropertyEscapes(
+ /^\p{scx=Ogam}+$/u,
+ matchSymbols,
+ "\\p{scx=Ogam}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00167F],
+ [0x00169D, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Ogham}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Ogham}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Ogam}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Ogam}"
+);
+testPropertyEscapes(
+ /^\P{scx=Ogham}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Ogham}"
+);
+testPropertyEscapes(
+ /^\P{scx=Ogam}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Ogam}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ol_Chiki.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ol_Chiki.js
new file mode 100644
index 0000000000..4d65726487
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ol_Chiki.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Ol_Chiki`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001C50, 0x001C7F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Ol_Chiki}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Ol_Chiki}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Olck}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Olck}"
+);
+testPropertyEscapes(
+ /^\p{scx=Ol_Chiki}+$/u,
+ matchSymbols,
+ "\\p{scx=Ol_Chiki}"
+);
+testPropertyEscapes(
+ /^\p{scx=Olck}+$/u,
+ matchSymbols,
+ "\\p{scx=Olck}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x001C4F],
+ [0x001C80, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Ol_Chiki}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Ol_Chiki}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Olck}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Olck}"
+);
+testPropertyEscapes(
+ /^\P{scx=Ol_Chiki}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Ol_Chiki}"
+);
+testPropertyEscapes(
+ /^\P{scx=Olck}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Olck}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Hungarian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Hungarian.js
new file mode 100644
index 0000000000..973eaa2a45
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Hungarian.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Old_Hungarian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010C80, 0x010CB2],
+ [0x010CC0, 0x010CF2],
+ [0x010CFA, 0x010CFF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Old_Hungarian}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Old_Hungarian}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Hung}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Hung}"
+);
+testPropertyEscapes(
+ /^\p{scx=Old_Hungarian}+$/u,
+ matchSymbols,
+ "\\p{scx=Old_Hungarian}"
+);
+testPropertyEscapes(
+ /^\p{scx=Hung}+$/u,
+ matchSymbols,
+ "\\p{scx=Hung}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010C7F],
+ [0x010CB3, 0x010CBF],
+ [0x010CF3, 0x010CF9],
+ [0x010D00, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Old_Hungarian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Old_Hungarian}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Hung}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Hung}"
+);
+testPropertyEscapes(
+ /^\P{scx=Old_Hungarian}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Old_Hungarian}"
+);
+testPropertyEscapes(
+ /^\P{scx=Hung}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Hung}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Italic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Italic.js
new file mode 100644
index 0000000000..46cc2f3db5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Italic.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Old_Italic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010300, 0x010323],
+ [0x01032D, 0x01032F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Old_Italic}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Old_Italic}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Ital}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Ital}"
+);
+testPropertyEscapes(
+ /^\p{scx=Old_Italic}+$/u,
+ matchSymbols,
+ "\\p{scx=Old_Italic}"
+);
+testPropertyEscapes(
+ /^\p{scx=Ital}+$/u,
+ matchSymbols,
+ "\\p{scx=Ital}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0102FF],
+ [0x010324, 0x01032C],
+ [0x010330, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Old_Italic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Old_Italic}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Ital}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Ital}"
+);
+testPropertyEscapes(
+ /^\P{scx=Old_Italic}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Old_Italic}"
+);
+testPropertyEscapes(
+ /^\P{scx=Ital}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Ital}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_North_Arabian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_North_Arabian.js
new file mode 100644
index 0000000000..ab09b98ee3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_North_Arabian.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Old_North_Arabian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010A80, 0x010A9F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Old_North_Arabian}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Old_North_Arabian}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Narb}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Narb}"
+);
+testPropertyEscapes(
+ /^\p{scx=Old_North_Arabian}+$/u,
+ matchSymbols,
+ "\\p{scx=Old_North_Arabian}"
+);
+testPropertyEscapes(
+ /^\p{scx=Narb}+$/u,
+ matchSymbols,
+ "\\p{scx=Narb}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010A7F],
+ [0x010AA0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Old_North_Arabian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Old_North_Arabian}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Narb}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Narb}"
+);
+testPropertyEscapes(
+ /^\P{scx=Old_North_Arabian}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Old_North_Arabian}"
+);
+testPropertyEscapes(
+ /^\P{scx=Narb}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Narb}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Permic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Permic.js
new file mode 100644
index 0000000000..265bf67d89
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Permic.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Old_Permic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000483
+ ],
+ ranges: [
+ [0x010350, 0x01037A]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Old_Permic}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Old_Permic}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Perm}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Perm}"
+);
+testPropertyEscapes(
+ /^\p{scx=Old_Permic}+$/u,
+ matchSymbols,
+ "\\p{scx=Old_Permic}"
+);
+testPropertyEscapes(
+ /^\p{scx=Perm}+$/u,
+ matchSymbols,
+ "\\p{scx=Perm}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000482],
+ [0x000484, 0x00DBFF],
+ [0x00E000, 0x01034F],
+ [0x01037B, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Old_Permic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Old_Permic}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Perm}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Perm}"
+);
+testPropertyEscapes(
+ /^\P{scx=Old_Permic}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Old_Permic}"
+);
+testPropertyEscapes(
+ /^\P{scx=Perm}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Perm}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Persian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Persian.js
new file mode 100644
index 0000000000..b1c5b29844
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Persian.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Old_Persian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0103A0, 0x0103C3],
+ [0x0103C8, 0x0103D5]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Old_Persian}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Old_Persian}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Xpeo}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Xpeo}"
+);
+testPropertyEscapes(
+ /^\p{scx=Old_Persian}+$/u,
+ matchSymbols,
+ "\\p{scx=Old_Persian}"
+);
+testPropertyEscapes(
+ /^\p{scx=Xpeo}+$/u,
+ matchSymbols,
+ "\\p{scx=Xpeo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01039F],
+ [0x0103C4, 0x0103C7],
+ [0x0103D6, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Old_Persian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Old_Persian}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Xpeo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Xpeo}"
+);
+testPropertyEscapes(
+ /^\P{scx=Old_Persian}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Old_Persian}"
+);
+testPropertyEscapes(
+ /^\P{scx=Xpeo}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Xpeo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Sogdian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Sogdian.js
new file mode 100644
index 0000000000..bb0e881d2a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Sogdian.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Old_Sogdian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010F00, 0x010F27]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Old_Sogdian}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Old_Sogdian}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Sogo}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Sogo}"
+);
+testPropertyEscapes(
+ /^\p{scx=Old_Sogdian}+$/u,
+ matchSymbols,
+ "\\p{scx=Old_Sogdian}"
+);
+testPropertyEscapes(
+ /^\p{scx=Sogo}+$/u,
+ matchSymbols,
+ "\\p{scx=Sogo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010EFF],
+ [0x010F28, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Old_Sogdian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Old_Sogdian}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Sogo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Sogo}"
+);
+testPropertyEscapes(
+ /^\P{scx=Old_Sogdian}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Old_Sogdian}"
+);
+testPropertyEscapes(
+ /^\P{scx=Sogo}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Sogo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_South_Arabian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_South_Arabian.js
new file mode 100644
index 0000000000..15be5ad14e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_South_Arabian.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Old_South_Arabian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010A60, 0x010A7F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Old_South_Arabian}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Old_South_Arabian}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Sarb}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Sarb}"
+);
+testPropertyEscapes(
+ /^\p{scx=Old_South_Arabian}+$/u,
+ matchSymbols,
+ "\\p{scx=Old_South_Arabian}"
+);
+testPropertyEscapes(
+ /^\p{scx=Sarb}+$/u,
+ matchSymbols,
+ "\\p{scx=Sarb}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010A5F],
+ [0x010A80, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Old_South_Arabian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Old_South_Arabian}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Sarb}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Sarb}"
+);
+testPropertyEscapes(
+ /^\P{scx=Old_South_Arabian}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Old_South_Arabian}"
+);
+testPropertyEscapes(
+ /^\P{scx=Sarb}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Sarb}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Turkic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Turkic.js
new file mode 100644
index 0000000000..3df042b56b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Turkic.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Old_Turkic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010C00, 0x010C48]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Old_Turkic}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Old_Turkic}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Orkh}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Orkh}"
+);
+testPropertyEscapes(
+ /^\p{scx=Old_Turkic}+$/u,
+ matchSymbols,
+ "\\p{scx=Old_Turkic}"
+);
+testPropertyEscapes(
+ /^\p{scx=Orkh}+$/u,
+ matchSymbols,
+ "\\p{scx=Orkh}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x010BFF],
+ [0x010C49, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Old_Turkic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Old_Turkic}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Orkh}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Orkh}"
+);
+testPropertyEscapes(
+ /^\P{scx=Old_Turkic}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Old_Turkic}"
+);
+testPropertyEscapes(
+ /^\P{scx=Orkh}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Orkh}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Uyghur.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Uyghur.js
new file mode 100644
index 0000000000..8ca702d8ad
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Uyghur.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Old_Uyghur`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000640,
+ 0x010AF2
+ ],
+ ranges: [
+ [0x010F70, 0x010F89]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Old_Uyghur}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Old_Uyghur}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Ougr}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Ougr}"
+);
+testPropertyEscapes(
+ /^\p{scx=Old_Uyghur}+$/u,
+ matchSymbols,
+ "\\p{scx=Old_Uyghur}"
+);
+testPropertyEscapes(
+ /^\p{scx=Ougr}+$/u,
+ matchSymbols,
+ "\\p{scx=Ougr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00063F],
+ [0x000641, 0x00DBFF],
+ [0x00E000, 0x010AF1],
+ [0x010AF3, 0x010F6F],
+ [0x010F8A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Old_Uyghur}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Old_Uyghur}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Ougr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Ougr}"
+);
+testPropertyEscapes(
+ /^\P{scx=Old_Uyghur}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Old_Uyghur}"
+);
+testPropertyEscapes(
+ /^\P{scx=Ougr}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Ougr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Oriya.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Oriya.js
new file mode 100644
index 0000000000..76bc87993b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Oriya.js
@@ -0,0 +1,109 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Oriya`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x001CDA,
+ 0x001CF2
+ ],
+ ranges: [
+ [0x000951, 0x000952],
+ [0x000964, 0x000965],
+ [0x000B01, 0x000B03],
+ [0x000B05, 0x000B0C],
+ [0x000B0F, 0x000B10],
+ [0x000B13, 0x000B28],
+ [0x000B2A, 0x000B30],
+ [0x000B32, 0x000B33],
+ [0x000B35, 0x000B39],
+ [0x000B3C, 0x000B44],
+ [0x000B47, 0x000B48],
+ [0x000B4B, 0x000B4D],
+ [0x000B55, 0x000B57],
+ [0x000B5C, 0x000B5D],
+ [0x000B5F, 0x000B63],
+ [0x000B66, 0x000B77]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Oriya}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Oriya}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Orya}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Orya}"
+);
+testPropertyEscapes(
+ /^\p{scx=Oriya}+$/u,
+ matchSymbols,
+ "\\p{scx=Oriya}"
+);
+testPropertyEscapes(
+ /^\p{scx=Orya}+$/u,
+ matchSymbols,
+ "\\p{scx=Orya}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000B04,
+ 0x000B29,
+ 0x000B31,
+ 0x000B34,
+ 0x000B5E
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000950],
+ [0x000953, 0x000963],
+ [0x000966, 0x000B00],
+ [0x000B0D, 0x000B0E],
+ [0x000B11, 0x000B12],
+ [0x000B3A, 0x000B3B],
+ [0x000B45, 0x000B46],
+ [0x000B49, 0x000B4A],
+ [0x000B4E, 0x000B54],
+ [0x000B58, 0x000B5B],
+ [0x000B64, 0x000B65],
+ [0x000B78, 0x001CD9],
+ [0x001CDB, 0x001CF1],
+ [0x001CF3, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Oriya}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Oriya}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Orya}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Orya}"
+);
+testPropertyEscapes(
+ /^\P{scx=Oriya}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Oriya}"
+);
+testPropertyEscapes(
+ /^\P{scx=Orya}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Orya}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Osage.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Osage.js
new file mode 100644
index 0000000000..d0538a6feb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Osage.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Osage`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0104B0, 0x0104D3],
+ [0x0104D8, 0x0104FB]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Osage}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Osage}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Osge}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Osge}"
+);
+testPropertyEscapes(
+ /^\p{scx=Osage}+$/u,
+ matchSymbols,
+ "\\p{scx=Osage}"
+);
+testPropertyEscapes(
+ /^\p{scx=Osge}+$/u,
+ matchSymbols,
+ "\\p{scx=Osge}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0104AF],
+ [0x0104D4, 0x0104D7],
+ [0x0104FC, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Osage}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Osage}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Osge}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Osge}"
+);
+testPropertyEscapes(
+ /^\P{scx=Osage}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Osage}"
+);
+testPropertyEscapes(
+ /^\P{scx=Osge}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Osge}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Osmanya.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Osmanya.js
new file mode 100644
index 0000000000..14dabea2f2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Osmanya.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Osmanya`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010480, 0x01049D],
+ [0x0104A0, 0x0104A9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Osmanya}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Osmanya}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Osma}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Osma}"
+);
+testPropertyEscapes(
+ /^\p{scx=Osmanya}+$/u,
+ matchSymbols,
+ "\\p{scx=Osmanya}"
+);
+testPropertyEscapes(
+ /^\p{scx=Osma}+$/u,
+ matchSymbols,
+ "\\p{scx=Osma}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01047F],
+ [0x01049E, 0x01049F],
+ [0x0104AA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Osmanya}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Osmanya}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Osma}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Osma}"
+);
+testPropertyEscapes(
+ /^\P{scx=Osmanya}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Osmanya}"
+);
+testPropertyEscapes(
+ /^\P{scx=Osma}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Osma}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Pahawh_Hmong.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Pahawh_Hmong.js
new file mode 100644
index 0000000000..e32728e727
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Pahawh_Hmong.js
@@ -0,0 +1,82 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Pahawh_Hmong`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x016B00, 0x016B45],
+ [0x016B50, 0x016B59],
+ [0x016B5B, 0x016B61],
+ [0x016B63, 0x016B77],
+ [0x016B7D, 0x016B8F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Pahawh_Hmong}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Pahawh_Hmong}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Hmng}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Hmng}"
+);
+testPropertyEscapes(
+ /^\p{scx=Pahawh_Hmong}+$/u,
+ matchSymbols,
+ "\\p{scx=Pahawh_Hmong}"
+);
+testPropertyEscapes(
+ /^\p{scx=Hmng}+$/u,
+ matchSymbols,
+ "\\p{scx=Hmng}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x016B5A,
+ 0x016B62
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016AFF],
+ [0x016B46, 0x016B4F],
+ [0x016B78, 0x016B7C],
+ [0x016B90, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Pahawh_Hmong}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Pahawh_Hmong}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Hmng}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Hmng}"
+);
+testPropertyEscapes(
+ /^\P{scx=Pahawh_Hmong}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Pahawh_Hmong}"
+);
+testPropertyEscapes(
+ /^\P{scx=Hmng}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Hmng}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Palmyrene.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Palmyrene.js
new file mode 100644
index 0000000000..433656117d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Palmyrene.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Palmyrene`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010860, 0x01087F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Palmyrene}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Palmyrene}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Palm}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Palm}"
+);
+testPropertyEscapes(
+ /^\p{scx=Palmyrene}+$/u,
+ matchSymbols,
+ "\\p{scx=Palmyrene}"
+);
+testPropertyEscapes(
+ /^\p{scx=Palm}+$/u,
+ matchSymbols,
+ "\\p{scx=Palm}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01085F],
+ [0x010880, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Palmyrene}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Palmyrene}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Palm}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Palm}"
+);
+testPropertyEscapes(
+ /^\P{scx=Palmyrene}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Palmyrene}"
+);
+testPropertyEscapes(
+ /^\P{scx=Palm}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Palm}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Pau_Cin_Hau.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Pau_Cin_Hau.js
new file mode 100644
index 0000000000..63b561b0e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Pau_Cin_Hau.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Pau_Cin_Hau`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011AC0, 0x011AF8]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Pau_Cin_Hau}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Pau_Cin_Hau}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Pauc}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Pauc}"
+);
+testPropertyEscapes(
+ /^\p{scx=Pau_Cin_Hau}+$/u,
+ matchSymbols,
+ "\\p{scx=Pau_Cin_Hau}"
+);
+testPropertyEscapes(
+ /^\p{scx=Pauc}+$/u,
+ matchSymbols,
+ "\\p{scx=Pauc}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x011ABF],
+ [0x011AF9, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Pau_Cin_Hau}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Pau_Cin_Hau}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Pauc}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Pauc}"
+);
+testPropertyEscapes(
+ /^\P{scx=Pau_Cin_Hau}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Pau_Cin_Hau}"
+);
+testPropertyEscapes(
+ /^\P{scx=Pauc}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Pauc}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Phags_Pa.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Phags_Pa.js
new file mode 100644
index 0000000000..4311fdd53f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Phags_Pa.js
@@ -0,0 +1,79 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Phags_Pa`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x001805
+ ],
+ ranges: [
+ [0x001802, 0x001803],
+ [0x00A840, 0x00A877]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Phags_Pa}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Phags_Pa}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Phag}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Phag}"
+);
+testPropertyEscapes(
+ /^\p{scx=Phags_Pa}+$/u,
+ matchSymbols,
+ "\\p{scx=Phags_Pa}"
+);
+testPropertyEscapes(
+ /^\p{scx=Phag}+$/u,
+ matchSymbols,
+ "\\p{scx=Phag}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x001804
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x001801],
+ [0x001806, 0x00A83F],
+ [0x00A878, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Phags_Pa}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Phags_Pa}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Phag}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Phag}"
+);
+testPropertyEscapes(
+ /^\P{scx=Phags_Pa}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Phags_Pa}"
+);
+testPropertyEscapes(
+ /^\P{scx=Phag}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Phag}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Phoenician.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Phoenician.js
new file mode 100644
index 0000000000..825c8686f0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Phoenician.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Phoenician`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x01091F
+ ],
+ ranges: [
+ [0x010900, 0x01091B]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Phoenician}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Phoenician}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Phnx}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Phnx}"
+);
+testPropertyEscapes(
+ /^\p{scx=Phoenician}+$/u,
+ matchSymbols,
+ "\\p{scx=Phoenician}"
+);
+testPropertyEscapes(
+ /^\p{scx=Phnx}+$/u,
+ matchSymbols,
+ "\\p{scx=Phnx}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0108FF],
+ [0x01091C, 0x01091E],
+ [0x010920, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Phoenician}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Phoenician}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Phnx}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Phnx}"
+);
+testPropertyEscapes(
+ /^\P{scx=Phoenician}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Phoenician}"
+);
+testPropertyEscapes(
+ /^\P{scx=Phnx}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Phnx}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Psalter_Pahlavi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Psalter_Pahlavi.js
new file mode 100644
index 0000000000..57150997e5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Psalter_Pahlavi.js
@@ -0,0 +1,80 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Psalter_Pahlavi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000640
+ ],
+ ranges: [
+ [0x010B80, 0x010B91],
+ [0x010B99, 0x010B9C],
+ [0x010BA9, 0x010BAF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Psalter_Pahlavi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Psalter_Pahlavi}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Phlp}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Phlp}"
+);
+testPropertyEscapes(
+ /^\p{scx=Psalter_Pahlavi}+$/u,
+ matchSymbols,
+ "\\p{scx=Psalter_Pahlavi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Phlp}+$/u,
+ matchSymbols,
+ "\\p{scx=Phlp}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00063F],
+ [0x000641, 0x00DBFF],
+ [0x00E000, 0x010B7F],
+ [0x010B92, 0x010B98],
+ [0x010B9D, 0x010BA8],
+ [0x010BB0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Psalter_Pahlavi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Psalter_Pahlavi}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Phlp}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Phlp}"
+);
+testPropertyEscapes(
+ /^\P{scx=Psalter_Pahlavi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Psalter_Pahlavi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Phlp}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Phlp}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Rejang.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Rejang.js
new file mode 100644
index 0000000000..a706dd2e1d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Rejang.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Rejang`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00A95F
+ ],
+ ranges: [
+ [0x00A930, 0x00A953]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Rejang}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Rejang}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Rjng}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Rjng}"
+);
+testPropertyEscapes(
+ /^\p{scx=Rejang}+$/u,
+ matchSymbols,
+ "\\p{scx=Rejang}"
+);
+testPropertyEscapes(
+ /^\p{scx=Rjng}+$/u,
+ matchSymbols,
+ "\\p{scx=Rjng}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A92F],
+ [0x00A954, 0x00A95E],
+ [0x00A960, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Rejang}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Rejang}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Rjng}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Rjng}"
+);
+testPropertyEscapes(
+ /^\P{scx=Rejang}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Rejang}"
+);
+testPropertyEscapes(
+ /^\P{scx=Rjng}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Rjng}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Runic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Runic.js
new file mode 100644
index 0000000000..281845cc30
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Runic.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Runic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0016A0, 0x0016EA],
+ [0x0016EE, 0x0016F8]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Runic}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Runic}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Runr}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Runr}"
+);
+testPropertyEscapes(
+ /^\p{scx=Runic}+$/u,
+ matchSymbols,
+ "\\p{scx=Runic}"
+);
+testPropertyEscapes(
+ /^\p{scx=Runr}+$/u,
+ matchSymbols,
+ "\\p{scx=Runr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00169F],
+ [0x0016EB, 0x0016ED],
+ [0x0016F9, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Runic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Runic}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Runr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Runr}"
+);
+testPropertyEscapes(
+ /^\P{scx=Runic}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Runic}"
+);
+testPropertyEscapes(
+ /^\P{scx=Runr}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Runr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Samaritan.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Samaritan.js
new file mode 100644
index 0000000000..bd2a2cc758
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Samaritan.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Samaritan`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000800, 0x00082D],
+ [0x000830, 0x00083E]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Samaritan}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Samaritan}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Samr}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Samr}"
+);
+testPropertyEscapes(
+ /^\p{scx=Samaritan}+$/u,
+ matchSymbols,
+ "\\p{scx=Samaritan}"
+);
+testPropertyEscapes(
+ /^\p{scx=Samr}+$/u,
+ matchSymbols,
+ "\\p{scx=Samr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0007FF],
+ [0x00082E, 0x00082F],
+ [0x00083F, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Samaritan}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Samaritan}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Samr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Samr}"
+);
+testPropertyEscapes(
+ /^\P{scx=Samaritan}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Samaritan}"
+);
+testPropertyEscapes(
+ /^\P{scx=Samr}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Samr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Saurashtra.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Saurashtra.js
new file mode 100644
index 0000000000..755e3523eb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Saurashtra.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Saurashtra`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00A880, 0x00A8C5],
+ [0x00A8CE, 0x00A8D9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Saurashtra}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Saurashtra}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Saur}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Saur}"
+);
+testPropertyEscapes(
+ /^\p{scx=Saurashtra}+$/u,
+ matchSymbols,
+ "\\p{scx=Saurashtra}"
+);
+testPropertyEscapes(
+ /^\p{scx=Saur}+$/u,
+ matchSymbols,
+ "\\p{scx=Saur}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A87F],
+ [0x00A8C6, 0x00A8CD],
+ [0x00A8DA, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Saurashtra}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Saurashtra}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Saur}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Saur}"
+);
+testPropertyEscapes(
+ /^\P{scx=Saurashtra}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Saurashtra}"
+);
+testPropertyEscapes(
+ /^\P{scx=Saur}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Saur}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sharada.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sharada.js
new file mode 100644
index 0000000000..76baad53c0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sharada.js
@@ -0,0 +1,85 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Sharada`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000951,
+ 0x001CD7,
+ 0x001CD9,
+ 0x001CE0
+ ],
+ ranges: [
+ [0x001CDC, 0x001CDD],
+ [0x011180, 0x0111DF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Sharada}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Sharada}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Shrd}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Shrd}"
+);
+testPropertyEscapes(
+ /^\p{scx=Sharada}+$/u,
+ matchSymbols,
+ "\\p{scx=Sharada}"
+);
+testPropertyEscapes(
+ /^\p{scx=Shrd}+$/u,
+ matchSymbols,
+ "\\p{scx=Shrd}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x001CD8
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000950],
+ [0x000952, 0x001CD6],
+ [0x001CDA, 0x001CDB],
+ [0x001CDE, 0x001CDF],
+ [0x001CE1, 0x00DBFF],
+ [0x00E000, 0x01117F],
+ [0x0111E0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Sharada}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Sharada}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Shrd}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Shrd}"
+);
+testPropertyEscapes(
+ /^\P{scx=Sharada}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Sharada}"
+);
+testPropertyEscapes(
+ /^\P{scx=Shrd}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Shrd}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Shavian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Shavian.js
new file mode 100644
index 0000000000..ccf0477d43
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Shavian.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Shavian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010450, 0x01047F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Shavian}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Shavian}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Shaw}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Shaw}"
+);
+testPropertyEscapes(
+ /^\p{scx=Shavian}+$/u,
+ matchSymbols,
+ "\\p{scx=Shavian}"
+);
+testPropertyEscapes(
+ /^\p{scx=Shaw}+$/u,
+ matchSymbols,
+ "\\p{scx=Shaw}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01044F],
+ [0x010480, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Shavian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Shavian}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Shaw}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Shaw}"
+);
+testPropertyEscapes(
+ /^\P{scx=Shavian}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Shavian}"
+);
+testPropertyEscapes(
+ /^\P{scx=Shaw}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Shaw}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Siddham.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Siddham.js
new file mode 100644
index 0000000000..f7cde205e4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Siddham.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Siddham`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011580, 0x0115B5],
+ [0x0115B8, 0x0115DD]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Siddham}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Siddham}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Sidd}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Sidd}"
+);
+testPropertyEscapes(
+ /^\p{scx=Siddham}+$/u,
+ matchSymbols,
+ "\\p{scx=Siddham}"
+);
+testPropertyEscapes(
+ /^\p{scx=Sidd}+$/u,
+ matchSymbols,
+ "\\p{scx=Sidd}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01157F],
+ [0x0115B6, 0x0115B7],
+ [0x0115DE, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Siddham}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Siddham}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Sidd}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Sidd}"
+);
+testPropertyEscapes(
+ /^\P{scx=Siddham}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Siddham}"
+);
+testPropertyEscapes(
+ /^\P{scx=Sidd}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Sidd}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_SignWriting.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_SignWriting.js
new file mode 100644
index 0000000000..3543353ff7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_SignWriting.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=SignWriting`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x01D800, 0x01DA8B],
+ [0x01DA9B, 0x01DA9F],
+ [0x01DAA1, 0x01DAAF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=SignWriting}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=SignWriting}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Sgnw}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Sgnw}"
+);
+testPropertyEscapes(
+ /^\p{scx=SignWriting}+$/u,
+ matchSymbols,
+ "\\p{scx=SignWriting}"
+);
+testPropertyEscapes(
+ /^\p{scx=Sgnw}+$/u,
+ matchSymbols,
+ "\\p{scx=Sgnw}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x01DAA0
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01D7FF],
+ [0x01DA8C, 0x01DA9A],
+ [0x01DAB0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=SignWriting}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=SignWriting}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Sgnw}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Sgnw}"
+);
+testPropertyEscapes(
+ /^\P{scx=SignWriting}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=SignWriting}"
+);
+testPropertyEscapes(
+ /^\P{scx=Sgnw}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Sgnw}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sinhala.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sinhala.js
new file mode 100644
index 0000000000..5a5d60e541
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sinhala.js
@@ -0,0 +1,101 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Sinhala`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000DBD,
+ 0x000DCA,
+ 0x000DD6
+ ],
+ ranges: [
+ [0x000964, 0x000965],
+ [0x000D81, 0x000D83],
+ [0x000D85, 0x000D96],
+ [0x000D9A, 0x000DB1],
+ [0x000DB3, 0x000DBB],
+ [0x000DC0, 0x000DC6],
+ [0x000DCF, 0x000DD4],
+ [0x000DD8, 0x000DDF],
+ [0x000DE6, 0x000DEF],
+ [0x000DF2, 0x000DF4],
+ [0x0111E1, 0x0111F4]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Sinhala}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Sinhala}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Sinh}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Sinh}"
+);
+testPropertyEscapes(
+ /^\p{scx=Sinhala}+$/u,
+ matchSymbols,
+ "\\p{scx=Sinhala}"
+);
+testPropertyEscapes(
+ /^\p{scx=Sinh}+$/u,
+ matchSymbols,
+ "\\p{scx=Sinh}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000D84,
+ 0x000DB2,
+ 0x000DBC,
+ 0x000DD5,
+ 0x000DD7
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000963],
+ [0x000966, 0x000D80],
+ [0x000D97, 0x000D99],
+ [0x000DBE, 0x000DBF],
+ [0x000DC7, 0x000DC9],
+ [0x000DCB, 0x000DCE],
+ [0x000DE0, 0x000DE5],
+ [0x000DF0, 0x000DF1],
+ [0x000DF5, 0x00DBFF],
+ [0x00E000, 0x0111E0],
+ [0x0111F5, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Sinhala}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Sinhala}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Sinh}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Sinh}"
+);
+testPropertyEscapes(
+ /^\P{scx=Sinhala}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Sinhala}"
+);
+testPropertyEscapes(
+ /^\P{scx=Sinh}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Sinh}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sogdian.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sogdian.js
new file mode 100644
index 0000000000..c7ec852669
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sogdian.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Sogdian`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000640
+ ],
+ ranges: [
+ [0x010F30, 0x010F59]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Sogdian}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Sogdian}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Sogd}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Sogd}"
+);
+testPropertyEscapes(
+ /^\p{scx=Sogdian}+$/u,
+ matchSymbols,
+ "\\p{scx=Sogdian}"
+);
+testPropertyEscapes(
+ /^\p{scx=Sogd}+$/u,
+ matchSymbols,
+ "\\p{scx=Sogd}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00063F],
+ [0x000641, 0x00DBFF],
+ [0x00E000, 0x010F2F],
+ [0x010F5A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Sogdian}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Sogdian}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Sogd}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Sogd}"
+);
+testPropertyEscapes(
+ /^\P{scx=Sogdian}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Sogdian}"
+);
+testPropertyEscapes(
+ /^\P{scx=Sogd}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Sogd}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sora_Sompeng.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sora_Sompeng.js
new file mode 100644
index 0000000000..fb28392238
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sora_Sompeng.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Sora_Sompeng`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x0110D0, 0x0110E8],
+ [0x0110F0, 0x0110F9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Sora_Sompeng}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Sora_Sompeng}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Sora}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Sora}"
+);
+testPropertyEscapes(
+ /^\p{scx=Sora_Sompeng}+$/u,
+ matchSymbols,
+ "\\p{scx=Sora_Sompeng}"
+);
+testPropertyEscapes(
+ /^\p{scx=Sora}+$/u,
+ matchSymbols,
+ "\\p{scx=Sora}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0110CF],
+ [0x0110E9, 0x0110EF],
+ [0x0110FA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Sora_Sompeng}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Sora_Sompeng}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Sora}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Sora}"
+);
+testPropertyEscapes(
+ /^\P{scx=Sora_Sompeng}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Sora_Sompeng}"
+);
+testPropertyEscapes(
+ /^\P{scx=Sora}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Sora}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Soyombo.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Soyombo.js
new file mode 100644
index 0000000000..74e3579ff0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Soyombo.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Soyombo`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011A50, 0x011AA2]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Soyombo}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Soyombo}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Soyo}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Soyo}"
+);
+testPropertyEscapes(
+ /^\p{scx=Soyombo}+$/u,
+ matchSymbols,
+ "\\p{scx=Soyombo}"
+);
+testPropertyEscapes(
+ /^\p{scx=Soyo}+$/u,
+ matchSymbols,
+ "\\p{scx=Soyo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x011A4F],
+ [0x011AA3, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Soyombo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Soyombo}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Soyo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Soyo}"
+);
+testPropertyEscapes(
+ /^\P{scx=Soyombo}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Soyombo}"
+);
+testPropertyEscapes(
+ /^\P{scx=Soyo}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Soyo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sundanese.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sundanese.js
new file mode 100644
index 0000000000..47fa90159a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sundanese.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Sundanese`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001B80, 0x001BBF],
+ [0x001CC0, 0x001CC7]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Sundanese}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Sundanese}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Sund}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Sund}"
+);
+testPropertyEscapes(
+ /^\p{scx=Sundanese}+$/u,
+ matchSymbols,
+ "\\p{scx=Sundanese}"
+);
+testPropertyEscapes(
+ /^\p{scx=Sund}+$/u,
+ matchSymbols,
+ "\\p{scx=Sund}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x001B7F],
+ [0x001BC0, 0x001CBF],
+ [0x001CC8, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Sundanese}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Sundanese}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Sund}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Sund}"
+);
+testPropertyEscapes(
+ /^\P{scx=Sundanese}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Sundanese}"
+);
+testPropertyEscapes(
+ /^\P{scx=Sund}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Sund}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Syloti_Nagri.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Syloti_Nagri.js
new file mode 100644
index 0000000000..4875b64499
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Syloti_Nagri.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Syloti_Nagri`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000964, 0x000965],
+ [0x0009E6, 0x0009EF],
+ [0x00A800, 0x00A82C]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Syloti_Nagri}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Syloti_Nagri}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Sylo}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Sylo}"
+);
+testPropertyEscapes(
+ /^\p{scx=Syloti_Nagri}+$/u,
+ matchSymbols,
+ "\\p{scx=Syloti_Nagri}"
+);
+testPropertyEscapes(
+ /^\p{scx=Sylo}+$/u,
+ matchSymbols,
+ "\\p{scx=Sylo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000963],
+ [0x000966, 0x0009E5],
+ [0x0009F0, 0x00A7FF],
+ [0x00A82D, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Syloti_Nagri}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Syloti_Nagri}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Sylo}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Sylo}"
+);
+testPropertyEscapes(
+ /^\P{scx=Syloti_Nagri}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Syloti_Nagri}"
+);
+testPropertyEscapes(
+ /^\P{scx=Sylo}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Sylo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Syriac.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Syriac.js
new file mode 100644
index 0000000000..ba7cbaf24f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Syriac.js
@@ -0,0 +1,97 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Syriac`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00060C,
+ 0x00061F,
+ 0x000640,
+ 0x000670,
+ 0x001DF8,
+ 0x001DFA
+ ],
+ ranges: [
+ [0x00061B, 0x00061C],
+ [0x00064B, 0x000655],
+ [0x000700, 0x00070D],
+ [0x00070F, 0x00074A],
+ [0x00074D, 0x00074F],
+ [0x000860, 0x00086A]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Syriac}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Syriac}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Syrc}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Syrc}"
+);
+testPropertyEscapes(
+ /^\p{scx=Syriac}+$/u,
+ matchSymbols,
+ "\\p{scx=Syriac}"
+);
+testPropertyEscapes(
+ /^\p{scx=Syrc}+$/u,
+ matchSymbols,
+ "\\p{scx=Syrc}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00070E,
+ 0x001DF9
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00060B],
+ [0x00060D, 0x00061A],
+ [0x00061D, 0x00061E],
+ [0x000620, 0x00063F],
+ [0x000641, 0x00064A],
+ [0x000656, 0x00066F],
+ [0x000671, 0x0006FF],
+ [0x00074B, 0x00074C],
+ [0x000750, 0x00085F],
+ [0x00086B, 0x001DF7],
+ [0x001DFB, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Syriac}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Syriac}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Syrc}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Syrc}"
+);
+testPropertyEscapes(
+ /^\P{scx=Syriac}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Syriac}"
+);
+testPropertyEscapes(
+ /^\P{scx=Syrc}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Syrc}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tagalog.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tagalog.js
new file mode 100644
index 0000000000..c75881fd0e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tagalog.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Tagalog`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00171F
+ ],
+ ranges: [
+ [0x001700, 0x001715],
+ [0x001735, 0x001736]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tagalog}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tagalog}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tglg}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tglg}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tagalog}+$/u,
+ matchSymbols,
+ "\\p{scx=Tagalog}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tglg}+$/u,
+ matchSymbols,
+ "\\p{scx=Tglg}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0016FF],
+ [0x001716, 0x00171E],
+ [0x001720, 0x001734],
+ [0x001737, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tagalog}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tagalog}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tglg}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tglg}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tagalog}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tagalog}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tglg}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tglg}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tagbanwa.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tagbanwa.js
new file mode 100644
index 0000000000..391be08d40
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tagbanwa.js
@@ -0,0 +1,80 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Tagbanwa`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001735, 0x001736],
+ [0x001760, 0x00176C],
+ [0x00176E, 0x001770],
+ [0x001772, 0x001773]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tagbanwa}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tagbanwa}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tagb}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tagb}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tagbanwa}+$/u,
+ matchSymbols,
+ "\\p{scx=Tagbanwa}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tagb}+$/u,
+ matchSymbols,
+ "\\p{scx=Tagb}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00176D,
+ 0x001771
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x001734],
+ [0x001737, 0x00175F],
+ [0x001774, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tagbanwa}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tagbanwa}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tagb}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tagb}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tagbanwa}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tagbanwa}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tagb}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tagb}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Le.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Le.js
new file mode 100644
index 0000000000..883f01fc03
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Le.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Tai_Le`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001040, 0x001049],
+ [0x001950, 0x00196D],
+ [0x001970, 0x001974]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tai_Le}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tai_Le}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tale}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tale}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tai_Le}+$/u,
+ matchSymbols,
+ "\\p{scx=Tai_Le}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tale}+$/u,
+ matchSymbols,
+ "\\p{scx=Tale}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00103F],
+ [0x00104A, 0x00194F],
+ [0x00196E, 0x00196F],
+ [0x001975, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tai_Le}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tai_Le}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tale}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tale}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tai_Le}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tai_Le}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tale}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tale}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Tham.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Tham.js
new file mode 100644
index 0000000000..ca1610bfb6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Tham.js
@@ -0,0 +1,82 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Tai_Tham`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x001A20, 0x001A5E],
+ [0x001A60, 0x001A7C],
+ [0x001A7F, 0x001A89],
+ [0x001A90, 0x001A99],
+ [0x001AA0, 0x001AAD]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tai_Tham}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tai_Tham}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Lana}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Lana}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tai_Tham}+$/u,
+ matchSymbols,
+ "\\p{scx=Tai_Tham}"
+);
+testPropertyEscapes(
+ /^\p{scx=Lana}+$/u,
+ matchSymbols,
+ "\\p{scx=Lana}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x001A5F
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x001A1F],
+ [0x001A7D, 0x001A7E],
+ [0x001A8A, 0x001A8F],
+ [0x001A9A, 0x001A9F],
+ [0x001AAE, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tai_Tham}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tai_Tham}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Lana}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Lana}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tai_Tham}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tai_Tham}"
+);
+testPropertyEscapes(
+ /^\P{scx=Lana}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Lana}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Viet.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Viet.js
new file mode 100644
index 0000000000..44d33d8a3d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Viet.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Tai_Viet`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00AA80, 0x00AAC2],
+ [0x00AADB, 0x00AADF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tai_Viet}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tai_Viet}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tavt}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tavt}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tai_Viet}+$/u,
+ matchSymbols,
+ "\\p{scx=Tai_Viet}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tavt}+$/u,
+ matchSymbols,
+ "\\p{scx=Tavt}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00AA7F],
+ [0x00AAC3, 0x00AADA],
+ [0x00AAE0, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tai_Viet}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tai_Viet}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tavt}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tavt}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tai_Viet}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tai_Viet}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tavt}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tavt}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Takri.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Takri.js
new file mode 100644
index 0000000000..432185ad96
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Takri.js
@@ -0,0 +1,79 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Takri`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000964, 0x000965],
+ [0x00A830, 0x00A839],
+ [0x011680, 0x0116B9],
+ [0x0116C0, 0x0116C9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Takri}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Takri}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Takr}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Takr}"
+);
+testPropertyEscapes(
+ /^\p{scx=Takri}+$/u,
+ matchSymbols,
+ "\\p{scx=Takri}"
+);
+testPropertyEscapes(
+ /^\p{scx=Takr}+$/u,
+ matchSymbols,
+ "\\p{scx=Takr}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000963],
+ [0x000966, 0x00A82F],
+ [0x00A83A, 0x00DBFF],
+ [0x00E000, 0x01167F],
+ [0x0116BA, 0x0116BF],
+ [0x0116CA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Takri}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Takri}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Takr}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Takr}"
+);
+testPropertyEscapes(
+ /^\P{scx=Takri}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Takri}"
+);
+testPropertyEscapes(
+ /^\P{scx=Takr}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Takr}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tamil.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tamil.js
new file mode 100644
index 0000000000..597e517ce5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tamil.js
@@ -0,0 +1,123 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Tamil`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000B9C,
+ 0x000BD0,
+ 0x000BD7,
+ 0x001CDA,
+ 0x00A8F3,
+ 0x011301,
+ 0x011303,
+ 0x011FFF
+ ],
+ ranges: [
+ [0x000951, 0x000952],
+ [0x000964, 0x000965],
+ [0x000B82, 0x000B83],
+ [0x000B85, 0x000B8A],
+ [0x000B8E, 0x000B90],
+ [0x000B92, 0x000B95],
+ [0x000B99, 0x000B9A],
+ [0x000B9E, 0x000B9F],
+ [0x000BA3, 0x000BA4],
+ [0x000BA8, 0x000BAA],
+ [0x000BAE, 0x000BB9],
+ [0x000BBE, 0x000BC2],
+ [0x000BC6, 0x000BC8],
+ [0x000BCA, 0x000BCD],
+ [0x000BE6, 0x000BFA],
+ [0x01133B, 0x01133C],
+ [0x011FC0, 0x011FF1]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tamil}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tamil}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Taml}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Taml}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tamil}+$/u,
+ matchSymbols,
+ "\\p{scx=Tamil}"
+);
+testPropertyEscapes(
+ /^\p{scx=Taml}+$/u,
+ matchSymbols,
+ "\\p{scx=Taml}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000B84,
+ 0x000B91,
+ 0x000B9B,
+ 0x000B9D,
+ 0x000BC9,
+ 0x011302
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000950],
+ [0x000953, 0x000963],
+ [0x000966, 0x000B81],
+ [0x000B8B, 0x000B8D],
+ [0x000B96, 0x000B98],
+ [0x000BA0, 0x000BA2],
+ [0x000BA5, 0x000BA7],
+ [0x000BAB, 0x000BAD],
+ [0x000BBA, 0x000BBD],
+ [0x000BC3, 0x000BC5],
+ [0x000BCE, 0x000BCF],
+ [0x000BD1, 0x000BD6],
+ [0x000BD8, 0x000BE5],
+ [0x000BFB, 0x001CD9],
+ [0x001CDB, 0x00A8F2],
+ [0x00A8F4, 0x00DBFF],
+ [0x00E000, 0x011300],
+ [0x011304, 0x01133A],
+ [0x01133D, 0x011FBF],
+ [0x011FF2, 0x011FFE],
+ [0x012000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tamil}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tamil}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Taml}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Taml}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tamil}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tamil}"
+);
+testPropertyEscapes(
+ /^\P{scx=Taml}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Taml}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tangsa.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tangsa.js
new file mode 100644
index 0000000000..9c7bd2d04a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tangsa.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Tangsa`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x016A70, 0x016ABE],
+ [0x016AC0, 0x016AC9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tangsa}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tangsa}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tnsa}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tnsa}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tangsa}+$/u,
+ matchSymbols,
+ "\\p{scx=Tangsa}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tnsa}+$/u,
+ matchSymbols,
+ "\\p{scx=Tnsa}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x016ABF
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016A6F],
+ [0x016ACA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tangsa}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tangsa}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tnsa}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tnsa}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tangsa}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tangsa}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tnsa}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tnsa}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tangut.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tangut.js
new file mode 100644
index 0000000000..d88dcf6cc1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tangut.js
@@ -0,0 +1,80 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Tangut`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x016FE0
+ ],
+ ranges: [
+ [0x017000, 0x0187F7],
+ [0x018800, 0x018AFF],
+ [0x018D00, 0x018D08]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tangut}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tangut}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tang}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tang}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tangut}+$/u,
+ matchSymbols,
+ "\\p{scx=Tangut}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tang}+$/u,
+ matchSymbols,
+ "\\p{scx=Tang}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x016FDF],
+ [0x016FE1, 0x016FFF],
+ [0x0187F8, 0x0187FF],
+ [0x018B00, 0x018CFF],
+ [0x018D09, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tangut}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tangut}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tang}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tang}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tangut}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tangut}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tang}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tang}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Telugu.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Telugu.js
new file mode 100644
index 0000000000..21a3857734
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Telugu.js
@@ -0,0 +1,107 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Telugu`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000C5D,
+ 0x001CDA,
+ 0x001CF2
+ ],
+ ranges: [
+ [0x000951, 0x000952],
+ [0x000964, 0x000965],
+ [0x000C00, 0x000C0C],
+ [0x000C0E, 0x000C10],
+ [0x000C12, 0x000C28],
+ [0x000C2A, 0x000C39],
+ [0x000C3C, 0x000C44],
+ [0x000C46, 0x000C48],
+ [0x000C4A, 0x000C4D],
+ [0x000C55, 0x000C56],
+ [0x000C58, 0x000C5A],
+ [0x000C60, 0x000C63],
+ [0x000C66, 0x000C6F],
+ [0x000C77, 0x000C7F]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Telugu}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Telugu}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Telu}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Telu}"
+);
+testPropertyEscapes(
+ /^\p{scx=Telugu}+$/u,
+ matchSymbols,
+ "\\p{scx=Telugu}"
+);
+testPropertyEscapes(
+ /^\p{scx=Telu}+$/u,
+ matchSymbols,
+ "\\p{scx=Telu}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000C0D,
+ 0x000C11,
+ 0x000C29,
+ 0x000C45,
+ 0x000C49,
+ 0x000C57
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000950],
+ [0x000953, 0x000963],
+ [0x000966, 0x000BFF],
+ [0x000C3A, 0x000C3B],
+ [0x000C4E, 0x000C54],
+ [0x000C5B, 0x000C5C],
+ [0x000C5E, 0x000C5F],
+ [0x000C64, 0x000C65],
+ [0x000C70, 0x000C76],
+ [0x000C80, 0x001CD9],
+ [0x001CDB, 0x001CF1],
+ [0x001CF3, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Telugu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Telugu}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Telu}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Telu}"
+);
+testPropertyEscapes(
+ /^\P{scx=Telugu}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Telugu}"
+);
+testPropertyEscapes(
+ /^\P{scx=Telu}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Telu}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Thaana.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Thaana.js
new file mode 100644
index 0000000000..69cebd5401
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Thaana.js
@@ -0,0 +1,86 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Thaana`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00060C,
+ 0x00061F,
+ 0x00FDF2,
+ 0x00FDFD
+ ],
+ ranges: [
+ [0x00061B, 0x00061C],
+ [0x000660, 0x000669],
+ [0x000780, 0x0007B1]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Thaana}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Thaana}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Thaa}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Thaa}"
+);
+testPropertyEscapes(
+ /^\p{scx=Thaana}+$/u,
+ matchSymbols,
+ "\\p{scx=Thaana}"
+);
+testPropertyEscapes(
+ /^\p{scx=Thaa}+$/u,
+ matchSymbols,
+ "\\p{scx=Thaa}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00060B],
+ [0x00060D, 0x00061A],
+ [0x00061D, 0x00061E],
+ [0x000620, 0x00065F],
+ [0x00066A, 0x00077F],
+ [0x0007B2, 0x00DBFF],
+ [0x00E000, 0x00FDF1],
+ [0x00FDF3, 0x00FDFC],
+ [0x00FDFE, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Thaana}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Thaana}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Thaa}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Thaa}"
+);
+testPropertyEscapes(
+ /^\P{scx=Thaana}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Thaana}"
+);
+testPropertyEscapes(
+ /^\P{scx=Thaa}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Thaa}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Thai.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Thai.js
new file mode 100644
index 0000000000..1760749db0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Thai.js
@@ -0,0 +1,75 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Thai`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000E01, 0x000E3A],
+ [0x000E40, 0x000E5B]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Thai}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Thai}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Thai}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Thai}"
+);
+testPropertyEscapes(
+ /^\p{scx=Thai}+$/u,
+ matchSymbols,
+ "\\p{scx=Thai}"
+);
+testPropertyEscapes(
+ /^\p{scx=Thai}+$/u,
+ matchSymbols,
+ "\\p{scx=Thai}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000E00],
+ [0x000E3B, 0x000E3F],
+ [0x000E5C, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Thai}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Thai}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Thai}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Thai}"
+);
+testPropertyEscapes(
+ /^\P{scx=Thai}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Thai}"
+);
+testPropertyEscapes(
+ /^\P{scx=Thai}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Thai}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tibetan.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tibetan.js
new file mode 100644
index 0000000000..b35d41ae2a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tibetan.js
@@ -0,0 +1,86 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Tibetan`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x000F00, 0x000F47],
+ [0x000F49, 0x000F6C],
+ [0x000F71, 0x000F97],
+ [0x000F99, 0x000FBC],
+ [0x000FBE, 0x000FCC],
+ [0x000FCE, 0x000FD4],
+ [0x000FD9, 0x000FDA]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tibetan}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tibetan}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tibt}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tibt}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tibetan}+$/u,
+ matchSymbols,
+ "\\p{scx=Tibetan}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tibt}+$/u,
+ matchSymbols,
+ "\\p{scx=Tibt}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000F48,
+ 0x000F98,
+ 0x000FBD,
+ 0x000FCD
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000EFF],
+ [0x000F6D, 0x000F70],
+ [0x000FD5, 0x000FD8],
+ [0x000FDB, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tibetan}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tibetan}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tibt}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tibt}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tibetan}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tibetan}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tibt}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tibt}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tifinagh.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tifinagh.js
new file mode 100644
index 0000000000..3b809af841
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tifinagh.js
@@ -0,0 +1,78 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Tifinagh`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x002D7F
+ ],
+ ranges: [
+ [0x002D30, 0x002D67],
+ [0x002D6F, 0x002D70]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tifinagh}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tifinagh}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tfng}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tfng}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tifinagh}+$/u,
+ matchSymbols,
+ "\\p{scx=Tifinagh}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tfng}+$/u,
+ matchSymbols,
+ "\\p{scx=Tfng}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x002D2F],
+ [0x002D68, 0x002D6E],
+ [0x002D71, 0x002D7E],
+ [0x002D80, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tifinagh}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tifinagh}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tfng}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tfng}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tifinagh}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tifinagh}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tfng}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tfng}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tirhuta.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tirhuta.js
new file mode 100644
index 0000000000..9e565bbc17
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tirhuta.js
@@ -0,0 +1,84 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Tirhuta`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x001CF2
+ ],
+ ranges: [
+ [0x000951, 0x000952],
+ [0x000964, 0x000965],
+ [0x00A830, 0x00A839],
+ [0x011480, 0x0114C7],
+ [0x0114D0, 0x0114D9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tirhuta}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tirhuta}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Tirh}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Tirh}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tirhuta}+$/u,
+ matchSymbols,
+ "\\p{scx=Tirhuta}"
+);
+testPropertyEscapes(
+ /^\p{scx=Tirh}+$/u,
+ matchSymbols,
+ "\\p{scx=Tirh}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000950],
+ [0x000953, 0x000963],
+ [0x000966, 0x001CF1],
+ [0x001CF3, 0x00A82F],
+ [0x00A83A, 0x00DBFF],
+ [0x00E000, 0x01147F],
+ [0x0114C8, 0x0114CF],
+ [0x0114DA, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tirhuta}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tirhuta}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Tirh}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Tirh}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tirhuta}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tirhuta}"
+);
+testPropertyEscapes(
+ /^\P{scx=Tirh}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Tirh}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Toto.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Toto.js
new file mode 100644
index 0000000000..58c94ee1af
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Toto.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Toto`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x01E290, 0x01E2AE]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Toto}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Toto}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Toto}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Toto}"
+);
+testPropertyEscapes(
+ /^\p{scx=Toto}+$/u,
+ matchSymbols,
+ "\\p{scx=Toto}"
+);
+testPropertyEscapes(
+ /^\p{scx=Toto}+$/u,
+ matchSymbols,
+ "\\p{scx=Toto}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01E28F],
+ [0x01E2AF, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Toto}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Toto}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Toto}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Toto}"
+);
+testPropertyEscapes(
+ /^\P{scx=Toto}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Toto}"
+);
+testPropertyEscapes(
+ /^\P{scx=Toto}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Toto}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ugaritic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ugaritic.js
new file mode 100644
index 0000000000..7bf388d4bd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ugaritic.js
@@ -0,0 +1,77 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Ugaritic`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x01039F
+ ],
+ ranges: [
+ [0x010380, 0x01039D]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Ugaritic}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Ugaritic}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Ugar}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Ugar}"
+);
+testPropertyEscapes(
+ /^\p{scx=Ugaritic}+$/u,
+ matchSymbols,
+ "\\p{scx=Ugaritic}"
+);
+testPropertyEscapes(
+ /^\p{scx=Ugar}+$/u,
+ matchSymbols,
+ "\\p{scx=Ugar}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x01039E
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01037F],
+ [0x0103A0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Ugaritic}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Ugaritic}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Ugar}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Ugar}"
+);
+testPropertyEscapes(
+ /^\P{scx=Ugaritic}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Ugaritic}"
+);
+testPropertyEscapes(
+ /^\P{scx=Ugar}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Ugar}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Vai.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Vai.js
new file mode 100644
index 0000000000..eae7e9746e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Vai.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Vai`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00A500, 0x00A62B]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Vai}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Vai}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Vaii}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Vaii}"
+);
+testPropertyEscapes(
+ /^\p{scx=Vai}+$/u,
+ matchSymbols,
+ "\\p{scx=Vai}"
+);
+testPropertyEscapes(
+ /^\p{scx=Vaii}+$/u,
+ matchSymbols,
+ "\\p{scx=Vaii}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00A4FF],
+ [0x00A62C, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Vai}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Vai}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Vaii}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Vaii}"
+);
+testPropertyEscapes(
+ /^\P{scx=Vai}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Vai}"
+);
+testPropertyEscapes(
+ /^\P{scx=Vaii}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Vaii}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Vithkuqi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Vithkuqi.js
new file mode 100644
index 0000000000..c11c28c7ea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Vithkuqi.js
@@ -0,0 +1,88 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Vithkuqi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x010570, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Vithkuqi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Vithkuqi}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Vith}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Vith}"
+);
+testPropertyEscapes(
+ /^\p{scx=Vithkuqi}+$/u,
+ matchSymbols,
+ "\\p{scx=Vithkuqi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Vith}+$/u,
+ matchSymbols,
+ "\\p{scx=Vith}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x010596,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01056F],
+ [0x0105BD, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Vithkuqi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Vithkuqi}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Vith}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Vith}"
+);
+testPropertyEscapes(
+ /^\P{scx=Vithkuqi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Vithkuqi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Vith}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Vith}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Wancho.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Wancho.js
new file mode 100644
index 0000000000..11558cdb58
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Wancho.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Wancho`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x01E2FF
+ ],
+ ranges: [
+ [0x01E2C0, 0x01E2F9]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Wancho}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Wancho}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Wcho}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Wcho}"
+);
+testPropertyEscapes(
+ /^\p{scx=Wancho}+$/u,
+ matchSymbols,
+ "\\p{scx=Wancho}"
+);
+testPropertyEscapes(
+ /^\p{scx=Wcho}+$/u,
+ matchSymbols,
+ "\\p{scx=Wcho}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01E2BF],
+ [0x01E2FA, 0x01E2FE],
+ [0x01E300, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Wancho}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Wancho}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Wcho}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Wcho}"
+);
+testPropertyEscapes(
+ /^\P{scx=Wancho}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Wancho}"
+);
+testPropertyEscapes(
+ /^\P{scx=Wcho}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Wcho}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Warang_Citi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Warang_Citi.js
new file mode 100644
index 0000000000..ac9baefff6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Warang_Citi.js
@@ -0,0 +1,76 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Warang_Citi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0118FF
+ ],
+ ranges: [
+ [0x0118A0, 0x0118F2]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Warang_Citi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Warang_Citi}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Wara}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Wara}"
+);
+testPropertyEscapes(
+ /^\p{scx=Warang_Citi}+$/u,
+ matchSymbols,
+ "\\p{scx=Warang_Citi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Wara}+$/u,
+ matchSymbols,
+ "\\p{scx=Wara}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x01189F],
+ [0x0118F3, 0x0118FE],
+ [0x011900, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Warang_Citi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Warang_Citi}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Wara}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Wara}"
+);
+testPropertyEscapes(
+ /^\P{scx=Warang_Citi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Warang_Citi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Wara}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Wara}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Yezidi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Yezidi.js
new file mode 100644
index 0000000000..2bd939e7e5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Yezidi.js
@@ -0,0 +1,87 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Yezidi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00060C,
+ 0x00061B,
+ 0x00061F
+ ],
+ ranges: [
+ [0x000660, 0x000669],
+ [0x010E80, 0x010EA9],
+ [0x010EAB, 0x010EAD],
+ [0x010EB0, 0x010EB1]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Yezidi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Yezidi}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Yezi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Yezi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Yezidi}+$/u,
+ matchSymbols,
+ "\\p{scx=Yezidi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Yezi}+$/u,
+ matchSymbols,
+ "\\p{scx=Yezi}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x010EAA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00060B],
+ [0x00060D, 0x00061A],
+ [0x00061C, 0x00061E],
+ [0x000620, 0x00065F],
+ [0x00066A, 0x00DBFF],
+ [0x00E000, 0x010E7F],
+ [0x010EAE, 0x010EAF],
+ [0x010EB2, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Yezidi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Yezidi}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Yezi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Yezi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Yezidi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Yezidi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Yezi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Yezi}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Yi.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Yi.js
new file mode 100644
index 0000000000..9f401874dc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Yi.js
@@ -0,0 +1,86 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Yi`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0030FB
+ ],
+ ranges: [
+ [0x003001, 0x003002],
+ [0x003008, 0x003011],
+ [0x003014, 0x00301B],
+ [0x00A000, 0x00A48C],
+ [0x00A490, 0x00A4C6],
+ [0x00FF61, 0x00FF65]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Yi}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Yi}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Yiii}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Yiii}"
+);
+testPropertyEscapes(
+ /^\p{scx=Yi}+$/u,
+ matchSymbols,
+ "\\p{scx=Yi}"
+);
+testPropertyEscapes(
+ /^\p{scx=Yiii}+$/u,
+ matchSymbols,
+ "\\p{scx=Yiii}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x003000],
+ [0x003003, 0x003007],
+ [0x003012, 0x003013],
+ [0x00301C, 0x0030FA],
+ [0x0030FC, 0x009FFF],
+ [0x00A48D, 0x00A48F],
+ [0x00A4C7, 0x00DBFF],
+ [0x00E000, 0x00FF60],
+ [0x00FF66, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Yi}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Yi}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Yiii}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Yiii}"
+);
+testPropertyEscapes(
+ /^\P{scx=Yi}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Yi}"
+);
+testPropertyEscapes(
+ /^\P{scx=Yiii}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Yiii}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Zanabazar_Square.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Zanabazar_Square.js
new file mode 100644
index 0000000000..4914a6165f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Zanabazar_Square.js
@@ -0,0 +1,73 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Script_Extensions=Zanabazar_Square`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x011A00, 0x011A47]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Script_Extensions=Zanabazar_Square}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Zanabazar_Square}"
+);
+testPropertyEscapes(
+ /^\p{Script_Extensions=Zanb}+$/u,
+ matchSymbols,
+ "\\p{Script_Extensions=Zanb}"
+);
+testPropertyEscapes(
+ /^\p{scx=Zanabazar_Square}+$/u,
+ matchSymbols,
+ "\\p{scx=Zanabazar_Square}"
+);
+testPropertyEscapes(
+ /^\p{scx=Zanb}+$/u,
+ matchSymbols,
+ "\\p{scx=Zanb}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00DBFF],
+ [0x00E000, 0x0119FF],
+ [0x011A48, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Script_Extensions=Zanabazar_Square}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Zanabazar_Square}"
+);
+testPropertyEscapes(
+ /^\P{Script_Extensions=Zanb}+$/u,
+ nonMatchSymbols,
+ "\\P{Script_Extensions=Zanb}"
+);
+testPropertyEscapes(
+ /^\P{scx=Zanabazar_Square}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Zanabazar_Square}"
+);
+testPropertyEscapes(
+ /^\P{scx=Zanb}+$/u,
+ nonMatchSymbols,
+ "\\P{scx=Zanb}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Sentence_Terminal.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Sentence_Terminal.js
new file mode 100644
index 0000000000..63f3440aca
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Sentence_Terminal.js
@@ -0,0 +1,213 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Sentence_Terminal`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000021,
+ 0x00002E,
+ 0x00003F,
+ 0x000589,
+ 0x0006D4,
+ 0x0007F9,
+ 0x000837,
+ 0x000839,
+ 0x001362,
+ 0x00166E,
+ 0x001803,
+ 0x001809,
+ 0x002E2E,
+ 0x002E3C,
+ 0x003002,
+ 0x00A4FF,
+ 0x00A6F3,
+ 0x00A6F7,
+ 0x00A92F,
+ 0x00ABEB,
+ 0x00FE52,
+ 0x00FF01,
+ 0x00FF0E,
+ 0x00FF1F,
+ 0x00FF61,
+ 0x0111CD,
+ 0x0112A9,
+ 0x011944,
+ 0x011946,
+ 0x016AF5,
+ 0x016B44,
+ 0x016E98,
+ 0x01BC9F,
+ 0x01DA88
+ ],
+ ranges: [
+ [0x00061D, 0x00061F],
+ [0x000700, 0x000702],
+ [0x00083D, 0x00083E],
+ [0x000964, 0x000965],
+ [0x00104A, 0x00104B],
+ [0x001367, 0x001368],
+ [0x001735, 0x001736],
+ [0x001944, 0x001945],
+ [0x001AA8, 0x001AAB],
+ [0x001B5A, 0x001B5B],
+ [0x001B5E, 0x001B5F],
+ [0x001B7D, 0x001B7E],
+ [0x001C3B, 0x001C3C],
+ [0x001C7E, 0x001C7F],
+ [0x00203C, 0x00203D],
+ [0x002047, 0x002049],
+ [0x002E53, 0x002E54],
+ [0x00A60E, 0x00A60F],
+ [0x00A876, 0x00A877],
+ [0x00A8CE, 0x00A8CF],
+ [0x00A9C8, 0x00A9C9],
+ [0x00AA5D, 0x00AA5F],
+ [0x00AAF0, 0x00AAF1],
+ [0x00FE56, 0x00FE57],
+ [0x010A56, 0x010A57],
+ [0x010F55, 0x010F59],
+ [0x010F86, 0x010F89],
+ [0x011047, 0x011048],
+ [0x0110BE, 0x0110C1],
+ [0x011141, 0x011143],
+ [0x0111C5, 0x0111C6],
+ [0x0111DE, 0x0111DF],
+ [0x011238, 0x011239],
+ [0x01123B, 0x01123C],
+ [0x01144B, 0x01144C],
+ [0x0115C2, 0x0115C3],
+ [0x0115C9, 0x0115D7],
+ [0x011641, 0x011642],
+ [0x01173C, 0x01173E],
+ [0x011A42, 0x011A43],
+ [0x011A9B, 0x011A9C],
+ [0x011C41, 0x011C42],
+ [0x011EF7, 0x011EF8],
+ [0x011F43, 0x011F44],
+ [0x016A6E, 0x016A6F],
+ [0x016B37, 0x016B38]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Sentence_Terminal}+$/u,
+ matchSymbols,
+ "\\p{Sentence_Terminal}"
+);
+testPropertyEscapes(
+ /^\p{STerm}+$/u,
+ matchSymbols,
+ "\\p{STerm}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000838,
+ 0x01123A,
+ 0x011945
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000020],
+ [0x000022, 0x00002D],
+ [0x00002F, 0x00003E],
+ [0x000040, 0x000588],
+ [0x00058A, 0x00061C],
+ [0x000620, 0x0006D3],
+ [0x0006D5, 0x0006FF],
+ [0x000703, 0x0007F8],
+ [0x0007FA, 0x000836],
+ [0x00083A, 0x00083C],
+ [0x00083F, 0x000963],
+ [0x000966, 0x001049],
+ [0x00104C, 0x001361],
+ [0x001363, 0x001366],
+ [0x001369, 0x00166D],
+ [0x00166F, 0x001734],
+ [0x001737, 0x001802],
+ [0x001804, 0x001808],
+ [0x00180A, 0x001943],
+ [0x001946, 0x001AA7],
+ [0x001AAC, 0x001B59],
+ [0x001B5C, 0x001B5D],
+ [0x001B60, 0x001B7C],
+ [0x001B7F, 0x001C3A],
+ [0x001C3D, 0x001C7D],
+ [0x001C80, 0x00203B],
+ [0x00203E, 0x002046],
+ [0x00204A, 0x002E2D],
+ [0x002E2F, 0x002E3B],
+ [0x002E3D, 0x002E52],
+ [0x002E55, 0x003001],
+ [0x003003, 0x00A4FE],
+ [0x00A500, 0x00A60D],
+ [0x00A610, 0x00A6F2],
+ [0x00A6F4, 0x00A6F6],
+ [0x00A6F8, 0x00A875],
+ [0x00A878, 0x00A8CD],
+ [0x00A8D0, 0x00A92E],
+ [0x00A930, 0x00A9C7],
+ [0x00A9CA, 0x00AA5C],
+ [0x00AA60, 0x00AAEF],
+ [0x00AAF2, 0x00ABEA],
+ [0x00ABEC, 0x00DBFF],
+ [0x00E000, 0x00FE51],
+ [0x00FE53, 0x00FE55],
+ [0x00FE58, 0x00FF00],
+ [0x00FF02, 0x00FF0D],
+ [0x00FF0F, 0x00FF1E],
+ [0x00FF20, 0x00FF60],
+ [0x00FF62, 0x010A55],
+ [0x010A58, 0x010F54],
+ [0x010F5A, 0x010F85],
+ [0x010F8A, 0x011046],
+ [0x011049, 0x0110BD],
+ [0x0110C2, 0x011140],
+ [0x011144, 0x0111C4],
+ [0x0111C7, 0x0111CC],
+ [0x0111CE, 0x0111DD],
+ [0x0111E0, 0x011237],
+ [0x01123D, 0x0112A8],
+ [0x0112AA, 0x01144A],
+ [0x01144D, 0x0115C1],
+ [0x0115C4, 0x0115C8],
+ [0x0115D8, 0x011640],
+ [0x011643, 0x01173B],
+ [0x01173F, 0x011943],
+ [0x011947, 0x011A41],
+ [0x011A44, 0x011A9A],
+ [0x011A9D, 0x011C40],
+ [0x011C43, 0x011EF6],
+ [0x011EF9, 0x011F42],
+ [0x011F45, 0x016A6D],
+ [0x016A70, 0x016AF4],
+ [0x016AF6, 0x016B36],
+ [0x016B39, 0x016B43],
+ [0x016B45, 0x016E97],
+ [0x016E99, 0x01BC9E],
+ [0x01BCA0, 0x01DA87],
+ [0x01DA89, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Sentence_Terminal}+$/u,
+ nonMatchSymbols,
+ "\\P{Sentence_Terminal}"
+);
+testPropertyEscapes(
+ /^\P{STerm}+$/u,
+ nonMatchSymbols,
+ "\\P{STerm}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Soft_Dotted.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Soft_Dotted.js
new file mode 100644
index 0000000000..0c98e25b97
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Soft_Dotted.js
@@ -0,0 +1,121 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Soft_Dotted`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00012F,
+ 0x000249,
+ 0x000268,
+ 0x00029D,
+ 0x0002B2,
+ 0x0003F3,
+ 0x000456,
+ 0x000458,
+ 0x001D62,
+ 0x001D96,
+ 0x001DA4,
+ 0x001DA8,
+ 0x001E2D,
+ 0x001ECB,
+ 0x002071,
+ 0x002C7C,
+ 0x01DF1A,
+ 0x01E068
+ ],
+ ranges: [
+ [0x000069, 0x00006A],
+ [0x002148, 0x002149],
+ [0x01D422, 0x01D423],
+ [0x01D456, 0x01D457],
+ [0x01D48A, 0x01D48B],
+ [0x01D4BE, 0x01D4BF],
+ [0x01D4F2, 0x01D4F3],
+ [0x01D526, 0x01D527],
+ [0x01D55A, 0x01D55B],
+ [0x01D58E, 0x01D58F],
+ [0x01D5C2, 0x01D5C3],
+ [0x01D5F6, 0x01D5F7],
+ [0x01D62A, 0x01D62B],
+ [0x01D65E, 0x01D65F],
+ [0x01D692, 0x01D693],
+ [0x01E04C, 0x01E04D]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Soft_Dotted}+$/u,
+ matchSymbols,
+ "\\p{Soft_Dotted}"
+);
+testPropertyEscapes(
+ /^\p{SD}+$/u,
+ matchSymbols,
+ "\\p{SD}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000457
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000068],
+ [0x00006B, 0x00012E],
+ [0x000130, 0x000248],
+ [0x00024A, 0x000267],
+ [0x000269, 0x00029C],
+ [0x00029E, 0x0002B1],
+ [0x0002B3, 0x0003F2],
+ [0x0003F4, 0x000455],
+ [0x000459, 0x001D61],
+ [0x001D63, 0x001D95],
+ [0x001D97, 0x001DA3],
+ [0x001DA5, 0x001DA7],
+ [0x001DA9, 0x001E2C],
+ [0x001E2E, 0x001ECA],
+ [0x001ECC, 0x002070],
+ [0x002072, 0x002147],
+ [0x00214A, 0x002C7B],
+ [0x002C7D, 0x00DBFF],
+ [0x00E000, 0x01D421],
+ [0x01D424, 0x01D455],
+ [0x01D458, 0x01D489],
+ [0x01D48C, 0x01D4BD],
+ [0x01D4C0, 0x01D4F1],
+ [0x01D4F4, 0x01D525],
+ [0x01D528, 0x01D559],
+ [0x01D55C, 0x01D58D],
+ [0x01D590, 0x01D5C1],
+ [0x01D5C4, 0x01D5F5],
+ [0x01D5F8, 0x01D629],
+ [0x01D62C, 0x01D65D],
+ [0x01D660, 0x01D691],
+ [0x01D694, 0x01DF19],
+ [0x01DF1B, 0x01E04B],
+ [0x01E04E, 0x01E067],
+ [0x01E069, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Soft_Dotted}+$/u,
+ nonMatchSymbols,
+ "\\P{Soft_Dotted}"
+);
+testPropertyEscapes(
+ /^\P{SD}+$/u,
+ nonMatchSymbols,
+ "\\P{SD}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Terminal_Punctuation.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Terminal_Punctuation.js
new file mode 100644
index 0000000000..a4fb8548e9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Terminal_Punctuation.js
@@ -0,0 +1,269 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Terminal_Punctuation`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000021,
+ 0x00002C,
+ 0x00002E,
+ 0x00003F,
+ 0x00037E,
+ 0x000387,
+ 0x000589,
+ 0x0005C3,
+ 0x00060C,
+ 0x00061B,
+ 0x0006D4,
+ 0x00070C,
+ 0x00085E,
+ 0x000F08,
+ 0x00166E,
+ 0x0017DA,
+ 0x002E2E,
+ 0x002E3C,
+ 0x002E41,
+ 0x002E4C,
+ 0x00A92F,
+ 0x00AADF,
+ 0x00ABEB,
+ 0x00FF01,
+ 0x00FF0C,
+ 0x00FF0E,
+ 0x00FF1F,
+ 0x00FF61,
+ 0x00FF64,
+ 0x01039F,
+ 0x0103D0,
+ 0x010857,
+ 0x01091F,
+ 0x0111CD,
+ 0x0112A9,
+ 0x011944,
+ 0x011946,
+ 0x011C71,
+ 0x016AF5,
+ 0x016B44,
+ 0x01BC9F
+ ],
+ ranges: [
+ [0x00003A, 0x00003B],
+ [0x00061D, 0x00061F],
+ [0x000700, 0x00070A],
+ [0x0007F8, 0x0007F9],
+ [0x000830, 0x00083E],
+ [0x000964, 0x000965],
+ [0x000E5A, 0x000E5B],
+ [0x000F0D, 0x000F12],
+ [0x00104A, 0x00104B],
+ [0x001361, 0x001368],
+ [0x0016EB, 0x0016ED],
+ [0x001735, 0x001736],
+ [0x0017D4, 0x0017D6],
+ [0x001802, 0x001805],
+ [0x001808, 0x001809],
+ [0x001944, 0x001945],
+ [0x001AA8, 0x001AAB],
+ [0x001B5A, 0x001B5B],
+ [0x001B5D, 0x001B5F],
+ [0x001B7D, 0x001B7E],
+ [0x001C3B, 0x001C3F],
+ [0x001C7E, 0x001C7F],
+ [0x00203C, 0x00203D],
+ [0x002047, 0x002049],
+ [0x002E4E, 0x002E4F],
+ [0x002E53, 0x002E54],
+ [0x003001, 0x003002],
+ [0x00A4FE, 0x00A4FF],
+ [0x00A60D, 0x00A60F],
+ [0x00A6F3, 0x00A6F7],
+ [0x00A876, 0x00A877],
+ [0x00A8CE, 0x00A8CF],
+ [0x00A9C7, 0x00A9C9],
+ [0x00AA5D, 0x00AA5F],
+ [0x00AAF0, 0x00AAF1],
+ [0x00FE50, 0x00FE52],
+ [0x00FE54, 0x00FE57],
+ [0x00FF1A, 0x00FF1B],
+ [0x010A56, 0x010A57],
+ [0x010AF0, 0x010AF5],
+ [0x010B3A, 0x010B3F],
+ [0x010B99, 0x010B9C],
+ [0x010F55, 0x010F59],
+ [0x010F86, 0x010F89],
+ [0x011047, 0x01104D],
+ [0x0110BE, 0x0110C1],
+ [0x011141, 0x011143],
+ [0x0111C5, 0x0111C6],
+ [0x0111DE, 0x0111DF],
+ [0x011238, 0x01123C],
+ [0x01144B, 0x01144D],
+ [0x01145A, 0x01145B],
+ [0x0115C2, 0x0115C5],
+ [0x0115C9, 0x0115D7],
+ [0x011641, 0x011642],
+ [0x01173C, 0x01173E],
+ [0x011A42, 0x011A43],
+ [0x011A9B, 0x011A9C],
+ [0x011AA1, 0x011AA2],
+ [0x011C41, 0x011C43],
+ [0x011EF7, 0x011EF8],
+ [0x011F43, 0x011F44],
+ [0x012470, 0x012474],
+ [0x016A6E, 0x016A6F],
+ [0x016B37, 0x016B39],
+ [0x016E97, 0x016E98],
+ [0x01DA87, 0x01DA8A]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Terminal_Punctuation}+$/u,
+ matchSymbols,
+ "\\p{Terminal_Punctuation}"
+);
+testPropertyEscapes(
+ /^\p{Term}+$/u,
+ matchSymbols,
+ "\\p{Term}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00002D,
+ 0x00061C,
+ 0x00070B,
+ 0x001B5C,
+ 0x002E4D,
+ 0x00FE53,
+ 0x00FF0D,
+ 0x011945
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000020],
+ [0x000022, 0x00002B],
+ [0x00002F, 0x000039],
+ [0x00003C, 0x00003E],
+ [0x000040, 0x00037D],
+ [0x00037F, 0x000386],
+ [0x000388, 0x000588],
+ [0x00058A, 0x0005C2],
+ [0x0005C4, 0x00060B],
+ [0x00060D, 0x00061A],
+ [0x000620, 0x0006D3],
+ [0x0006D5, 0x0006FF],
+ [0x00070D, 0x0007F7],
+ [0x0007FA, 0x00082F],
+ [0x00083F, 0x00085D],
+ [0x00085F, 0x000963],
+ [0x000966, 0x000E59],
+ [0x000E5C, 0x000F07],
+ [0x000F09, 0x000F0C],
+ [0x000F13, 0x001049],
+ [0x00104C, 0x001360],
+ [0x001369, 0x00166D],
+ [0x00166F, 0x0016EA],
+ [0x0016EE, 0x001734],
+ [0x001737, 0x0017D3],
+ [0x0017D7, 0x0017D9],
+ [0x0017DB, 0x001801],
+ [0x001806, 0x001807],
+ [0x00180A, 0x001943],
+ [0x001946, 0x001AA7],
+ [0x001AAC, 0x001B59],
+ [0x001B60, 0x001B7C],
+ [0x001B7F, 0x001C3A],
+ [0x001C40, 0x001C7D],
+ [0x001C80, 0x00203B],
+ [0x00203E, 0x002046],
+ [0x00204A, 0x002E2D],
+ [0x002E2F, 0x002E3B],
+ [0x002E3D, 0x002E40],
+ [0x002E42, 0x002E4B],
+ [0x002E50, 0x002E52],
+ [0x002E55, 0x003000],
+ [0x003003, 0x00A4FD],
+ [0x00A500, 0x00A60C],
+ [0x00A610, 0x00A6F2],
+ [0x00A6F8, 0x00A875],
+ [0x00A878, 0x00A8CD],
+ [0x00A8D0, 0x00A92E],
+ [0x00A930, 0x00A9C6],
+ [0x00A9CA, 0x00AA5C],
+ [0x00AA60, 0x00AADE],
+ [0x00AAE0, 0x00AAEF],
+ [0x00AAF2, 0x00ABEA],
+ [0x00ABEC, 0x00DBFF],
+ [0x00E000, 0x00FE4F],
+ [0x00FE58, 0x00FF00],
+ [0x00FF02, 0x00FF0B],
+ [0x00FF0F, 0x00FF19],
+ [0x00FF1C, 0x00FF1E],
+ [0x00FF20, 0x00FF60],
+ [0x00FF62, 0x00FF63],
+ [0x00FF65, 0x01039E],
+ [0x0103A0, 0x0103CF],
+ [0x0103D1, 0x010856],
+ [0x010858, 0x01091E],
+ [0x010920, 0x010A55],
+ [0x010A58, 0x010AEF],
+ [0x010AF6, 0x010B39],
+ [0x010B40, 0x010B98],
+ [0x010B9D, 0x010F54],
+ [0x010F5A, 0x010F85],
+ [0x010F8A, 0x011046],
+ [0x01104E, 0x0110BD],
+ [0x0110C2, 0x011140],
+ [0x011144, 0x0111C4],
+ [0x0111C7, 0x0111CC],
+ [0x0111CE, 0x0111DD],
+ [0x0111E0, 0x011237],
+ [0x01123D, 0x0112A8],
+ [0x0112AA, 0x01144A],
+ [0x01144E, 0x011459],
+ [0x01145C, 0x0115C1],
+ [0x0115C6, 0x0115C8],
+ [0x0115D8, 0x011640],
+ [0x011643, 0x01173B],
+ [0x01173F, 0x011943],
+ [0x011947, 0x011A41],
+ [0x011A44, 0x011A9A],
+ [0x011A9D, 0x011AA0],
+ [0x011AA3, 0x011C40],
+ [0x011C44, 0x011C70],
+ [0x011C72, 0x011EF6],
+ [0x011EF9, 0x011F42],
+ [0x011F45, 0x01246F],
+ [0x012475, 0x016A6D],
+ [0x016A70, 0x016AF4],
+ [0x016AF6, 0x016B36],
+ [0x016B3A, 0x016B43],
+ [0x016B45, 0x016E96],
+ [0x016E99, 0x01BC9E],
+ [0x01BCA0, 0x01DA86],
+ [0x01DA8B, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Terminal_Punctuation}+$/u,
+ nonMatchSymbols,
+ "\\P{Terminal_Punctuation}"
+);
+testPropertyEscapes(
+ /^\P{Term}+$/u,
+ nonMatchSymbols,
+ "\\P{Term}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Unified_Ideograph.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Unified_Ideograph.js
new file mode 100644
index 0000000000..19a14f5a78
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Unified_Ideograph.js
@@ -0,0 +1,85 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Unified_Ideograph`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00FA11,
+ 0x00FA1F,
+ 0x00FA21
+ ],
+ ranges: [
+ [0x003400, 0x004DBF],
+ [0x004E00, 0x009FFF],
+ [0x00FA0E, 0x00FA0F],
+ [0x00FA13, 0x00FA14],
+ [0x00FA23, 0x00FA24],
+ [0x00FA27, 0x00FA29],
+ [0x020000, 0x02A6DF],
+ [0x02A700, 0x02B739],
+ [0x02B740, 0x02B81D],
+ [0x02B820, 0x02CEA1],
+ [0x02CEB0, 0x02EBE0],
+ [0x030000, 0x03134A],
+ [0x031350, 0x0323AF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Unified_Ideograph}+$/u,
+ matchSymbols,
+ "\\p{Unified_Ideograph}"
+);
+testPropertyEscapes(
+ /^\p{UIdeo}+$/u,
+ matchSymbols,
+ "\\p{UIdeo}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00FA10,
+ 0x00FA12,
+ 0x00FA20,
+ 0x00FA22
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x0033FF],
+ [0x004DC0, 0x004DFF],
+ [0x00A000, 0x00DBFF],
+ [0x00E000, 0x00FA0D],
+ [0x00FA15, 0x00FA1E],
+ [0x00FA25, 0x00FA26],
+ [0x00FA2A, 0x01FFFF],
+ [0x02A6E0, 0x02A6FF],
+ [0x02B73A, 0x02B73F],
+ [0x02B81E, 0x02B81F],
+ [0x02CEA2, 0x02CEAF],
+ [0x02EBE1, 0x02FFFF],
+ [0x03134B, 0x03134F],
+ [0x0323B0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Unified_Ideograph}+$/u,
+ nonMatchSymbols,
+ "\\P{Unified_Ideograph}"
+);
+testPropertyEscapes(
+ /^\P{UIdeo}+$/u,
+ nonMatchSymbols,
+ "\\P{UIdeo}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Uppercase.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Uppercase.js
new file mode 100644
index 0000000000..f2eba82613
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Uppercase.js
@@ -0,0 +1,1355 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Uppercase`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000100,
+ 0x000102,
+ 0x000104,
+ 0x000106,
+ 0x000108,
+ 0x00010A,
+ 0x00010C,
+ 0x00010E,
+ 0x000110,
+ 0x000112,
+ 0x000114,
+ 0x000116,
+ 0x000118,
+ 0x00011A,
+ 0x00011C,
+ 0x00011E,
+ 0x000120,
+ 0x000122,
+ 0x000124,
+ 0x000126,
+ 0x000128,
+ 0x00012A,
+ 0x00012C,
+ 0x00012E,
+ 0x000130,
+ 0x000132,
+ 0x000134,
+ 0x000136,
+ 0x000139,
+ 0x00013B,
+ 0x00013D,
+ 0x00013F,
+ 0x000141,
+ 0x000143,
+ 0x000145,
+ 0x000147,
+ 0x00014A,
+ 0x00014C,
+ 0x00014E,
+ 0x000150,
+ 0x000152,
+ 0x000154,
+ 0x000156,
+ 0x000158,
+ 0x00015A,
+ 0x00015C,
+ 0x00015E,
+ 0x000160,
+ 0x000162,
+ 0x000164,
+ 0x000166,
+ 0x000168,
+ 0x00016A,
+ 0x00016C,
+ 0x00016E,
+ 0x000170,
+ 0x000172,
+ 0x000174,
+ 0x000176,
+ 0x00017B,
+ 0x00017D,
+ 0x000184,
+ 0x0001A2,
+ 0x0001A4,
+ 0x0001A9,
+ 0x0001AC,
+ 0x0001B5,
+ 0x0001BC,
+ 0x0001C4,
+ 0x0001C7,
+ 0x0001CA,
+ 0x0001CD,
+ 0x0001CF,
+ 0x0001D1,
+ 0x0001D3,
+ 0x0001D5,
+ 0x0001D7,
+ 0x0001D9,
+ 0x0001DB,
+ 0x0001DE,
+ 0x0001E0,
+ 0x0001E2,
+ 0x0001E4,
+ 0x0001E6,
+ 0x0001E8,
+ 0x0001EA,
+ 0x0001EC,
+ 0x0001EE,
+ 0x0001F1,
+ 0x0001F4,
+ 0x0001FA,
+ 0x0001FC,
+ 0x0001FE,
+ 0x000200,
+ 0x000202,
+ 0x000204,
+ 0x000206,
+ 0x000208,
+ 0x00020A,
+ 0x00020C,
+ 0x00020E,
+ 0x000210,
+ 0x000212,
+ 0x000214,
+ 0x000216,
+ 0x000218,
+ 0x00021A,
+ 0x00021C,
+ 0x00021E,
+ 0x000220,
+ 0x000222,
+ 0x000224,
+ 0x000226,
+ 0x000228,
+ 0x00022A,
+ 0x00022C,
+ 0x00022E,
+ 0x000230,
+ 0x000232,
+ 0x000241,
+ 0x000248,
+ 0x00024A,
+ 0x00024C,
+ 0x00024E,
+ 0x000370,
+ 0x000372,
+ 0x000376,
+ 0x00037F,
+ 0x000386,
+ 0x00038C,
+ 0x0003CF,
+ 0x0003D8,
+ 0x0003DA,
+ 0x0003DC,
+ 0x0003DE,
+ 0x0003E0,
+ 0x0003E2,
+ 0x0003E4,
+ 0x0003E6,
+ 0x0003E8,
+ 0x0003EA,
+ 0x0003EC,
+ 0x0003EE,
+ 0x0003F4,
+ 0x0003F7,
+ 0x000460,
+ 0x000462,
+ 0x000464,
+ 0x000466,
+ 0x000468,
+ 0x00046A,
+ 0x00046C,
+ 0x00046E,
+ 0x000470,
+ 0x000472,
+ 0x000474,
+ 0x000476,
+ 0x000478,
+ 0x00047A,
+ 0x00047C,
+ 0x00047E,
+ 0x000480,
+ 0x00048A,
+ 0x00048C,
+ 0x00048E,
+ 0x000490,
+ 0x000492,
+ 0x000494,
+ 0x000496,
+ 0x000498,
+ 0x00049A,
+ 0x00049C,
+ 0x00049E,
+ 0x0004A0,
+ 0x0004A2,
+ 0x0004A4,
+ 0x0004A6,
+ 0x0004A8,
+ 0x0004AA,
+ 0x0004AC,
+ 0x0004AE,
+ 0x0004B0,
+ 0x0004B2,
+ 0x0004B4,
+ 0x0004B6,
+ 0x0004B8,
+ 0x0004BA,
+ 0x0004BC,
+ 0x0004BE,
+ 0x0004C3,
+ 0x0004C5,
+ 0x0004C7,
+ 0x0004C9,
+ 0x0004CB,
+ 0x0004CD,
+ 0x0004D0,
+ 0x0004D2,
+ 0x0004D4,
+ 0x0004D6,
+ 0x0004D8,
+ 0x0004DA,
+ 0x0004DC,
+ 0x0004DE,
+ 0x0004E0,
+ 0x0004E2,
+ 0x0004E4,
+ 0x0004E6,
+ 0x0004E8,
+ 0x0004EA,
+ 0x0004EC,
+ 0x0004EE,
+ 0x0004F0,
+ 0x0004F2,
+ 0x0004F4,
+ 0x0004F6,
+ 0x0004F8,
+ 0x0004FA,
+ 0x0004FC,
+ 0x0004FE,
+ 0x000500,
+ 0x000502,
+ 0x000504,
+ 0x000506,
+ 0x000508,
+ 0x00050A,
+ 0x00050C,
+ 0x00050E,
+ 0x000510,
+ 0x000512,
+ 0x000514,
+ 0x000516,
+ 0x000518,
+ 0x00051A,
+ 0x00051C,
+ 0x00051E,
+ 0x000520,
+ 0x000522,
+ 0x000524,
+ 0x000526,
+ 0x000528,
+ 0x00052A,
+ 0x00052C,
+ 0x00052E,
+ 0x0010C7,
+ 0x0010CD,
+ 0x001E00,
+ 0x001E02,
+ 0x001E04,
+ 0x001E06,
+ 0x001E08,
+ 0x001E0A,
+ 0x001E0C,
+ 0x001E0E,
+ 0x001E10,
+ 0x001E12,
+ 0x001E14,
+ 0x001E16,
+ 0x001E18,
+ 0x001E1A,
+ 0x001E1C,
+ 0x001E1E,
+ 0x001E20,
+ 0x001E22,
+ 0x001E24,
+ 0x001E26,
+ 0x001E28,
+ 0x001E2A,
+ 0x001E2C,
+ 0x001E2E,
+ 0x001E30,
+ 0x001E32,
+ 0x001E34,
+ 0x001E36,
+ 0x001E38,
+ 0x001E3A,
+ 0x001E3C,
+ 0x001E3E,
+ 0x001E40,
+ 0x001E42,
+ 0x001E44,
+ 0x001E46,
+ 0x001E48,
+ 0x001E4A,
+ 0x001E4C,
+ 0x001E4E,
+ 0x001E50,
+ 0x001E52,
+ 0x001E54,
+ 0x001E56,
+ 0x001E58,
+ 0x001E5A,
+ 0x001E5C,
+ 0x001E5E,
+ 0x001E60,
+ 0x001E62,
+ 0x001E64,
+ 0x001E66,
+ 0x001E68,
+ 0x001E6A,
+ 0x001E6C,
+ 0x001E6E,
+ 0x001E70,
+ 0x001E72,
+ 0x001E74,
+ 0x001E76,
+ 0x001E78,
+ 0x001E7A,
+ 0x001E7C,
+ 0x001E7E,
+ 0x001E80,
+ 0x001E82,
+ 0x001E84,
+ 0x001E86,
+ 0x001E88,
+ 0x001E8A,
+ 0x001E8C,
+ 0x001E8E,
+ 0x001E90,
+ 0x001E92,
+ 0x001E94,
+ 0x001E9E,
+ 0x001EA0,
+ 0x001EA2,
+ 0x001EA4,
+ 0x001EA6,
+ 0x001EA8,
+ 0x001EAA,
+ 0x001EAC,
+ 0x001EAE,
+ 0x001EB0,
+ 0x001EB2,
+ 0x001EB4,
+ 0x001EB6,
+ 0x001EB8,
+ 0x001EBA,
+ 0x001EBC,
+ 0x001EBE,
+ 0x001EC0,
+ 0x001EC2,
+ 0x001EC4,
+ 0x001EC6,
+ 0x001EC8,
+ 0x001ECA,
+ 0x001ECC,
+ 0x001ECE,
+ 0x001ED0,
+ 0x001ED2,
+ 0x001ED4,
+ 0x001ED6,
+ 0x001ED8,
+ 0x001EDA,
+ 0x001EDC,
+ 0x001EDE,
+ 0x001EE0,
+ 0x001EE2,
+ 0x001EE4,
+ 0x001EE6,
+ 0x001EE8,
+ 0x001EEA,
+ 0x001EEC,
+ 0x001EEE,
+ 0x001EF0,
+ 0x001EF2,
+ 0x001EF4,
+ 0x001EF6,
+ 0x001EF8,
+ 0x001EFA,
+ 0x001EFC,
+ 0x001EFE,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x001F5F,
+ 0x002102,
+ 0x002107,
+ 0x002115,
+ 0x002124,
+ 0x002126,
+ 0x002128,
+ 0x002145,
+ 0x002183,
+ 0x002C60,
+ 0x002C67,
+ 0x002C69,
+ 0x002C6B,
+ 0x002C72,
+ 0x002C75,
+ 0x002C82,
+ 0x002C84,
+ 0x002C86,
+ 0x002C88,
+ 0x002C8A,
+ 0x002C8C,
+ 0x002C8E,
+ 0x002C90,
+ 0x002C92,
+ 0x002C94,
+ 0x002C96,
+ 0x002C98,
+ 0x002C9A,
+ 0x002C9C,
+ 0x002C9E,
+ 0x002CA0,
+ 0x002CA2,
+ 0x002CA4,
+ 0x002CA6,
+ 0x002CA8,
+ 0x002CAA,
+ 0x002CAC,
+ 0x002CAE,
+ 0x002CB0,
+ 0x002CB2,
+ 0x002CB4,
+ 0x002CB6,
+ 0x002CB8,
+ 0x002CBA,
+ 0x002CBC,
+ 0x002CBE,
+ 0x002CC0,
+ 0x002CC2,
+ 0x002CC4,
+ 0x002CC6,
+ 0x002CC8,
+ 0x002CCA,
+ 0x002CCC,
+ 0x002CCE,
+ 0x002CD0,
+ 0x002CD2,
+ 0x002CD4,
+ 0x002CD6,
+ 0x002CD8,
+ 0x002CDA,
+ 0x002CDC,
+ 0x002CDE,
+ 0x002CE0,
+ 0x002CE2,
+ 0x002CEB,
+ 0x002CED,
+ 0x002CF2,
+ 0x00A640,
+ 0x00A642,
+ 0x00A644,
+ 0x00A646,
+ 0x00A648,
+ 0x00A64A,
+ 0x00A64C,
+ 0x00A64E,
+ 0x00A650,
+ 0x00A652,
+ 0x00A654,
+ 0x00A656,
+ 0x00A658,
+ 0x00A65A,
+ 0x00A65C,
+ 0x00A65E,
+ 0x00A660,
+ 0x00A662,
+ 0x00A664,
+ 0x00A666,
+ 0x00A668,
+ 0x00A66A,
+ 0x00A66C,
+ 0x00A680,
+ 0x00A682,
+ 0x00A684,
+ 0x00A686,
+ 0x00A688,
+ 0x00A68A,
+ 0x00A68C,
+ 0x00A68E,
+ 0x00A690,
+ 0x00A692,
+ 0x00A694,
+ 0x00A696,
+ 0x00A698,
+ 0x00A69A,
+ 0x00A722,
+ 0x00A724,
+ 0x00A726,
+ 0x00A728,
+ 0x00A72A,
+ 0x00A72C,
+ 0x00A72E,
+ 0x00A732,
+ 0x00A734,
+ 0x00A736,
+ 0x00A738,
+ 0x00A73A,
+ 0x00A73C,
+ 0x00A73E,
+ 0x00A740,
+ 0x00A742,
+ 0x00A744,
+ 0x00A746,
+ 0x00A748,
+ 0x00A74A,
+ 0x00A74C,
+ 0x00A74E,
+ 0x00A750,
+ 0x00A752,
+ 0x00A754,
+ 0x00A756,
+ 0x00A758,
+ 0x00A75A,
+ 0x00A75C,
+ 0x00A75E,
+ 0x00A760,
+ 0x00A762,
+ 0x00A764,
+ 0x00A766,
+ 0x00A768,
+ 0x00A76A,
+ 0x00A76C,
+ 0x00A76E,
+ 0x00A779,
+ 0x00A77B,
+ 0x00A780,
+ 0x00A782,
+ 0x00A784,
+ 0x00A786,
+ 0x00A78B,
+ 0x00A78D,
+ 0x00A790,
+ 0x00A792,
+ 0x00A796,
+ 0x00A798,
+ 0x00A79A,
+ 0x00A79C,
+ 0x00A79E,
+ 0x00A7A0,
+ 0x00A7A2,
+ 0x00A7A4,
+ 0x00A7A6,
+ 0x00A7A8,
+ 0x00A7B6,
+ 0x00A7B8,
+ 0x00A7BA,
+ 0x00A7BC,
+ 0x00A7BE,
+ 0x00A7C0,
+ 0x00A7C2,
+ 0x00A7C9,
+ 0x00A7D0,
+ 0x00A7D6,
+ 0x00A7D8,
+ 0x00A7F5,
+ 0x01D49C,
+ 0x01D4A2,
+ 0x01D546,
+ 0x01D7CA
+ ],
+ ranges: [
+ [0x000041, 0x00005A],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000DE],
+ [0x000178, 0x000179],
+ [0x000181, 0x000182],
+ [0x000186, 0x000187],
+ [0x000189, 0x00018B],
+ [0x00018E, 0x000191],
+ [0x000193, 0x000194],
+ [0x000196, 0x000198],
+ [0x00019C, 0x00019D],
+ [0x00019F, 0x0001A0],
+ [0x0001A6, 0x0001A7],
+ [0x0001AE, 0x0001AF],
+ [0x0001B1, 0x0001B3],
+ [0x0001B7, 0x0001B8],
+ [0x0001F6, 0x0001F8],
+ [0x00023A, 0x00023B],
+ [0x00023D, 0x00023E],
+ [0x000243, 0x000246],
+ [0x000388, 0x00038A],
+ [0x00038E, 0x00038F],
+ [0x000391, 0x0003A1],
+ [0x0003A3, 0x0003AB],
+ [0x0003D2, 0x0003D4],
+ [0x0003F9, 0x0003FA],
+ [0x0003FD, 0x00042F],
+ [0x0004C0, 0x0004C1],
+ [0x000531, 0x000556],
+ [0x0010A0, 0x0010C5],
+ [0x0013A0, 0x0013F5],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CBF],
+ [0x001F08, 0x001F0F],
+ [0x001F18, 0x001F1D],
+ [0x001F28, 0x001F2F],
+ [0x001F38, 0x001F3F],
+ [0x001F48, 0x001F4D],
+ [0x001F68, 0x001F6F],
+ [0x001FB8, 0x001FBB],
+ [0x001FC8, 0x001FCB],
+ [0x001FD8, 0x001FDB],
+ [0x001FE8, 0x001FEC],
+ [0x001FF8, 0x001FFB],
+ [0x00210B, 0x00210D],
+ [0x002110, 0x002112],
+ [0x002119, 0x00211D],
+ [0x00212A, 0x00212D],
+ [0x002130, 0x002133],
+ [0x00213E, 0x00213F],
+ [0x002160, 0x00216F],
+ [0x0024B6, 0x0024CF],
+ [0x002C00, 0x002C2F],
+ [0x002C62, 0x002C64],
+ [0x002C6D, 0x002C70],
+ [0x002C7E, 0x002C80],
+ [0x00A77D, 0x00A77E],
+ [0x00A7AA, 0x00A7AE],
+ [0x00A7B0, 0x00A7B4],
+ [0x00A7C4, 0x00A7C7],
+ [0x00FF21, 0x00FF3A],
+ [0x010400, 0x010427],
+ [0x0104B0, 0x0104D3],
+ [0x010570, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010C80, 0x010CB2],
+ [0x0118A0, 0x0118BF],
+ [0x016E40, 0x016E5F],
+ [0x01D400, 0x01D419],
+ [0x01D434, 0x01D44D],
+ [0x01D468, 0x01D481],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B5],
+ [0x01D4D0, 0x01D4E9],
+ [0x01D504, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D538, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D56C, 0x01D585],
+ [0x01D5A0, 0x01D5B9],
+ [0x01D5D4, 0x01D5ED],
+ [0x01D608, 0x01D621],
+ [0x01D63C, 0x01D655],
+ [0x01D670, 0x01D689],
+ [0x01D6A8, 0x01D6C0],
+ [0x01D6E2, 0x01D6FA],
+ [0x01D71C, 0x01D734],
+ [0x01D756, 0x01D76E],
+ [0x01D790, 0x01D7A8],
+ [0x01E900, 0x01E921],
+ [0x01F130, 0x01F149],
+ [0x01F150, 0x01F169],
+ [0x01F170, 0x01F189]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Uppercase}+$/u,
+ matchSymbols,
+ "\\p{Uppercase}"
+);
+testPropertyEscapes(
+ /^\p{Upper}+$/u,
+ matchSymbols,
+ "\\p{Upper}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000D7,
+ 0x000101,
+ 0x000103,
+ 0x000105,
+ 0x000107,
+ 0x000109,
+ 0x00010B,
+ 0x00010D,
+ 0x00010F,
+ 0x000111,
+ 0x000113,
+ 0x000115,
+ 0x000117,
+ 0x000119,
+ 0x00011B,
+ 0x00011D,
+ 0x00011F,
+ 0x000121,
+ 0x000123,
+ 0x000125,
+ 0x000127,
+ 0x000129,
+ 0x00012B,
+ 0x00012D,
+ 0x00012F,
+ 0x000131,
+ 0x000133,
+ 0x000135,
+ 0x00013A,
+ 0x00013C,
+ 0x00013E,
+ 0x000140,
+ 0x000142,
+ 0x000144,
+ 0x000146,
+ 0x00014B,
+ 0x00014D,
+ 0x00014F,
+ 0x000151,
+ 0x000153,
+ 0x000155,
+ 0x000157,
+ 0x000159,
+ 0x00015B,
+ 0x00015D,
+ 0x00015F,
+ 0x000161,
+ 0x000163,
+ 0x000165,
+ 0x000167,
+ 0x000169,
+ 0x00016B,
+ 0x00016D,
+ 0x00016F,
+ 0x000171,
+ 0x000173,
+ 0x000175,
+ 0x000177,
+ 0x00017A,
+ 0x00017C,
+ 0x000183,
+ 0x000185,
+ 0x000188,
+ 0x000192,
+ 0x000195,
+ 0x00019E,
+ 0x0001A1,
+ 0x0001A3,
+ 0x0001A5,
+ 0x0001A8,
+ 0x0001AD,
+ 0x0001B0,
+ 0x0001B4,
+ 0x0001B6,
+ 0x0001CE,
+ 0x0001D0,
+ 0x0001D2,
+ 0x0001D4,
+ 0x0001D6,
+ 0x0001D8,
+ 0x0001DA,
+ 0x0001DF,
+ 0x0001E1,
+ 0x0001E3,
+ 0x0001E5,
+ 0x0001E7,
+ 0x0001E9,
+ 0x0001EB,
+ 0x0001ED,
+ 0x0001F5,
+ 0x0001F9,
+ 0x0001FB,
+ 0x0001FD,
+ 0x0001FF,
+ 0x000201,
+ 0x000203,
+ 0x000205,
+ 0x000207,
+ 0x000209,
+ 0x00020B,
+ 0x00020D,
+ 0x00020F,
+ 0x000211,
+ 0x000213,
+ 0x000215,
+ 0x000217,
+ 0x000219,
+ 0x00021B,
+ 0x00021D,
+ 0x00021F,
+ 0x000221,
+ 0x000223,
+ 0x000225,
+ 0x000227,
+ 0x000229,
+ 0x00022B,
+ 0x00022D,
+ 0x00022F,
+ 0x000231,
+ 0x00023C,
+ 0x000242,
+ 0x000247,
+ 0x000249,
+ 0x00024B,
+ 0x00024D,
+ 0x000371,
+ 0x000387,
+ 0x00038B,
+ 0x00038D,
+ 0x000390,
+ 0x0003A2,
+ 0x0003D9,
+ 0x0003DB,
+ 0x0003DD,
+ 0x0003DF,
+ 0x0003E1,
+ 0x0003E3,
+ 0x0003E5,
+ 0x0003E7,
+ 0x0003E9,
+ 0x0003EB,
+ 0x0003ED,
+ 0x0003F8,
+ 0x000461,
+ 0x000463,
+ 0x000465,
+ 0x000467,
+ 0x000469,
+ 0x00046B,
+ 0x00046D,
+ 0x00046F,
+ 0x000471,
+ 0x000473,
+ 0x000475,
+ 0x000477,
+ 0x000479,
+ 0x00047B,
+ 0x00047D,
+ 0x00047F,
+ 0x00048B,
+ 0x00048D,
+ 0x00048F,
+ 0x000491,
+ 0x000493,
+ 0x000495,
+ 0x000497,
+ 0x000499,
+ 0x00049B,
+ 0x00049D,
+ 0x00049F,
+ 0x0004A1,
+ 0x0004A3,
+ 0x0004A5,
+ 0x0004A7,
+ 0x0004A9,
+ 0x0004AB,
+ 0x0004AD,
+ 0x0004AF,
+ 0x0004B1,
+ 0x0004B3,
+ 0x0004B5,
+ 0x0004B7,
+ 0x0004B9,
+ 0x0004BB,
+ 0x0004BD,
+ 0x0004BF,
+ 0x0004C2,
+ 0x0004C4,
+ 0x0004C6,
+ 0x0004C8,
+ 0x0004CA,
+ 0x0004CC,
+ 0x0004D1,
+ 0x0004D3,
+ 0x0004D5,
+ 0x0004D7,
+ 0x0004D9,
+ 0x0004DB,
+ 0x0004DD,
+ 0x0004DF,
+ 0x0004E1,
+ 0x0004E3,
+ 0x0004E5,
+ 0x0004E7,
+ 0x0004E9,
+ 0x0004EB,
+ 0x0004ED,
+ 0x0004EF,
+ 0x0004F1,
+ 0x0004F3,
+ 0x0004F5,
+ 0x0004F7,
+ 0x0004F9,
+ 0x0004FB,
+ 0x0004FD,
+ 0x0004FF,
+ 0x000501,
+ 0x000503,
+ 0x000505,
+ 0x000507,
+ 0x000509,
+ 0x00050B,
+ 0x00050D,
+ 0x00050F,
+ 0x000511,
+ 0x000513,
+ 0x000515,
+ 0x000517,
+ 0x000519,
+ 0x00051B,
+ 0x00051D,
+ 0x00051F,
+ 0x000521,
+ 0x000523,
+ 0x000525,
+ 0x000527,
+ 0x000529,
+ 0x00052B,
+ 0x00052D,
+ 0x0010C6,
+ 0x001E01,
+ 0x001E03,
+ 0x001E05,
+ 0x001E07,
+ 0x001E09,
+ 0x001E0B,
+ 0x001E0D,
+ 0x001E0F,
+ 0x001E11,
+ 0x001E13,
+ 0x001E15,
+ 0x001E17,
+ 0x001E19,
+ 0x001E1B,
+ 0x001E1D,
+ 0x001E1F,
+ 0x001E21,
+ 0x001E23,
+ 0x001E25,
+ 0x001E27,
+ 0x001E29,
+ 0x001E2B,
+ 0x001E2D,
+ 0x001E2F,
+ 0x001E31,
+ 0x001E33,
+ 0x001E35,
+ 0x001E37,
+ 0x001E39,
+ 0x001E3B,
+ 0x001E3D,
+ 0x001E3F,
+ 0x001E41,
+ 0x001E43,
+ 0x001E45,
+ 0x001E47,
+ 0x001E49,
+ 0x001E4B,
+ 0x001E4D,
+ 0x001E4F,
+ 0x001E51,
+ 0x001E53,
+ 0x001E55,
+ 0x001E57,
+ 0x001E59,
+ 0x001E5B,
+ 0x001E5D,
+ 0x001E5F,
+ 0x001E61,
+ 0x001E63,
+ 0x001E65,
+ 0x001E67,
+ 0x001E69,
+ 0x001E6B,
+ 0x001E6D,
+ 0x001E6F,
+ 0x001E71,
+ 0x001E73,
+ 0x001E75,
+ 0x001E77,
+ 0x001E79,
+ 0x001E7B,
+ 0x001E7D,
+ 0x001E7F,
+ 0x001E81,
+ 0x001E83,
+ 0x001E85,
+ 0x001E87,
+ 0x001E89,
+ 0x001E8B,
+ 0x001E8D,
+ 0x001E8F,
+ 0x001E91,
+ 0x001E93,
+ 0x001E9F,
+ 0x001EA1,
+ 0x001EA3,
+ 0x001EA5,
+ 0x001EA7,
+ 0x001EA9,
+ 0x001EAB,
+ 0x001EAD,
+ 0x001EAF,
+ 0x001EB1,
+ 0x001EB3,
+ 0x001EB5,
+ 0x001EB7,
+ 0x001EB9,
+ 0x001EBB,
+ 0x001EBD,
+ 0x001EBF,
+ 0x001EC1,
+ 0x001EC3,
+ 0x001EC5,
+ 0x001EC7,
+ 0x001EC9,
+ 0x001ECB,
+ 0x001ECD,
+ 0x001ECF,
+ 0x001ED1,
+ 0x001ED3,
+ 0x001ED5,
+ 0x001ED7,
+ 0x001ED9,
+ 0x001EDB,
+ 0x001EDD,
+ 0x001EDF,
+ 0x001EE1,
+ 0x001EE3,
+ 0x001EE5,
+ 0x001EE7,
+ 0x001EE9,
+ 0x001EEB,
+ 0x001EED,
+ 0x001EEF,
+ 0x001EF1,
+ 0x001EF3,
+ 0x001EF5,
+ 0x001EF7,
+ 0x001EF9,
+ 0x001EFB,
+ 0x001EFD,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x002125,
+ 0x002127,
+ 0x002129,
+ 0x002C61,
+ 0x002C68,
+ 0x002C6A,
+ 0x002C6C,
+ 0x002C71,
+ 0x002C81,
+ 0x002C83,
+ 0x002C85,
+ 0x002C87,
+ 0x002C89,
+ 0x002C8B,
+ 0x002C8D,
+ 0x002C8F,
+ 0x002C91,
+ 0x002C93,
+ 0x002C95,
+ 0x002C97,
+ 0x002C99,
+ 0x002C9B,
+ 0x002C9D,
+ 0x002C9F,
+ 0x002CA1,
+ 0x002CA3,
+ 0x002CA5,
+ 0x002CA7,
+ 0x002CA9,
+ 0x002CAB,
+ 0x002CAD,
+ 0x002CAF,
+ 0x002CB1,
+ 0x002CB3,
+ 0x002CB5,
+ 0x002CB7,
+ 0x002CB9,
+ 0x002CBB,
+ 0x002CBD,
+ 0x002CBF,
+ 0x002CC1,
+ 0x002CC3,
+ 0x002CC5,
+ 0x002CC7,
+ 0x002CC9,
+ 0x002CCB,
+ 0x002CCD,
+ 0x002CCF,
+ 0x002CD1,
+ 0x002CD3,
+ 0x002CD5,
+ 0x002CD7,
+ 0x002CD9,
+ 0x002CDB,
+ 0x002CDD,
+ 0x002CDF,
+ 0x002CE1,
+ 0x002CEC,
+ 0x00A641,
+ 0x00A643,
+ 0x00A645,
+ 0x00A647,
+ 0x00A649,
+ 0x00A64B,
+ 0x00A64D,
+ 0x00A64F,
+ 0x00A651,
+ 0x00A653,
+ 0x00A655,
+ 0x00A657,
+ 0x00A659,
+ 0x00A65B,
+ 0x00A65D,
+ 0x00A65F,
+ 0x00A661,
+ 0x00A663,
+ 0x00A665,
+ 0x00A667,
+ 0x00A669,
+ 0x00A66B,
+ 0x00A681,
+ 0x00A683,
+ 0x00A685,
+ 0x00A687,
+ 0x00A689,
+ 0x00A68B,
+ 0x00A68D,
+ 0x00A68F,
+ 0x00A691,
+ 0x00A693,
+ 0x00A695,
+ 0x00A697,
+ 0x00A699,
+ 0x00A723,
+ 0x00A725,
+ 0x00A727,
+ 0x00A729,
+ 0x00A72B,
+ 0x00A72D,
+ 0x00A733,
+ 0x00A735,
+ 0x00A737,
+ 0x00A739,
+ 0x00A73B,
+ 0x00A73D,
+ 0x00A73F,
+ 0x00A741,
+ 0x00A743,
+ 0x00A745,
+ 0x00A747,
+ 0x00A749,
+ 0x00A74B,
+ 0x00A74D,
+ 0x00A74F,
+ 0x00A751,
+ 0x00A753,
+ 0x00A755,
+ 0x00A757,
+ 0x00A759,
+ 0x00A75B,
+ 0x00A75D,
+ 0x00A75F,
+ 0x00A761,
+ 0x00A763,
+ 0x00A765,
+ 0x00A767,
+ 0x00A769,
+ 0x00A76B,
+ 0x00A76D,
+ 0x00A77A,
+ 0x00A77C,
+ 0x00A77F,
+ 0x00A781,
+ 0x00A783,
+ 0x00A785,
+ 0x00A78C,
+ 0x00A791,
+ 0x00A797,
+ 0x00A799,
+ 0x00A79B,
+ 0x00A79D,
+ 0x00A79F,
+ 0x00A7A1,
+ 0x00A7A3,
+ 0x00A7A5,
+ 0x00A7A7,
+ 0x00A7A9,
+ 0x00A7AF,
+ 0x00A7B5,
+ 0x00A7B7,
+ 0x00A7B9,
+ 0x00A7BB,
+ 0x00A7BD,
+ 0x00A7BF,
+ 0x00A7C1,
+ 0x00A7C3,
+ 0x00A7C8,
+ 0x00A7D7,
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D506,
+ 0x01D515,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000040],
+ [0x00005B, 0x0000BF],
+ [0x0000DF, 0x0000FF],
+ [0x000137, 0x000138],
+ [0x000148, 0x000149],
+ [0x00017E, 0x000180],
+ [0x00018C, 0x00018D],
+ [0x000199, 0x00019B],
+ [0x0001AA, 0x0001AB],
+ [0x0001B9, 0x0001BB],
+ [0x0001BD, 0x0001C3],
+ [0x0001C5, 0x0001C6],
+ [0x0001C8, 0x0001C9],
+ [0x0001CB, 0x0001CC],
+ [0x0001DC, 0x0001DD],
+ [0x0001EF, 0x0001F0],
+ [0x0001F2, 0x0001F3],
+ [0x000233, 0x000239],
+ [0x00023F, 0x000240],
+ [0x00024F, 0x00036F],
+ [0x000373, 0x000375],
+ [0x000377, 0x00037E],
+ [0x000380, 0x000385],
+ [0x0003AC, 0x0003CE],
+ [0x0003D0, 0x0003D1],
+ [0x0003D5, 0x0003D7],
+ [0x0003EF, 0x0003F3],
+ [0x0003F5, 0x0003F6],
+ [0x0003FB, 0x0003FC],
+ [0x000430, 0x00045F],
+ [0x000481, 0x000489],
+ [0x0004CE, 0x0004CF],
+ [0x00052F, 0x000530],
+ [0x000557, 0x00109F],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x00139F],
+ [0x0013F6, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC0, 0x001DFF],
+ [0x001E95, 0x001E9D],
+ [0x001EFF, 0x001F07],
+ [0x001F10, 0x001F17],
+ [0x001F1E, 0x001F27],
+ [0x001F30, 0x001F37],
+ [0x001F40, 0x001F47],
+ [0x001F4E, 0x001F58],
+ [0x001F60, 0x001F67],
+ [0x001F70, 0x001FB7],
+ [0x001FBC, 0x001FC7],
+ [0x001FCC, 0x001FD7],
+ [0x001FDC, 0x001FE7],
+ [0x001FED, 0x001FF7],
+ [0x001FFC, 0x002101],
+ [0x002103, 0x002106],
+ [0x002108, 0x00210A],
+ [0x00210E, 0x00210F],
+ [0x002113, 0x002114],
+ [0x002116, 0x002118],
+ [0x00211E, 0x002123],
+ [0x00212E, 0x00212F],
+ [0x002134, 0x00213D],
+ [0x002140, 0x002144],
+ [0x002146, 0x00215F],
+ [0x002170, 0x002182],
+ [0x002184, 0x0024B5],
+ [0x0024D0, 0x002BFF],
+ [0x002C30, 0x002C5F],
+ [0x002C65, 0x002C66],
+ [0x002C73, 0x002C74],
+ [0x002C76, 0x002C7D],
+ [0x002CE3, 0x002CEA],
+ [0x002CEE, 0x002CF1],
+ [0x002CF3, 0x00A63F],
+ [0x00A66D, 0x00A67F],
+ [0x00A69B, 0x00A721],
+ [0x00A72F, 0x00A731],
+ [0x00A76F, 0x00A778],
+ [0x00A787, 0x00A78A],
+ [0x00A78E, 0x00A78F],
+ [0x00A793, 0x00A795],
+ [0x00A7CA, 0x00A7CF],
+ [0x00A7D1, 0x00A7D5],
+ [0x00A7D9, 0x00A7F4],
+ [0x00A7F6, 0x00DBFF],
+ [0x00E000, 0x00FF20],
+ [0x00FF3B, 0x0103FF],
+ [0x010428, 0x0104AF],
+ [0x0104D4, 0x01056F],
+ [0x010596, 0x010C7F],
+ [0x010CB3, 0x01189F],
+ [0x0118C0, 0x016E3F],
+ [0x016E60, 0x01D3FF],
+ [0x01D41A, 0x01D433],
+ [0x01D44E, 0x01D467],
+ [0x01D482, 0x01D49B],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D4B6, 0x01D4CF],
+ [0x01D4EA, 0x01D503],
+ [0x01D50B, 0x01D50C],
+ [0x01D51D, 0x01D537],
+ [0x01D547, 0x01D549],
+ [0x01D551, 0x01D56B],
+ [0x01D586, 0x01D59F],
+ [0x01D5BA, 0x01D5D3],
+ [0x01D5EE, 0x01D607],
+ [0x01D622, 0x01D63B],
+ [0x01D656, 0x01D66F],
+ [0x01D68A, 0x01D6A7],
+ [0x01D6C1, 0x01D6E1],
+ [0x01D6FB, 0x01D71B],
+ [0x01D735, 0x01D755],
+ [0x01D76F, 0x01D78F],
+ [0x01D7A9, 0x01D7C9],
+ [0x01D7CB, 0x01E8FF],
+ [0x01E922, 0x01F12F],
+ [0x01F14A, 0x01F14F],
+ [0x01F16A, 0x01F16F],
+ [0x01F18A, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Uppercase}+$/u,
+ nonMatchSymbols,
+ "\\P{Uppercase}"
+);
+testPropertyEscapes(
+ /^\P{Upper}+$/u,
+ nonMatchSymbols,
+ "\\P{Upper}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Variation_Selector.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Variation_Selector.js
new file mode 100644
index 0000000000..fe375ad3e4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/Variation_Selector.js
@@ -0,0 +1,61 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Variation_Selector`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00180F
+ ],
+ ranges: [
+ [0x00180B, 0x00180D],
+ [0x00FE00, 0x00FE0F],
+ [0x0E0100, 0x0E01EF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{Variation_Selector}+$/u,
+ matchSymbols,
+ "\\p{Variation_Selector}"
+);
+testPropertyEscapes(
+ /^\p{VS}+$/u,
+ matchSymbols,
+ "\\p{VS}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x00180E
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00180A],
+ [0x001810, 0x00DBFF],
+ [0x00E000, 0x00FDFF],
+ [0x00FE10, 0x0E00FF],
+ [0x0E01F0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{Variation_Selector}+$/u,
+ nonMatchSymbols,
+ "\\P{Variation_Selector}"
+);
+testPropertyEscapes(
+ /^\P{VS}+$/u,
+ nonMatchSymbols,
+ "\\P{VS}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/White_Space.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/White_Space.js
new file mode 100644
index 0000000000..7399f4c148
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/White_Space.js
@@ -0,0 +1,72 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `White_Space`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x000020,
+ 0x000085,
+ 0x0000A0,
+ 0x001680,
+ 0x00202F,
+ 0x00205F,
+ 0x003000
+ ],
+ ranges: [
+ [0x000009, 0x00000D],
+ [0x002000, 0x00200A],
+ [0x002028, 0x002029]
+ ]
+});
+testPropertyEscapes(
+ /^\p{White_Space}+$/u,
+ matchSymbols,
+ "\\p{White_Space}"
+);
+testPropertyEscapes(
+ /^\p{space}+$/u,
+ matchSymbols,
+ "\\p{space}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000008],
+ [0x00000E, 0x00001F],
+ [0x000021, 0x000084],
+ [0x000086, 0x00009F],
+ [0x0000A1, 0x00167F],
+ [0x001681, 0x001FFF],
+ [0x00200B, 0x002027],
+ [0x00202A, 0x00202E],
+ [0x002030, 0x00205E],
+ [0x002060, 0x002FFF],
+ [0x003001, 0x00DBFF],
+ [0x00E000, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{White_Space}+$/u,
+ nonMatchSymbols,
+ "\\P{White_Space}"
+);
+testPropertyEscapes(
+ /^\P{space}+$/u,
+ nonMatchSymbols,
+ "\\P{space}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/XID_Continue.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/XID_Continue.js
new file mode 100644
index 0000000000..829bc94b9b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/XID_Continue.js
@@ -0,0 +1,1603 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `XID_Continue`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x00005F,
+ 0x0000AA,
+ 0x0000B5,
+ 0x0000B7,
+ 0x0000BA,
+ 0x0002EC,
+ 0x0002EE,
+ 0x00037F,
+ 0x00038C,
+ 0x000559,
+ 0x0005BF,
+ 0x0005C7,
+ 0x0006FF,
+ 0x0007FA,
+ 0x0007FD,
+ 0x0009B2,
+ 0x0009D7,
+ 0x0009FC,
+ 0x0009FE,
+ 0x000A3C,
+ 0x000A51,
+ 0x000A5E,
+ 0x000AD0,
+ 0x000B71,
+ 0x000B9C,
+ 0x000BD0,
+ 0x000BD7,
+ 0x000C5D,
+ 0x000DBD,
+ 0x000DCA,
+ 0x000DD6,
+ 0x000E84,
+ 0x000EA5,
+ 0x000EC6,
+ 0x000F00,
+ 0x000F35,
+ 0x000F37,
+ 0x000F39,
+ 0x000FC6,
+ 0x0010C7,
+ 0x0010CD,
+ 0x001258,
+ 0x0012C0,
+ 0x0017D7,
+ 0x001AA7,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x001FBE,
+ 0x002054,
+ 0x002071,
+ 0x00207F,
+ 0x0020E1,
+ 0x002102,
+ 0x002107,
+ 0x002115,
+ 0x002124,
+ 0x002126,
+ 0x002128,
+ 0x00214E,
+ 0x002D27,
+ 0x002D2D,
+ 0x002D6F,
+ 0x00A7D3,
+ 0x00A82C,
+ 0x00A8FB,
+ 0x00FB3E,
+ 0x00FE71,
+ 0x00FE73,
+ 0x00FE77,
+ 0x00FE79,
+ 0x00FE7B,
+ 0x00FE7D,
+ 0x00FF3F,
+ 0x0101FD,
+ 0x0102E0,
+ 0x010808,
+ 0x01083C,
+ 0x010A3F,
+ 0x010F27,
+ 0x0110C2,
+ 0x011176,
+ 0x0111DC,
+ 0x011288,
+ 0x011350,
+ 0x011357,
+ 0x0114C7,
+ 0x011644,
+ 0x011909,
+ 0x011A47,
+ 0x011A9D,
+ 0x011D3A,
+ 0x011FB0,
+ 0x01B132,
+ 0x01B155,
+ 0x01D4A2,
+ 0x01D4BB,
+ 0x01D546,
+ 0x01DA75,
+ 0x01DA84,
+ 0x01E08F,
+ 0x01E14E,
+ 0x01EE24,
+ 0x01EE27,
+ 0x01EE39,
+ 0x01EE3B,
+ 0x01EE42,
+ 0x01EE47,
+ 0x01EE49,
+ 0x01EE4B,
+ 0x01EE54,
+ 0x01EE57,
+ 0x01EE59,
+ 0x01EE5B,
+ 0x01EE5D,
+ 0x01EE5F,
+ 0x01EE64,
+ 0x01EE7E
+ ],
+ ranges: [
+ [0x000030, 0x000039],
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000F6],
+ [0x0000F8, 0x0002C1],
+ [0x0002C6, 0x0002D1],
+ [0x0002E0, 0x0002E4],
+ [0x000300, 0x000374],
+ [0x000376, 0x000377],
+ [0x00037B, 0x00037D],
+ [0x000386, 0x00038A],
+ [0x00038E, 0x0003A1],
+ [0x0003A3, 0x0003F5],
+ [0x0003F7, 0x000481],
+ [0x000483, 0x000487],
+ [0x00048A, 0x00052F],
+ [0x000531, 0x000556],
+ [0x000560, 0x000588],
+ [0x000591, 0x0005BD],
+ [0x0005C1, 0x0005C2],
+ [0x0005C4, 0x0005C5],
+ [0x0005D0, 0x0005EA],
+ [0x0005EF, 0x0005F2],
+ [0x000610, 0x00061A],
+ [0x000620, 0x000669],
+ [0x00066E, 0x0006D3],
+ [0x0006D5, 0x0006DC],
+ [0x0006DF, 0x0006E8],
+ [0x0006EA, 0x0006FC],
+ [0x000710, 0x00074A],
+ [0x00074D, 0x0007B1],
+ [0x0007C0, 0x0007F5],
+ [0x000800, 0x00082D],
+ [0x000840, 0x00085B],
+ [0x000860, 0x00086A],
+ [0x000870, 0x000887],
+ [0x000889, 0x00088E],
+ [0x000898, 0x0008E1],
+ [0x0008E3, 0x000963],
+ [0x000966, 0x00096F],
+ [0x000971, 0x000983],
+ [0x000985, 0x00098C],
+ [0x00098F, 0x000990],
+ [0x000993, 0x0009A8],
+ [0x0009AA, 0x0009B0],
+ [0x0009B6, 0x0009B9],
+ [0x0009BC, 0x0009C4],
+ [0x0009C7, 0x0009C8],
+ [0x0009CB, 0x0009CE],
+ [0x0009DC, 0x0009DD],
+ [0x0009DF, 0x0009E3],
+ [0x0009E6, 0x0009F1],
+ [0x000A01, 0x000A03],
+ [0x000A05, 0x000A0A],
+ [0x000A0F, 0x000A10],
+ [0x000A13, 0x000A28],
+ [0x000A2A, 0x000A30],
+ [0x000A32, 0x000A33],
+ [0x000A35, 0x000A36],
+ [0x000A38, 0x000A39],
+ [0x000A3E, 0x000A42],
+ [0x000A47, 0x000A48],
+ [0x000A4B, 0x000A4D],
+ [0x000A59, 0x000A5C],
+ [0x000A66, 0x000A75],
+ [0x000A81, 0x000A83],
+ [0x000A85, 0x000A8D],
+ [0x000A8F, 0x000A91],
+ [0x000A93, 0x000AA8],
+ [0x000AAA, 0x000AB0],
+ [0x000AB2, 0x000AB3],
+ [0x000AB5, 0x000AB9],
+ [0x000ABC, 0x000AC5],
+ [0x000AC7, 0x000AC9],
+ [0x000ACB, 0x000ACD],
+ [0x000AE0, 0x000AE3],
+ [0x000AE6, 0x000AEF],
+ [0x000AF9, 0x000AFF],
+ [0x000B01, 0x000B03],
+ [0x000B05, 0x000B0C],
+ [0x000B0F, 0x000B10],
+ [0x000B13, 0x000B28],
+ [0x000B2A, 0x000B30],
+ [0x000B32, 0x000B33],
+ [0x000B35, 0x000B39],
+ [0x000B3C, 0x000B44],
+ [0x000B47, 0x000B48],
+ [0x000B4B, 0x000B4D],
+ [0x000B55, 0x000B57],
+ [0x000B5C, 0x000B5D],
+ [0x000B5F, 0x000B63],
+ [0x000B66, 0x000B6F],
+ [0x000B82, 0x000B83],
+ [0x000B85, 0x000B8A],
+ [0x000B8E, 0x000B90],
+ [0x000B92, 0x000B95],
+ [0x000B99, 0x000B9A],
+ [0x000B9E, 0x000B9F],
+ [0x000BA3, 0x000BA4],
+ [0x000BA8, 0x000BAA],
+ [0x000BAE, 0x000BB9],
+ [0x000BBE, 0x000BC2],
+ [0x000BC6, 0x000BC8],
+ [0x000BCA, 0x000BCD],
+ [0x000BE6, 0x000BEF],
+ [0x000C00, 0x000C0C],
+ [0x000C0E, 0x000C10],
+ [0x000C12, 0x000C28],
+ [0x000C2A, 0x000C39],
+ [0x000C3C, 0x000C44],
+ [0x000C46, 0x000C48],
+ [0x000C4A, 0x000C4D],
+ [0x000C55, 0x000C56],
+ [0x000C58, 0x000C5A],
+ [0x000C60, 0x000C63],
+ [0x000C66, 0x000C6F],
+ [0x000C80, 0x000C83],
+ [0x000C85, 0x000C8C],
+ [0x000C8E, 0x000C90],
+ [0x000C92, 0x000CA8],
+ [0x000CAA, 0x000CB3],
+ [0x000CB5, 0x000CB9],
+ [0x000CBC, 0x000CC4],
+ [0x000CC6, 0x000CC8],
+ [0x000CCA, 0x000CCD],
+ [0x000CD5, 0x000CD6],
+ [0x000CDD, 0x000CDE],
+ [0x000CE0, 0x000CE3],
+ [0x000CE6, 0x000CEF],
+ [0x000CF1, 0x000CF3],
+ [0x000D00, 0x000D0C],
+ [0x000D0E, 0x000D10],
+ [0x000D12, 0x000D44],
+ [0x000D46, 0x000D48],
+ [0x000D4A, 0x000D4E],
+ [0x000D54, 0x000D57],
+ [0x000D5F, 0x000D63],
+ [0x000D66, 0x000D6F],
+ [0x000D7A, 0x000D7F],
+ [0x000D81, 0x000D83],
+ [0x000D85, 0x000D96],
+ [0x000D9A, 0x000DB1],
+ [0x000DB3, 0x000DBB],
+ [0x000DC0, 0x000DC6],
+ [0x000DCF, 0x000DD4],
+ [0x000DD8, 0x000DDF],
+ [0x000DE6, 0x000DEF],
+ [0x000DF2, 0x000DF3],
+ [0x000E01, 0x000E3A],
+ [0x000E40, 0x000E4E],
+ [0x000E50, 0x000E59],
+ [0x000E81, 0x000E82],
+ [0x000E86, 0x000E8A],
+ [0x000E8C, 0x000EA3],
+ [0x000EA7, 0x000EBD],
+ [0x000EC0, 0x000EC4],
+ [0x000EC8, 0x000ECE],
+ [0x000ED0, 0x000ED9],
+ [0x000EDC, 0x000EDF],
+ [0x000F18, 0x000F19],
+ [0x000F20, 0x000F29],
+ [0x000F3E, 0x000F47],
+ [0x000F49, 0x000F6C],
+ [0x000F71, 0x000F84],
+ [0x000F86, 0x000F97],
+ [0x000F99, 0x000FBC],
+ [0x001000, 0x001049],
+ [0x001050, 0x00109D],
+ [0x0010A0, 0x0010C5],
+ [0x0010D0, 0x0010FA],
+ [0x0010FC, 0x001248],
+ [0x00124A, 0x00124D],
+ [0x001250, 0x001256],
+ [0x00125A, 0x00125D],
+ [0x001260, 0x001288],
+ [0x00128A, 0x00128D],
+ [0x001290, 0x0012B0],
+ [0x0012B2, 0x0012B5],
+ [0x0012B8, 0x0012BE],
+ [0x0012C2, 0x0012C5],
+ [0x0012C8, 0x0012D6],
+ [0x0012D8, 0x001310],
+ [0x001312, 0x001315],
+ [0x001318, 0x00135A],
+ [0x00135D, 0x00135F],
+ [0x001369, 0x001371],
+ [0x001380, 0x00138F],
+ [0x0013A0, 0x0013F5],
+ [0x0013F8, 0x0013FD],
+ [0x001401, 0x00166C],
+ [0x00166F, 0x00167F],
+ [0x001681, 0x00169A],
+ [0x0016A0, 0x0016EA],
+ [0x0016EE, 0x0016F8],
+ [0x001700, 0x001715],
+ [0x00171F, 0x001734],
+ [0x001740, 0x001753],
+ [0x001760, 0x00176C],
+ [0x00176E, 0x001770],
+ [0x001772, 0x001773],
+ [0x001780, 0x0017D3],
+ [0x0017DC, 0x0017DD],
+ [0x0017E0, 0x0017E9],
+ [0x00180B, 0x00180D],
+ [0x00180F, 0x001819],
+ [0x001820, 0x001878],
+ [0x001880, 0x0018AA],
+ [0x0018B0, 0x0018F5],
+ [0x001900, 0x00191E],
+ [0x001920, 0x00192B],
+ [0x001930, 0x00193B],
+ [0x001946, 0x00196D],
+ [0x001970, 0x001974],
+ [0x001980, 0x0019AB],
+ [0x0019B0, 0x0019C9],
+ [0x0019D0, 0x0019DA],
+ [0x001A00, 0x001A1B],
+ [0x001A20, 0x001A5E],
+ [0x001A60, 0x001A7C],
+ [0x001A7F, 0x001A89],
+ [0x001A90, 0x001A99],
+ [0x001AB0, 0x001ABD],
+ [0x001ABF, 0x001ACE],
+ [0x001B00, 0x001B4C],
+ [0x001B50, 0x001B59],
+ [0x001B6B, 0x001B73],
+ [0x001B80, 0x001BF3],
+ [0x001C00, 0x001C37],
+ [0x001C40, 0x001C49],
+ [0x001C4D, 0x001C7D],
+ [0x001C80, 0x001C88],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CBF],
+ [0x001CD0, 0x001CD2],
+ [0x001CD4, 0x001CFA],
+ [0x001D00, 0x001F15],
+ [0x001F18, 0x001F1D],
+ [0x001F20, 0x001F45],
+ [0x001F48, 0x001F4D],
+ [0x001F50, 0x001F57],
+ [0x001F5F, 0x001F7D],
+ [0x001F80, 0x001FB4],
+ [0x001FB6, 0x001FBC],
+ [0x001FC2, 0x001FC4],
+ [0x001FC6, 0x001FCC],
+ [0x001FD0, 0x001FD3],
+ [0x001FD6, 0x001FDB],
+ [0x001FE0, 0x001FEC],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FFC],
+ [0x00203F, 0x002040],
+ [0x002090, 0x00209C],
+ [0x0020D0, 0x0020DC],
+ [0x0020E5, 0x0020F0],
+ [0x00210A, 0x002113],
+ [0x002118, 0x00211D],
+ [0x00212A, 0x002139],
+ [0x00213C, 0x00213F],
+ [0x002145, 0x002149],
+ [0x002160, 0x002188],
+ [0x002C00, 0x002CE4],
+ [0x002CEB, 0x002CF3],
+ [0x002D00, 0x002D25],
+ [0x002D30, 0x002D67],
+ [0x002D7F, 0x002D96],
+ [0x002DA0, 0x002DA6],
+ [0x002DA8, 0x002DAE],
+ [0x002DB0, 0x002DB6],
+ [0x002DB8, 0x002DBE],
+ [0x002DC0, 0x002DC6],
+ [0x002DC8, 0x002DCE],
+ [0x002DD0, 0x002DD6],
+ [0x002DD8, 0x002DDE],
+ [0x002DE0, 0x002DFF],
+ [0x003005, 0x003007],
+ [0x003021, 0x00302F],
+ [0x003031, 0x003035],
+ [0x003038, 0x00303C],
+ [0x003041, 0x003096],
+ [0x003099, 0x00309A],
+ [0x00309D, 0x00309F],
+ [0x0030A1, 0x0030FA],
+ [0x0030FC, 0x0030FF],
+ [0x003105, 0x00312F],
+ [0x003131, 0x00318E],
+ [0x0031A0, 0x0031BF],
+ [0x0031F0, 0x0031FF],
+ [0x003400, 0x004DBF],
+ [0x004E00, 0x00A48C],
+ [0x00A4D0, 0x00A4FD],
+ [0x00A500, 0x00A60C],
+ [0x00A610, 0x00A62B],
+ [0x00A640, 0x00A66F],
+ [0x00A674, 0x00A67D],
+ [0x00A67F, 0x00A6F1],
+ [0x00A717, 0x00A71F],
+ [0x00A722, 0x00A788],
+ [0x00A78B, 0x00A7CA],
+ [0x00A7D0, 0x00A7D1],
+ [0x00A7D5, 0x00A7D9],
+ [0x00A7F2, 0x00A827],
+ [0x00A840, 0x00A873],
+ [0x00A880, 0x00A8C5],
+ [0x00A8D0, 0x00A8D9],
+ [0x00A8E0, 0x00A8F7],
+ [0x00A8FD, 0x00A92D],
+ [0x00A930, 0x00A953],
+ [0x00A960, 0x00A97C],
+ [0x00A980, 0x00A9C0],
+ [0x00A9CF, 0x00A9D9],
+ [0x00A9E0, 0x00A9FE],
+ [0x00AA00, 0x00AA36],
+ [0x00AA40, 0x00AA4D],
+ [0x00AA50, 0x00AA59],
+ [0x00AA60, 0x00AA76],
+ [0x00AA7A, 0x00AAC2],
+ [0x00AADB, 0x00AADD],
+ [0x00AAE0, 0x00AAEF],
+ [0x00AAF2, 0x00AAF6],
+ [0x00AB01, 0x00AB06],
+ [0x00AB09, 0x00AB0E],
+ [0x00AB11, 0x00AB16],
+ [0x00AB20, 0x00AB26],
+ [0x00AB28, 0x00AB2E],
+ [0x00AB30, 0x00AB5A],
+ [0x00AB5C, 0x00AB69],
+ [0x00AB70, 0x00ABEA],
+ [0x00ABEC, 0x00ABED],
+ [0x00ABF0, 0x00ABF9],
+ [0x00AC00, 0x00D7A3],
+ [0x00D7B0, 0x00D7C6],
+ [0x00D7CB, 0x00D7FB],
+ [0x00F900, 0x00FA6D],
+ [0x00FA70, 0x00FAD9],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FB1D, 0x00FB28],
+ [0x00FB2A, 0x00FB36],
+ [0x00FB38, 0x00FB3C],
+ [0x00FB40, 0x00FB41],
+ [0x00FB43, 0x00FB44],
+ [0x00FB46, 0x00FBB1],
+ [0x00FBD3, 0x00FC5D],
+ [0x00FC64, 0x00FD3D],
+ [0x00FD50, 0x00FD8F],
+ [0x00FD92, 0x00FDC7],
+ [0x00FDF0, 0x00FDF9],
+ [0x00FE00, 0x00FE0F],
+ [0x00FE20, 0x00FE2F],
+ [0x00FE33, 0x00FE34],
+ [0x00FE4D, 0x00FE4F],
+ [0x00FE7F, 0x00FEFC],
+ [0x00FF10, 0x00FF19],
+ [0x00FF21, 0x00FF3A],
+ [0x00FF41, 0x00FF5A],
+ [0x00FF66, 0x00FFBE],
+ [0x00FFC2, 0x00FFC7],
+ [0x00FFCA, 0x00FFCF],
+ [0x00FFD2, 0x00FFD7],
+ [0x00FFDA, 0x00FFDC],
+ [0x010000, 0x01000B],
+ [0x01000D, 0x010026],
+ [0x010028, 0x01003A],
+ [0x01003C, 0x01003D],
+ [0x01003F, 0x01004D],
+ [0x010050, 0x01005D],
+ [0x010080, 0x0100FA],
+ [0x010140, 0x010174],
+ [0x010280, 0x01029C],
+ [0x0102A0, 0x0102D0],
+ [0x010300, 0x01031F],
+ [0x01032D, 0x01034A],
+ [0x010350, 0x01037A],
+ [0x010380, 0x01039D],
+ [0x0103A0, 0x0103C3],
+ [0x0103C8, 0x0103CF],
+ [0x0103D1, 0x0103D5],
+ [0x010400, 0x01049D],
+ [0x0104A0, 0x0104A9],
+ [0x0104B0, 0x0104D3],
+ [0x0104D8, 0x0104FB],
+ [0x010500, 0x010527],
+ [0x010530, 0x010563],
+ [0x010570, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC],
+ [0x010600, 0x010736],
+ [0x010740, 0x010755],
+ [0x010760, 0x010767],
+ [0x010780, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x010800, 0x010805],
+ [0x01080A, 0x010835],
+ [0x010837, 0x010838],
+ [0x01083F, 0x010855],
+ [0x010860, 0x010876],
+ [0x010880, 0x01089E],
+ [0x0108E0, 0x0108F2],
+ [0x0108F4, 0x0108F5],
+ [0x010900, 0x010915],
+ [0x010920, 0x010939],
+ [0x010980, 0x0109B7],
+ [0x0109BE, 0x0109BF],
+ [0x010A00, 0x010A03],
+ [0x010A05, 0x010A06],
+ [0x010A0C, 0x010A13],
+ [0x010A15, 0x010A17],
+ [0x010A19, 0x010A35],
+ [0x010A38, 0x010A3A],
+ [0x010A60, 0x010A7C],
+ [0x010A80, 0x010A9C],
+ [0x010AC0, 0x010AC7],
+ [0x010AC9, 0x010AE6],
+ [0x010B00, 0x010B35],
+ [0x010B40, 0x010B55],
+ [0x010B60, 0x010B72],
+ [0x010B80, 0x010B91],
+ [0x010C00, 0x010C48],
+ [0x010C80, 0x010CB2],
+ [0x010CC0, 0x010CF2],
+ [0x010D00, 0x010D27],
+ [0x010D30, 0x010D39],
+ [0x010E80, 0x010EA9],
+ [0x010EAB, 0x010EAC],
+ [0x010EB0, 0x010EB1],
+ [0x010EFD, 0x010F1C],
+ [0x010F30, 0x010F50],
+ [0x010F70, 0x010F85],
+ [0x010FB0, 0x010FC4],
+ [0x010FE0, 0x010FF6],
+ [0x011000, 0x011046],
+ [0x011066, 0x011075],
+ [0x01107F, 0x0110BA],
+ [0x0110D0, 0x0110E8],
+ [0x0110F0, 0x0110F9],
+ [0x011100, 0x011134],
+ [0x011136, 0x01113F],
+ [0x011144, 0x011147],
+ [0x011150, 0x011173],
+ [0x011180, 0x0111C4],
+ [0x0111C9, 0x0111CC],
+ [0x0111CE, 0x0111DA],
+ [0x011200, 0x011211],
+ [0x011213, 0x011237],
+ [0x01123E, 0x011241],
+ [0x011280, 0x011286],
+ [0x01128A, 0x01128D],
+ [0x01128F, 0x01129D],
+ [0x01129F, 0x0112A8],
+ [0x0112B0, 0x0112EA],
+ [0x0112F0, 0x0112F9],
+ [0x011300, 0x011303],
+ [0x011305, 0x01130C],
+ [0x01130F, 0x011310],
+ [0x011313, 0x011328],
+ [0x01132A, 0x011330],
+ [0x011332, 0x011333],
+ [0x011335, 0x011339],
+ [0x01133B, 0x011344],
+ [0x011347, 0x011348],
+ [0x01134B, 0x01134D],
+ [0x01135D, 0x011363],
+ [0x011366, 0x01136C],
+ [0x011370, 0x011374],
+ [0x011400, 0x01144A],
+ [0x011450, 0x011459],
+ [0x01145E, 0x011461],
+ [0x011480, 0x0114C5],
+ [0x0114D0, 0x0114D9],
+ [0x011580, 0x0115B5],
+ [0x0115B8, 0x0115C0],
+ [0x0115D8, 0x0115DD],
+ [0x011600, 0x011640],
+ [0x011650, 0x011659],
+ [0x011680, 0x0116B8],
+ [0x0116C0, 0x0116C9],
+ [0x011700, 0x01171A],
+ [0x01171D, 0x01172B],
+ [0x011730, 0x011739],
+ [0x011740, 0x011746],
+ [0x011800, 0x01183A],
+ [0x0118A0, 0x0118E9],
+ [0x0118FF, 0x011906],
+ [0x01190C, 0x011913],
+ [0x011915, 0x011916],
+ [0x011918, 0x011935],
+ [0x011937, 0x011938],
+ [0x01193B, 0x011943],
+ [0x011950, 0x011959],
+ [0x0119A0, 0x0119A7],
+ [0x0119AA, 0x0119D7],
+ [0x0119DA, 0x0119E1],
+ [0x0119E3, 0x0119E4],
+ [0x011A00, 0x011A3E],
+ [0x011A50, 0x011A99],
+ [0x011AB0, 0x011AF8],
+ [0x011C00, 0x011C08],
+ [0x011C0A, 0x011C36],
+ [0x011C38, 0x011C40],
+ [0x011C50, 0x011C59],
+ [0x011C72, 0x011C8F],
+ [0x011C92, 0x011CA7],
+ [0x011CA9, 0x011CB6],
+ [0x011D00, 0x011D06],
+ [0x011D08, 0x011D09],
+ [0x011D0B, 0x011D36],
+ [0x011D3C, 0x011D3D],
+ [0x011D3F, 0x011D47],
+ [0x011D50, 0x011D59],
+ [0x011D60, 0x011D65],
+ [0x011D67, 0x011D68],
+ [0x011D6A, 0x011D8E],
+ [0x011D90, 0x011D91],
+ [0x011D93, 0x011D98],
+ [0x011DA0, 0x011DA9],
+ [0x011EE0, 0x011EF6],
+ [0x011F00, 0x011F10],
+ [0x011F12, 0x011F3A],
+ [0x011F3E, 0x011F42],
+ [0x011F50, 0x011F59],
+ [0x012000, 0x012399],
+ [0x012400, 0x01246E],
+ [0x012480, 0x012543],
+ [0x012F90, 0x012FF0],
+ [0x013000, 0x01342F],
+ [0x013440, 0x013455],
+ [0x014400, 0x014646],
+ [0x016800, 0x016A38],
+ [0x016A40, 0x016A5E],
+ [0x016A60, 0x016A69],
+ [0x016A70, 0x016ABE],
+ [0x016AC0, 0x016AC9],
+ [0x016AD0, 0x016AED],
+ [0x016AF0, 0x016AF4],
+ [0x016B00, 0x016B36],
+ [0x016B40, 0x016B43],
+ [0x016B50, 0x016B59],
+ [0x016B63, 0x016B77],
+ [0x016B7D, 0x016B8F],
+ [0x016E40, 0x016E7F],
+ [0x016F00, 0x016F4A],
+ [0x016F4F, 0x016F87],
+ [0x016F8F, 0x016F9F],
+ [0x016FE0, 0x016FE1],
+ [0x016FE3, 0x016FE4],
+ [0x016FF0, 0x016FF1],
+ [0x017000, 0x0187F7],
+ [0x018800, 0x018CD5],
+ [0x018D00, 0x018D08],
+ [0x01AFF0, 0x01AFF3],
+ [0x01AFF5, 0x01AFFB],
+ [0x01AFFD, 0x01AFFE],
+ [0x01B000, 0x01B122],
+ [0x01B150, 0x01B152],
+ [0x01B164, 0x01B167],
+ [0x01B170, 0x01B2FB],
+ [0x01BC00, 0x01BC6A],
+ [0x01BC70, 0x01BC7C],
+ [0x01BC80, 0x01BC88],
+ [0x01BC90, 0x01BC99],
+ [0x01BC9D, 0x01BC9E],
+ [0x01CF00, 0x01CF2D],
+ [0x01CF30, 0x01CF46],
+ [0x01D165, 0x01D169],
+ [0x01D16D, 0x01D172],
+ [0x01D17B, 0x01D182],
+ [0x01D185, 0x01D18B],
+ [0x01D1AA, 0x01D1AD],
+ [0x01D242, 0x01D244],
+ [0x01D400, 0x01D454],
+ [0x01D456, 0x01D49C],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D51E, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D552, 0x01D6A5],
+ [0x01D6A8, 0x01D6C0],
+ [0x01D6C2, 0x01D6DA],
+ [0x01D6DC, 0x01D6FA],
+ [0x01D6FC, 0x01D714],
+ [0x01D716, 0x01D734],
+ [0x01D736, 0x01D74E],
+ [0x01D750, 0x01D76E],
+ [0x01D770, 0x01D788],
+ [0x01D78A, 0x01D7A8],
+ [0x01D7AA, 0x01D7C2],
+ [0x01D7C4, 0x01D7CB],
+ [0x01D7CE, 0x01D7FF],
+ [0x01DA00, 0x01DA36],
+ [0x01DA3B, 0x01DA6C],
+ [0x01DA9B, 0x01DA9F],
+ [0x01DAA1, 0x01DAAF],
+ [0x01DF00, 0x01DF1E],
+ [0x01DF25, 0x01DF2A],
+ [0x01E000, 0x01E006],
+ [0x01E008, 0x01E018],
+ [0x01E01B, 0x01E021],
+ [0x01E023, 0x01E024],
+ [0x01E026, 0x01E02A],
+ [0x01E030, 0x01E06D],
+ [0x01E100, 0x01E12C],
+ [0x01E130, 0x01E13D],
+ [0x01E140, 0x01E149],
+ [0x01E290, 0x01E2AE],
+ [0x01E2C0, 0x01E2F9],
+ [0x01E4D0, 0x01E4F9],
+ [0x01E7E0, 0x01E7E6],
+ [0x01E7E8, 0x01E7EB],
+ [0x01E7ED, 0x01E7EE],
+ [0x01E7F0, 0x01E7FE],
+ [0x01E800, 0x01E8C4],
+ [0x01E8D0, 0x01E8D6],
+ [0x01E900, 0x01E94B],
+ [0x01E950, 0x01E959],
+ [0x01EE00, 0x01EE03],
+ [0x01EE05, 0x01EE1F],
+ [0x01EE21, 0x01EE22],
+ [0x01EE29, 0x01EE32],
+ [0x01EE34, 0x01EE37],
+ [0x01EE4D, 0x01EE4F],
+ [0x01EE51, 0x01EE52],
+ [0x01EE61, 0x01EE62],
+ [0x01EE67, 0x01EE6A],
+ [0x01EE6C, 0x01EE72],
+ [0x01EE74, 0x01EE77],
+ [0x01EE79, 0x01EE7C],
+ [0x01EE80, 0x01EE89],
+ [0x01EE8B, 0x01EE9B],
+ [0x01EEA1, 0x01EEA3],
+ [0x01EEA5, 0x01EEA9],
+ [0x01EEAB, 0x01EEBB],
+ [0x01FBF0, 0x01FBF9],
+ [0x020000, 0x02A6DF],
+ [0x02A700, 0x02B739],
+ [0x02B740, 0x02B81D],
+ [0x02B820, 0x02CEA1],
+ [0x02CEB0, 0x02EBE0],
+ [0x02F800, 0x02FA1D],
+ [0x030000, 0x03134A],
+ [0x031350, 0x0323AF],
+ [0x0E0100, 0x0E01EF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{XID_Continue}+$/u,
+ matchSymbols,
+ "\\p{XID_Continue}"
+);
+testPropertyEscapes(
+ /^\p{XIDC}+$/u,
+ matchSymbols,
+ "\\p{XIDC}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x000060,
+ 0x0000B6,
+ 0x0000D7,
+ 0x0000F7,
+ 0x0002ED,
+ 0x000375,
+ 0x00037E,
+ 0x00038B,
+ 0x00038D,
+ 0x0003A2,
+ 0x0003F6,
+ 0x000482,
+ 0x000530,
+ 0x0005BE,
+ 0x0005C0,
+ 0x0005C3,
+ 0x0005C6,
+ 0x0006D4,
+ 0x0006E9,
+ 0x000888,
+ 0x0008E2,
+ 0x000970,
+ 0x000984,
+ 0x0009A9,
+ 0x0009B1,
+ 0x0009DE,
+ 0x0009FD,
+ 0x000A04,
+ 0x000A29,
+ 0x000A31,
+ 0x000A34,
+ 0x000A37,
+ 0x000A3D,
+ 0x000A5D,
+ 0x000A84,
+ 0x000A8E,
+ 0x000A92,
+ 0x000AA9,
+ 0x000AB1,
+ 0x000AB4,
+ 0x000AC6,
+ 0x000ACA,
+ 0x000B00,
+ 0x000B04,
+ 0x000B29,
+ 0x000B31,
+ 0x000B34,
+ 0x000B5E,
+ 0x000B70,
+ 0x000B84,
+ 0x000B91,
+ 0x000B9B,
+ 0x000B9D,
+ 0x000BC9,
+ 0x000C0D,
+ 0x000C11,
+ 0x000C29,
+ 0x000C45,
+ 0x000C49,
+ 0x000C57,
+ 0x000C84,
+ 0x000C8D,
+ 0x000C91,
+ 0x000CA9,
+ 0x000CB4,
+ 0x000CC5,
+ 0x000CC9,
+ 0x000CDF,
+ 0x000CF0,
+ 0x000D0D,
+ 0x000D11,
+ 0x000D45,
+ 0x000D49,
+ 0x000D80,
+ 0x000D84,
+ 0x000DB2,
+ 0x000DBC,
+ 0x000DD5,
+ 0x000DD7,
+ 0x000E4F,
+ 0x000E83,
+ 0x000E85,
+ 0x000E8B,
+ 0x000EA4,
+ 0x000EA6,
+ 0x000EC5,
+ 0x000EC7,
+ 0x000ECF,
+ 0x000F36,
+ 0x000F38,
+ 0x000F48,
+ 0x000F85,
+ 0x000F98,
+ 0x0010C6,
+ 0x0010FB,
+ 0x001249,
+ 0x001257,
+ 0x001259,
+ 0x001289,
+ 0x0012B1,
+ 0x0012BF,
+ 0x0012C1,
+ 0x0012D7,
+ 0x001311,
+ 0x001680,
+ 0x00176D,
+ 0x001771,
+ 0x00180E,
+ 0x00191F,
+ 0x001A5F,
+ 0x001ABE,
+ 0x001CD3,
+ 0x001F58,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x001FB5,
+ 0x001FBD,
+ 0x001FC5,
+ 0x001FF5,
+ 0x002114,
+ 0x002125,
+ 0x002127,
+ 0x002129,
+ 0x002D26,
+ 0x002DA7,
+ 0x002DAF,
+ 0x002DB7,
+ 0x002DBF,
+ 0x002DC7,
+ 0x002DCF,
+ 0x002DD7,
+ 0x002DDF,
+ 0x003030,
+ 0x0030A0,
+ 0x0030FB,
+ 0x003130,
+ 0x00A67E,
+ 0x00A7D2,
+ 0x00A7D4,
+ 0x00A8FC,
+ 0x00A9FF,
+ 0x00AB27,
+ 0x00AB2F,
+ 0x00AB5B,
+ 0x00ABEB,
+ 0x00FB29,
+ 0x00FB37,
+ 0x00FB3D,
+ 0x00FB3F,
+ 0x00FB42,
+ 0x00FB45,
+ 0x00FE72,
+ 0x00FE78,
+ 0x00FE7A,
+ 0x00FE7C,
+ 0x00FE7E,
+ 0x00FF40,
+ 0x01000C,
+ 0x010027,
+ 0x01003B,
+ 0x01003E,
+ 0x0103D0,
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x010596,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA,
+ 0x010786,
+ 0x0107B1,
+ 0x010809,
+ 0x010836,
+ 0x0108F3,
+ 0x010A04,
+ 0x010A14,
+ 0x010A18,
+ 0x010AC8,
+ 0x010EAA,
+ 0x011135,
+ 0x0111CD,
+ 0x0111DB,
+ 0x011212,
+ 0x011287,
+ 0x011289,
+ 0x01128E,
+ 0x01129E,
+ 0x011304,
+ 0x011329,
+ 0x011331,
+ 0x011334,
+ 0x01133A,
+ 0x0114C6,
+ 0x011914,
+ 0x011917,
+ 0x011936,
+ 0x0119E2,
+ 0x011C09,
+ 0x011C37,
+ 0x011CA8,
+ 0x011D07,
+ 0x011D0A,
+ 0x011D3B,
+ 0x011D3E,
+ 0x011D66,
+ 0x011D69,
+ 0x011D8F,
+ 0x011D92,
+ 0x011F11,
+ 0x016A5F,
+ 0x016ABF,
+ 0x016FE2,
+ 0x01AFF4,
+ 0x01AFFC,
+ 0x01AFFF,
+ 0x01D455,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D506,
+ 0x01D515,
+ 0x01D51D,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545,
+ 0x01D551,
+ 0x01D6C1,
+ 0x01D6DB,
+ 0x01D6FB,
+ 0x01D715,
+ 0x01D735,
+ 0x01D74F,
+ 0x01D76F,
+ 0x01D789,
+ 0x01D7A9,
+ 0x01D7C3,
+ 0x01DAA0,
+ 0x01E007,
+ 0x01E022,
+ 0x01E025,
+ 0x01E7E7,
+ 0x01E7EC,
+ 0x01E7EF,
+ 0x01E7FF,
+ 0x01EE04,
+ 0x01EE20,
+ 0x01EE23,
+ 0x01EE28,
+ 0x01EE33,
+ 0x01EE38,
+ 0x01EE3A,
+ 0x01EE48,
+ 0x01EE4A,
+ 0x01EE4C,
+ 0x01EE50,
+ 0x01EE53,
+ 0x01EE58,
+ 0x01EE5A,
+ 0x01EE5C,
+ 0x01EE5E,
+ 0x01EE60,
+ 0x01EE63,
+ 0x01EE6B,
+ 0x01EE73,
+ 0x01EE78,
+ 0x01EE7D,
+ 0x01EE7F,
+ 0x01EE8A,
+ 0x01EEA4,
+ 0x01EEAA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x00002F],
+ [0x00003A, 0x000040],
+ [0x00005B, 0x00005E],
+ [0x00007B, 0x0000A9],
+ [0x0000AB, 0x0000B4],
+ [0x0000B8, 0x0000B9],
+ [0x0000BB, 0x0000BF],
+ [0x0002C2, 0x0002C5],
+ [0x0002D2, 0x0002DF],
+ [0x0002E5, 0x0002EB],
+ [0x0002EF, 0x0002FF],
+ [0x000378, 0x00037A],
+ [0x000380, 0x000385],
+ [0x000488, 0x000489],
+ [0x000557, 0x000558],
+ [0x00055A, 0x00055F],
+ [0x000589, 0x000590],
+ [0x0005C8, 0x0005CF],
+ [0x0005EB, 0x0005EE],
+ [0x0005F3, 0x00060F],
+ [0x00061B, 0x00061F],
+ [0x00066A, 0x00066D],
+ [0x0006DD, 0x0006DE],
+ [0x0006FD, 0x0006FE],
+ [0x000700, 0x00070F],
+ [0x00074B, 0x00074C],
+ [0x0007B2, 0x0007BF],
+ [0x0007F6, 0x0007F9],
+ [0x0007FB, 0x0007FC],
+ [0x0007FE, 0x0007FF],
+ [0x00082E, 0x00083F],
+ [0x00085C, 0x00085F],
+ [0x00086B, 0x00086F],
+ [0x00088F, 0x000897],
+ [0x000964, 0x000965],
+ [0x00098D, 0x00098E],
+ [0x000991, 0x000992],
+ [0x0009B3, 0x0009B5],
+ [0x0009BA, 0x0009BB],
+ [0x0009C5, 0x0009C6],
+ [0x0009C9, 0x0009CA],
+ [0x0009CF, 0x0009D6],
+ [0x0009D8, 0x0009DB],
+ [0x0009E4, 0x0009E5],
+ [0x0009F2, 0x0009FB],
+ [0x0009FF, 0x000A00],
+ [0x000A0B, 0x000A0E],
+ [0x000A11, 0x000A12],
+ [0x000A3A, 0x000A3B],
+ [0x000A43, 0x000A46],
+ [0x000A49, 0x000A4A],
+ [0x000A4E, 0x000A50],
+ [0x000A52, 0x000A58],
+ [0x000A5F, 0x000A65],
+ [0x000A76, 0x000A80],
+ [0x000ABA, 0x000ABB],
+ [0x000ACE, 0x000ACF],
+ [0x000AD1, 0x000ADF],
+ [0x000AE4, 0x000AE5],
+ [0x000AF0, 0x000AF8],
+ [0x000B0D, 0x000B0E],
+ [0x000B11, 0x000B12],
+ [0x000B3A, 0x000B3B],
+ [0x000B45, 0x000B46],
+ [0x000B49, 0x000B4A],
+ [0x000B4E, 0x000B54],
+ [0x000B58, 0x000B5B],
+ [0x000B64, 0x000B65],
+ [0x000B72, 0x000B81],
+ [0x000B8B, 0x000B8D],
+ [0x000B96, 0x000B98],
+ [0x000BA0, 0x000BA2],
+ [0x000BA5, 0x000BA7],
+ [0x000BAB, 0x000BAD],
+ [0x000BBA, 0x000BBD],
+ [0x000BC3, 0x000BC5],
+ [0x000BCE, 0x000BCF],
+ [0x000BD1, 0x000BD6],
+ [0x000BD8, 0x000BE5],
+ [0x000BF0, 0x000BFF],
+ [0x000C3A, 0x000C3B],
+ [0x000C4E, 0x000C54],
+ [0x000C5B, 0x000C5C],
+ [0x000C5E, 0x000C5F],
+ [0x000C64, 0x000C65],
+ [0x000C70, 0x000C7F],
+ [0x000CBA, 0x000CBB],
+ [0x000CCE, 0x000CD4],
+ [0x000CD7, 0x000CDC],
+ [0x000CE4, 0x000CE5],
+ [0x000CF4, 0x000CFF],
+ [0x000D4F, 0x000D53],
+ [0x000D58, 0x000D5E],
+ [0x000D64, 0x000D65],
+ [0x000D70, 0x000D79],
+ [0x000D97, 0x000D99],
+ [0x000DBE, 0x000DBF],
+ [0x000DC7, 0x000DC9],
+ [0x000DCB, 0x000DCE],
+ [0x000DE0, 0x000DE5],
+ [0x000DF0, 0x000DF1],
+ [0x000DF4, 0x000E00],
+ [0x000E3B, 0x000E3F],
+ [0x000E5A, 0x000E80],
+ [0x000EBE, 0x000EBF],
+ [0x000EDA, 0x000EDB],
+ [0x000EE0, 0x000EFF],
+ [0x000F01, 0x000F17],
+ [0x000F1A, 0x000F1F],
+ [0x000F2A, 0x000F34],
+ [0x000F3A, 0x000F3D],
+ [0x000F6D, 0x000F70],
+ [0x000FBD, 0x000FC5],
+ [0x000FC7, 0x000FFF],
+ [0x00104A, 0x00104F],
+ [0x00109E, 0x00109F],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x0010CF],
+ [0x00124E, 0x00124F],
+ [0x00125E, 0x00125F],
+ [0x00128E, 0x00128F],
+ [0x0012B6, 0x0012B7],
+ [0x0012C6, 0x0012C7],
+ [0x001316, 0x001317],
+ [0x00135B, 0x00135C],
+ [0x001360, 0x001368],
+ [0x001372, 0x00137F],
+ [0x001390, 0x00139F],
+ [0x0013F6, 0x0013F7],
+ [0x0013FE, 0x001400],
+ [0x00166D, 0x00166E],
+ [0x00169B, 0x00169F],
+ [0x0016EB, 0x0016ED],
+ [0x0016F9, 0x0016FF],
+ [0x001716, 0x00171E],
+ [0x001735, 0x00173F],
+ [0x001754, 0x00175F],
+ [0x001774, 0x00177F],
+ [0x0017D4, 0x0017D6],
+ [0x0017D8, 0x0017DB],
+ [0x0017DE, 0x0017DF],
+ [0x0017EA, 0x00180A],
+ [0x00181A, 0x00181F],
+ [0x001879, 0x00187F],
+ [0x0018AB, 0x0018AF],
+ [0x0018F6, 0x0018FF],
+ [0x00192C, 0x00192F],
+ [0x00193C, 0x001945],
+ [0x00196E, 0x00196F],
+ [0x001975, 0x00197F],
+ [0x0019AC, 0x0019AF],
+ [0x0019CA, 0x0019CF],
+ [0x0019DB, 0x0019FF],
+ [0x001A1C, 0x001A1F],
+ [0x001A7D, 0x001A7E],
+ [0x001A8A, 0x001A8F],
+ [0x001A9A, 0x001AA6],
+ [0x001AA8, 0x001AAF],
+ [0x001ACF, 0x001AFF],
+ [0x001B4D, 0x001B4F],
+ [0x001B5A, 0x001B6A],
+ [0x001B74, 0x001B7F],
+ [0x001BF4, 0x001BFF],
+ [0x001C38, 0x001C3F],
+ [0x001C4A, 0x001C4C],
+ [0x001C7E, 0x001C7F],
+ [0x001C89, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC0, 0x001CCF],
+ [0x001CFB, 0x001CFF],
+ [0x001F16, 0x001F17],
+ [0x001F1E, 0x001F1F],
+ [0x001F46, 0x001F47],
+ [0x001F4E, 0x001F4F],
+ [0x001F7E, 0x001F7F],
+ [0x001FBF, 0x001FC1],
+ [0x001FCD, 0x001FCF],
+ [0x001FD4, 0x001FD5],
+ [0x001FDC, 0x001FDF],
+ [0x001FED, 0x001FF1],
+ [0x001FFD, 0x00203E],
+ [0x002041, 0x002053],
+ [0x002055, 0x002070],
+ [0x002072, 0x00207E],
+ [0x002080, 0x00208F],
+ [0x00209D, 0x0020CF],
+ [0x0020DD, 0x0020E0],
+ [0x0020E2, 0x0020E4],
+ [0x0020F1, 0x002101],
+ [0x002103, 0x002106],
+ [0x002108, 0x002109],
+ [0x002116, 0x002117],
+ [0x00211E, 0x002123],
+ [0x00213A, 0x00213B],
+ [0x002140, 0x002144],
+ [0x00214A, 0x00214D],
+ [0x00214F, 0x00215F],
+ [0x002189, 0x002BFF],
+ [0x002CE5, 0x002CEA],
+ [0x002CF4, 0x002CFF],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x002D2F],
+ [0x002D68, 0x002D6E],
+ [0x002D70, 0x002D7E],
+ [0x002D97, 0x002D9F],
+ [0x002E00, 0x003004],
+ [0x003008, 0x003020],
+ [0x003036, 0x003037],
+ [0x00303D, 0x003040],
+ [0x003097, 0x003098],
+ [0x00309B, 0x00309C],
+ [0x003100, 0x003104],
+ [0x00318F, 0x00319F],
+ [0x0031C0, 0x0031EF],
+ [0x003200, 0x0033FF],
+ [0x004DC0, 0x004DFF],
+ [0x00A48D, 0x00A4CF],
+ [0x00A4FE, 0x00A4FF],
+ [0x00A60D, 0x00A60F],
+ [0x00A62C, 0x00A63F],
+ [0x00A670, 0x00A673],
+ [0x00A6F2, 0x00A716],
+ [0x00A720, 0x00A721],
+ [0x00A789, 0x00A78A],
+ [0x00A7CB, 0x00A7CF],
+ [0x00A7DA, 0x00A7F1],
+ [0x00A828, 0x00A82B],
+ [0x00A82D, 0x00A83F],
+ [0x00A874, 0x00A87F],
+ [0x00A8C6, 0x00A8CF],
+ [0x00A8DA, 0x00A8DF],
+ [0x00A8F8, 0x00A8FA],
+ [0x00A92E, 0x00A92F],
+ [0x00A954, 0x00A95F],
+ [0x00A97D, 0x00A97F],
+ [0x00A9C1, 0x00A9CE],
+ [0x00A9DA, 0x00A9DF],
+ [0x00AA37, 0x00AA3F],
+ [0x00AA4E, 0x00AA4F],
+ [0x00AA5A, 0x00AA5F],
+ [0x00AA77, 0x00AA79],
+ [0x00AAC3, 0x00AADA],
+ [0x00AADE, 0x00AADF],
+ [0x00AAF0, 0x00AAF1],
+ [0x00AAF7, 0x00AB00],
+ [0x00AB07, 0x00AB08],
+ [0x00AB0F, 0x00AB10],
+ [0x00AB17, 0x00AB1F],
+ [0x00AB6A, 0x00AB6F],
+ [0x00ABEE, 0x00ABEF],
+ [0x00ABFA, 0x00ABFF],
+ [0x00D7A4, 0x00D7AF],
+ [0x00D7C7, 0x00D7CA],
+ [0x00D7FC, 0x00DBFF],
+ [0x00E000, 0x00F8FF],
+ [0x00FA6E, 0x00FA6F],
+ [0x00FADA, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FB1C],
+ [0x00FBB2, 0x00FBD2],
+ [0x00FC5E, 0x00FC63],
+ [0x00FD3E, 0x00FD4F],
+ [0x00FD90, 0x00FD91],
+ [0x00FDC8, 0x00FDEF],
+ [0x00FDFA, 0x00FDFF],
+ [0x00FE10, 0x00FE1F],
+ [0x00FE30, 0x00FE32],
+ [0x00FE35, 0x00FE4C],
+ [0x00FE50, 0x00FE70],
+ [0x00FE74, 0x00FE76],
+ [0x00FEFD, 0x00FF0F],
+ [0x00FF1A, 0x00FF20],
+ [0x00FF3B, 0x00FF3E],
+ [0x00FF5B, 0x00FF65],
+ [0x00FFBF, 0x00FFC1],
+ [0x00FFC8, 0x00FFC9],
+ [0x00FFD0, 0x00FFD1],
+ [0x00FFD8, 0x00FFD9],
+ [0x00FFDD, 0x00FFFF],
+ [0x01004E, 0x01004F],
+ [0x01005E, 0x01007F],
+ [0x0100FB, 0x01013F],
+ [0x010175, 0x0101FC],
+ [0x0101FE, 0x01027F],
+ [0x01029D, 0x01029F],
+ [0x0102D1, 0x0102DF],
+ [0x0102E1, 0x0102FF],
+ [0x010320, 0x01032C],
+ [0x01034B, 0x01034F],
+ [0x01037B, 0x01037F],
+ [0x01039E, 0x01039F],
+ [0x0103C4, 0x0103C7],
+ [0x0103D6, 0x0103FF],
+ [0x01049E, 0x01049F],
+ [0x0104AA, 0x0104AF],
+ [0x0104D4, 0x0104D7],
+ [0x0104FC, 0x0104FF],
+ [0x010528, 0x01052F],
+ [0x010564, 0x01056F],
+ [0x0105BD, 0x0105FF],
+ [0x010737, 0x01073F],
+ [0x010756, 0x01075F],
+ [0x010768, 0x01077F],
+ [0x0107BB, 0x0107FF],
+ [0x010806, 0x010807],
+ [0x010839, 0x01083B],
+ [0x01083D, 0x01083E],
+ [0x010856, 0x01085F],
+ [0x010877, 0x01087F],
+ [0x01089F, 0x0108DF],
+ [0x0108F6, 0x0108FF],
+ [0x010916, 0x01091F],
+ [0x01093A, 0x01097F],
+ [0x0109B8, 0x0109BD],
+ [0x0109C0, 0x0109FF],
+ [0x010A07, 0x010A0B],
+ [0x010A36, 0x010A37],
+ [0x010A3B, 0x010A3E],
+ [0x010A40, 0x010A5F],
+ [0x010A7D, 0x010A7F],
+ [0x010A9D, 0x010ABF],
+ [0x010AE7, 0x010AFF],
+ [0x010B36, 0x010B3F],
+ [0x010B56, 0x010B5F],
+ [0x010B73, 0x010B7F],
+ [0x010B92, 0x010BFF],
+ [0x010C49, 0x010C7F],
+ [0x010CB3, 0x010CBF],
+ [0x010CF3, 0x010CFF],
+ [0x010D28, 0x010D2F],
+ [0x010D3A, 0x010E7F],
+ [0x010EAD, 0x010EAF],
+ [0x010EB2, 0x010EFC],
+ [0x010F1D, 0x010F26],
+ [0x010F28, 0x010F2F],
+ [0x010F51, 0x010F6F],
+ [0x010F86, 0x010FAF],
+ [0x010FC5, 0x010FDF],
+ [0x010FF7, 0x010FFF],
+ [0x011047, 0x011065],
+ [0x011076, 0x01107E],
+ [0x0110BB, 0x0110C1],
+ [0x0110C3, 0x0110CF],
+ [0x0110E9, 0x0110EF],
+ [0x0110FA, 0x0110FF],
+ [0x011140, 0x011143],
+ [0x011148, 0x01114F],
+ [0x011174, 0x011175],
+ [0x011177, 0x01117F],
+ [0x0111C5, 0x0111C8],
+ [0x0111DD, 0x0111FF],
+ [0x011238, 0x01123D],
+ [0x011242, 0x01127F],
+ [0x0112A9, 0x0112AF],
+ [0x0112EB, 0x0112EF],
+ [0x0112FA, 0x0112FF],
+ [0x01130D, 0x01130E],
+ [0x011311, 0x011312],
+ [0x011345, 0x011346],
+ [0x011349, 0x01134A],
+ [0x01134E, 0x01134F],
+ [0x011351, 0x011356],
+ [0x011358, 0x01135C],
+ [0x011364, 0x011365],
+ [0x01136D, 0x01136F],
+ [0x011375, 0x0113FF],
+ [0x01144B, 0x01144F],
+ [0x01145A, 0x01145D],
+ [0x011462, 0x01147F],
+ [0x0114C8, 0x0114CF],
+ [0x0114DA, 0x01157F],
+ [0x0115B6, 0x0115B7],
+ [0x0115C1, 0x0115D7],
+ [0x0115DE, 0x0115FF],
+ [0x011641, 0x011643],
+ [0x011645, 0x01164F],
+ [0x01165A, 0x01167F],
+ [0x0116B9, 0x0116BF],
+ [0x0116CA, 0x0116FF],
+ [0x01171B, 0x01171C],
+ [0x01172C, 0x01172F],
+ [0x01173A, 0x01173F],
+ [0x011747, 0x0117FF],
+ [0x01183B, 0x01189F],
+ [0x0118EA, 0x0118FE],
+ [0x011907, 0x011908],
+ [0x01190A, 0x01190B],
+ [0x011939, 0x01193A],
+ [0x011944, 0x01194F],
+ [0x01195A, 0x01199F],
+ [0x0119A8, 0x0119A9],
+ [0x0119D8, 0x0119D9],
+ [0x0119E5, 0x0119FF],
+ [0x011A3F, 0x011A46],
+ [0x011A48, 0x011A4F],
+ [0x011A9A, 0x011A9C],
+ [0x011A9E, 0x011AAF],
+ [0x011AF9, 0x011BFF],
+ [0x011C41, 0x011C4F],
+ [0x011C5A, 0x011C71],
+ [0x011C90, 0x011C91],
+ [0x011CB7, 0x011CFF],
+ [0x011D37, 0x011D39],
+ [0x011D48, 0x011D4F],
+ [0x011D5A, 0x011D5F],
+ [0x011D99, 0x011D9F],
+ [0x011DAA, 0x011EDF],
+ [0x011EF7, 0x011EFF],
+ [0x011F3B, 0x011F3D],
+ [0x011F43, 0x011F4F],
+ [0x011F5A, 0x011FAF],
+ [0x011FB1, 0x011FFF],
+ [0x01239A, 0x0123FF],
+ [0x01246F, 0x01247F],
+ [0x012544, 0x012F8F],
+ [0x012FF1, 0x012FFF],
+ [0x013430, 0x01343F],
+ [0x013456, 0x0143FF],
+ [0x014647, 0x0167FF],
+ [0x016A39, 0x016A3F],
+ [0x016A6A, 0x016A6F],
+ [0x016ACA, 0x016ACF],
+ [0x016AEE, 0x016AEF],
+ [0x016AF5, 0x016AFF],
+ [0x016B37, 0x016B3F],
+ [0x016B44, 0x016B4F],
+ [0x016B5A, 0x016B62],
+ [0x016B78, 0x016B7C],
+ [0x016B90, 0x016E3F],
+ [0x016E80, 0x016EFF],
+ [0x016F4B, 0x016F4E],
+ [0x016F88, 0x016F8E],
+ [0x016FA0, 0x016FDF],
+ [0x016FE5, 0x016FEF],
+ [0x016FF2, 0x016FFF],
+ [0x0187F8, 0x0187FF],
+ [0x018CD6, 0x018CFF],
+ [0x018D09, 0x01AFEF],
+ [0x01B123, 0x01B131],
+ [0x01B133, 0x01B14F],
+ [0x01B153, 0x01B154],
+ [0x01B156, 0x01B163],
+ [0x01B168, 0x01B16F],
+ [0x01B2FC, 0x01BBFF],
+ [0x01BC6B, 0x01BC6F],
+ [0x01BC7D, 0x01BC7F],
+ [0x01BC89, 0x01BC8F],
+ [0x01BC9A, 0x01BC9C],
+ [0x01BC9F, 0x01CEFF],
+ [0x01CF2E, 0x01CF2F],
+ [0x01CF47, 0x01D164],
+ [0x01D16A, 0x01D16C],
+ [0x01D173, 0x01D17A],
+ [0x01D183, 0x01D184],
+ [0x01D18C, 0x01D1A9],
+ [0x01D1AE, 0x01D241],
+ [0x01D245, 0x01D3FF],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D50B, 0x01D50C],
+ [0x01D547, 0x01D549],
+ [0x01D6A6, 0x01D6A7],
+ [0x01D7CC, 0x01D7CD],
+ [0x01D800, 0x01D9FF],
+ [0x01DA37, 0x01DA3A],
+ [0x01DA6D, 0x01DA74],
+ [0x01DA76, 0x01DA83],
+ [0x01DA85, 0x01DA9A],
+ [0x01DAB0, 0x01DEFF],
+ [0x01DF1F, 0x01DF24],
+ [0x01DF2B, 0x01DFFF],
+ [0x01E019, 0x01E01A],
+ [0x01E02B, 0x01E02F],
+ [0x01E06E, 0x01E08E],
+ [0x01E090, 0x01E0FF],
+ [0x01E12D, 0x01E12F],
+ [0x01E13E, 0x01E13F],
+ [0x01E14A, 0x01E14D],
+ [0x01E14F, 0x01E28F],
+ [0x01E2AF, 0x01E2BF],
+ [0x01E2FA, 0x01E4CF],
+ [0x01E4FA, 0x01E7DF],
+ [0x01E8C5, 0x01E8CF],
+ [0x01E8D7, 0x01E8FF],
+ [0x01E94C, 0x01E94F],
+ [0x01E95A, 0x01EDFF],
+ [0x01EE25, 0x01EE26],
+ [0x01EE3C, 0x01EE41],
+ [0x01EE43, 0x01EE46],
+ [0x01EE55, 0x01EE56],
+ [0x01EE65, 0x01EE66],
+ [0x01EE9C, 0x01EEA0],
+ [0x01EEBC, 0x01FBEF],
+ [0x01FBFA, 0x01FFFF],
+ [0x02A6E0, 0x02A6FF],
+ [0x02B73A, 0x02B73F],
+ [0x02B81E, 0x02B81F],
+ [0x02CEA2, 0x02CEAF],
+ [0x02EBE1, 0x02F7FF],
+ [0x02FA1E, 0x02FFFF],
+ [0x03134B, 0x03134F],
+ [0x0323B0, 0x0E00FF],
+ [0x0E01F0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{XID_Continue}+$/u,
+ nonMatchSymbols,
+ "\\P{XID_Continue}"
+);
+testPropertyEscapes(
+ /^\P{XIDC}+$/u,
+ nonMatchSymbols,
+ "\\P{XIDC}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/XID_Start.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/XID_Start.js
new file mode 100644
index 0000000000..4838b9906b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/XID_Start.js
@@ -0,0 +1,1385 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `XID_Start`
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes]
+includes: [regExpUtils.js]
+---*/
+
+const matchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000AA,
+ 0x0000B5,
+ 0x0000BA,
+ 0x0002EC,
+ 0x0002EE,
+ 0x00037F,
+ 0x000386,
+ 0x00038C,
+ 0x000559,
+ 0x0006D5,
+ 0x0006FF,
+ 0x000710,
+ 0x0007B1,
+ 0x0007FA,
+ 0x00081A,
+ 0x000824,
+ 0x000828,
+ 0x00093D,
+ 0x000950,
+ 0x0009B2,
+ 0x0009BD,
+ 0x0009CE,
+ 0x0009FC,
+ 0x000A5E,
+ 0x000ABD,
+ 0x000AD0,
+ 0x000AF9,
+ 0x000B3D,
+ 0x000B71,
+ 0x000B83,
+ 0x000B9C,
+ 0x000BD0,
+ 0x000C3D,
+ 0x000C5D,
+ 0x000C80,
+ 0x000CBD,
+ 0x000D3D,
+ 0x000D4E,
+ 0x000DBD,
+ 0x000E32,
+ 0x000E84,
+ 0x000EA5,
+ 0x000EB2,
+ 0x000EBD,
+ 0x000EC6,
+ 0x000F00,
+ 0x00103F,
+ 0x001061,
+ 0x00108E,
+ 0x0010C7,
+ 0x0010CD,
+ 0x001258,
+ 0x0012C0,
+ 0x0017D7,
+ 0x0017DC,
+ 0x0018AA,
+ 0x001AA7,
+ 0x001CFA,
+ 0x001F59,
+ 0x001F5B,
+ 0x001F5D,
+ 0x001FBE,
+ 0x002071,
+ 0x00207F,
+ 0x002102,
+ 0x002107,
+ 0x002115,
+ 0x002124,
+ 0x002126,
+ 0x002128,
+ 0x00214E,
+ 0x002D27,
+ 0x002D2D,
+ 0x002D6F,
+ 0x00A7D3,
+ 0x00A8FB,
+ 0x00A9CF,
+ 0x00AA7A,
+ 0x00AAB1,
+ 0x00AAC0,
+ 0x00AAC2,
+ 0x00FB1D,
+ 0x00FB3E,
+ 0x00FE71,
+ 0x00FE73,
+ 0x00FE77,
+ 0x00FE79,
+ 0x00FE7B,
+ 0x00FE7D,
+ 0x010808,
+ 0x01083C,
+ 0x010A00,
+ 0x010F27,
+ 0x011075,
+ 0x011144,
+ 0x011147,
+ 0x011176,
+ 0x0111DA,
+ 0x0111DC,
+ 0x011288,
+ 0x01133D,
+ 0x011350,
+ 0x0114C7,
+ 0x011644,
+ 0x0116B8,
+ 0x011909,
+ 0x01193F,
+ 0x011941,
+ 0x0119E1,
+ 0x0119E3,
+ 0x011A00,
+ 0x011A3A,
+ 0x011A50,
+ 0x011A9D,
+ 0x011C40,
+ 0x011D46,
+ 0x011D98,
+ 0x011F02,
+ 0x011FB0,
+ 0x016F50,
+ 0x016FE3,
+ 0x01B132,
+ 0x01B155,
+ 0x01D4A2,
+ 0x01D4BB,
+ 0x01D546,
+ 0x01E14E,
+ 0x01E94B,
+ 0x01EE24,
+ 0x01EE27,
+ 0x01EE39,
+ 0x01EE3B,
+ 0x01EE42,
+ 0x01EE47,
+ 0x01EE49,
+ 0x01EE4B,
+ 0x01EE54,
+ 0x01EE57,
+ 0x01EE59,
+ 0x01EE5B,
+ 0x01EE5D,
+ 0x01EE5F,
+ 0x01EE64,
+ 0x01EE7E
+ ],
+ ranges: [
+ [0x000041, 0x00005A],
+ [0x000061, 0x00007A],
+ [0x0000C0, 0x0000D6],
+ [0x0000D8, 0x0000F6],
+ [0x0000F8, 0x0002C1],
+ [0x0002C6, 0x0002D1],
+ [0x0002E0, 0x0002E4],
+ [0x000370, 0x000374],
+ [0x000376, 0x000377],
+ [0x00037B, 0x00037D],
+ [0x000388, 0x00038A],
+ [0x00038E, 0x0003A1],
+ [0x0003A3, 0x0003F5],
+ [0x0003F7, 0x000481],
+ [0x00048A, 0x00052F],
+ [0x000531, 0x000556],
+ [0x000560, 0x000588],
+ [0x0005D0, 0x0005EA],
+ [0x0005EF, 0x0005F2],
+ [0x000620, 0x00064A],
+ [0x00066E, 0x00066F],
+ [0x000671, 0x0006D3],
+ [0x0006E5, 0x0006E6],
+ [0x0006EE, 0x0006EF],
+ [0x0006FA, 0x0006FC],
+ [0x000712, 0x00072F],
+ [0x00074D, 0x0007A5],
+ [0x0007CA, 0x0007EA],
+ [0x0007F4, 0x0007F5],
+ [0x000800, 0x000815],
+ [0x000840, 0x000858],
+ [0x000860, 0x00086A],
+ [0x000870, 0x000887],
+ [0x000889, 0x00088E],
+ [0x0008A0, 0x0008C9],
+ [0x000904, 0x000939],
+ [0x000958, 0x000961],
+ [0x000971, 0x000980],
+ [0x000985, 0x00098C],
+ [0x00098F, 0x000990],
+ [0x000993, 0x0009A8],
+ [0x0009AA, 0x0009B0],
+ [0x0009B6, 0x0009B9],
+ [0x0009DC, 0x0009DD],
+ [0x0009DF, 0x0009E1],
+ [0x0009F0, 0x0009F1],
+ [0x000A05, 0x000A0A],
+ [0x000A0F, 0x000A10],
+ [0x000A13, 0x000A28],
+ [0x000A2A, 0x000A30],
+ [0x000A32, 0x000A33],
+ [0x000A35, 0x000A36],
+ [0x000A38, 0x000A39],
+ [0x000A59, 0x000A5C],
+ [0x000A72, 0x000A74],
+ [0x000A85, 0x000A8D],
+ [0x000A8F, 0x000A91],
+ [0x000A93, 0x000AA8],
+ [0x000AAA, 0x000AB0],
+ [0x000AB2, 0x000AB3],
+ [0x000AB5, 0x000AB9],
+ [0x000AE0, 0x000AE1],
+ [0x000B05, 0x000B0C],
+ [0x000B0F, 0x000B10],
+ [0x000B13, 0x000B28],
+ [0x000B2A, 0x000B30],
+ [0x000B32, 0x000B33],
+ [0x000B35, 0x000B39],
+ [0x000B5C, 0x000B5D],
+ [0x000B5F, 0x000B61],
+ [0x000B85, 0x000B8A],
+ [0x000B8E, 0x000B90],
+ [0x000B92, 0x000B95],
+ [0x000B99, 0x000B9A],
+ [0x000B9E, 0x000B9F],
+ [0x000BA3, 0x000BA4],
+ [0x000BA8, 0x000BAA],
+ [0x000BAE, 0x000BB9],
+ [0x000C05, 0x000C0C],
+ [0x000C0E, 0x000C10],
+ [0x000C12, 0x000C28],
+ [0x000C2A, 0x000C39],
+ [0x000C58, 0x000C5A],
+ [0x000C60, 0x000C61],
+ [0x000C85, 0x000C8C],
+ [0x000C8E, 0x000C90],
+ [0x000C92, 0x000CA8],
+ [0x000CAA, 0x000CB3],
+ [0x000CB5, 0x000CB9],
+ [0x000CDD, 0x000CDE],
+ [0x000CE0, 0x000CE1],
+ [0x000CF1, 0x000CF2],
+ [0x000D04, 0x000D0C],
+ [0x000D0E, 0x000D10],
+ [0x000D12, 0x000D3A],
+ [0x000D54, 0x000D56],
+ [0x000D5F, 0x000D61],
+ [0x000D7A, 0x000D7F],
+ [0x000D85, 0x000D96],
+ [0x000D9A, 0x000DB1],
+ [0x000DB3, 0x000DBB],
+ [0x000DC0, 0x000DC6],
+ [0x000E01, 0x000E30],
+ [0x000E40, 0x000E46],
+ [0x000E81, 0x000E82],
+ [0x000E86, 0x000E8A],
+ [0x000E8C, 0x000EA3],
+ [0x000EA7, 0x000EB0],
+ [0x000EC0, 0x000EC4],
+ [0x000EDC, 0x000EDF],
+ [0x000F40, 0x000F47],
+ [0x000F49, 0x000F6C],
+ [0x000F88, 0x000F8C],
+ [0x001000, 0x00102A],
+ [0x001050, 0x001055],
+ [0x00105A, 0x00105D],
+ [0x001065, 0x001066],
+ [0x00106E, 0x001070],
+ [0x001075, 0x001081],
+ [0x0010A0, 0x0010C5],
+ [0x0010D0, 0x0010FA],
+ [0x0010FC, 0x001248],
+ [0x00124A, 0x00124D],
+ [0x001250, 0x001256],
+ [0x00125A, 0x00125D],
+ [0x001260, 0x001288],
+ [0x00128A, 0x00128D],
+ [0x001290, 0x0012B0],
+ [0x0012B2, 0x0012B5],
+ [0x0012B8, 0x0012BE],
+ [0x0012C2, 0x0012C5],
+ [0x0012C8, 0x0012D6],
+ [0x0012D8, 0x001310],
+ [0x001312, 0x001315],
+ [0x001318, 0x00135A],
+ [0x001380, 0x00138F],
+ [0x0013A0, 0x0013F5],
+ [0x0013F8, 0x0013FD],
+ [0x001401, 0x00166C],
+ [0x00166F, 0x00167F],
+ [0x001681, 0x00169A],
+ [0x0016A0, 0x0016EA],
+ [0x0016EE, 0x0016F8],
+ [0x001700, 0x001711],
+ [0x00171F, 0x001731],
+ [0x001740, 0x001751],
+ [0x001760, 0x00176C],
+ [0x00176E, 0x001770],
+ [0x001780, 0x0017B3],
+ [0x001820, 0x001878],
+ [0x001880, 0x0018A8],
+ [0x0018B0, 0x0018F5],
+ [0x001900, 0x00191E],
+ [0x001950, 0x00196D],
+ [0x001970, 0x001974],
+ [0x001980, 0x0019AB],
+ [0x0019B0, 0x0019C9],
+ [0x001A00, 0x001A16],
+ [0x001A20, 0x001A54],
+ [0x001B05, 0x001B33],
+ [0x001B45, 0x001B4C],
+ [0x001B83, 0x001BA0],
+ [0x001BAE, 0x001BAF],
+ [0x001BBA, 0x001BE5],
+ [0x001C00, 0x001C23],
+ [0x001C4D, 0x001C4F],
+ [0x001C5A, 0x001C7D],
+ [0x001C80, 0x001C88],
+ [0x001C90, 0x001CBA],
+ [0x001CBD, 0x001CBF],
+ [0x001CE9, 0x001CEC],
+ [0x001CEE, 0x001CF3],
+ [0x001CF5, 0x001CF6],
+ [0x001D00, 0x001DBF],
+ [0x001E00, 0x001F15],
+ [0x001F18, 0x001F1D],
+ [0x001F20, 0x001F45],
+ [0x001F48, 0x001F4D],
+ [0x001F50, 0x001F57],
+ [0x001F5F, 0x001F7D],
+ [0x001F80, 0x001FB4],
+ [0x001FB6, 0x001FBC],
+ [0x001FC2, 0x001FC4],
+ [0x001FC6, 0x001FCC],
+ [0x001FD0, 0x001FD3],
+ [0x001FD6, 0x001FDB],
+ [0x001FE0, 0x001FEC],
+ [0x001FF2, 0x001FF4],
+ [0x001FF6, 0x001FFC],
+ [0x002090, 0x00209C],
+ [0x00210A, 0x002113],
+ [0x002118, 0x00211D],
+ [0x00212A, 0x002139],
+ [0x00213C, 0x00213F],
+ [0x002145, 0x002149],
+ [0x002160, 0x002188],
+ [0x002C00, 0x002CE4],
+ [0x002CEB, 0x002CEE],
+ [0x002CF2, 0x002CF3],
+ [0x002D00, 0x002D25],
+ [0x002D30, 0x002D67],
+ [0x002D80, 0x002D96],
+ [0x002DA0, 0x002DA6],
+ [0x002DA8, 0x002DAE],
+ [0x002DB0, 0x002DB6],
+ [0x002DB8, 0x002DBE],
+ [0x002DC0, 0x002DC6],
+ [0x002DC8, 0x002DCE],
+ [0x002DD0, 0x002DD6],
+ [0x002DD8, 0x002DDE],
+ [0x003005, 0x003007],
+ [0x003021, 0x003029],
+ [0x003031, 0x003035],
+ [0x003038, 0x00303C],
+ [0x003041, 0x003096],
+ [0x00309D, 0x00309F],
+ [0x0030A1, 0x0030FA],
+ [0x0030FC, 0x0030FF],
+ [0x003105, 0x00312F],
+ [0x003131, 0x00318E],
+ [0x0031A0, 0x0031BF],
+ [0x0031F0, 0x0031FF],
+ [0x003400, 0x004DBF],
+ [0x004E00, 0x00A48C],
+ [0x00A4D0, 0x00A4FD],
+ [0x00A500, 0x00A60C],
+ [0x00A610, 0x00A61F],
+ [0x00A62A, 0x00A62B],
+ [0x00A640, 0x00A66E],
+ [0x00A67F, 0x00A69D],
+ [0x00A6A0, 0x00A6EF],
+ [0x00A717, 0x00A71F],
+ [0x00A722, 0x00A788],
+ [0x00A78B, 0x00A7CA],
+ [0x00A7D0, 0x00A7D1],
+ [0x00A7D5, 0x00A7D9],
+ [0x00A7F2, 0x00A801],
+ [0x00A803, 0x00A805],
+ [0x00A807, 0x00A80A],
+ [0x00A80C, 0x00A822],
+ [0x00A840, 0x00A873],
+ [0x00A882, 0x00A8B3],
+ [0x00A8F2, 0x00A8F7],
+ [0x00A8FD, 0x00A8FE],
+ [0x00A90A, 0x00A925],
+ [0x00A930, 0x00A946],
+ [0x00A960, 0x00A97C],
+ [0x00A984, 0x00A9B2],
+ [0x00A9E0, 0x00A9E4],
+ [0x00A9E6, 0x00A9EF],
+ [0x00A9FA, 0x00A9FE],
+ [0x00AA00, 0x00AA28],
+ [0x00AA40, 0x00AA42],
+ [0x00AA44, 0x00AA4B],
+ [0x00AA60, 0x00AA76],
+ [0x00AA7E, 0x00AAAF],
+ [0x00AAB5, 0x00AAB6],
+ [0x00AAB9, 0x00AABD],
+ [0x00AADB, 0x00AADD],
+ [0x00AAE0, 0x00AAEA],
+ [0x00AAF2, 0x00AAF4],
+ [0x00AB01, 0x00AB06],
+ [0x00AB09, 0x00AB0E],
+ [0x00AB11, 0x00AB16],
+ [0x00AB20, 0x00AB26],
+ [0x00AB28, 0x00AB2E],
+ [0x00AB30, 0x00AB5A],
+ [0x00AB5C, 0x00AB69],
+ [0x00AB70, 0x00ABE2],
+ [0x00AC00, 0x00D7A3],
+ [0x00D7B0, 0x00D7C6],
+ [0x00D7CB, 0x00D7FB],
+ [0x00F900, 0x00FA6D],
+ [0x00FA70, 0x00FAD9],
+ [0x00FB00, 0x00FB06],
+ [0x00FB13, 0x00FB17],
+ [0x00FB1F, 0x00FB28],
+ [0x00FB2A, 0x00FB36],
+ [0x00FB38, 0x00FB3C],
+ [0x00FB40, 0x00FB41],
+ [0x00FB43, 0x00FB44],
+ [0x00FB46, 0x00FBB1],
+ [0x00FBD3, 0x00FC5D],
+ [0x00FC64, 0x00FD3D],
+ [0x00FD50, 0x00FD8F],
+ [0x00FD92, 0x00FDC7],
+ [0x00FDF0, 0x00FDF9],
+ [0x00FE7F, 0x00FEFC],
+ [0x00FF21, 0x00FF3A],
+ [0x00FF41, 0x00FF5A],
+ [0x00FF66, 0x00FF9D],
+ [0x00FFA0, 0x00FFBE],
+ [0x00FFC2, 0x00FFC7],
+ [0x00FFCA, 0x00FFCF],
+ [0x00FFD2, 0x00FFD7],
+ [0x00FFDA, 0x00FFDC],
+ [0x010000, 0x01000B],
+ [0x01000D, 0x010026],
+ [0x010028, 0x01003A],
+ [0x01003C, 0x01003D],
+ [0x01003F, 0x01004D],
+ [0x010050, 0x01005D],
+ [0x010080, 0x0100FA],
+ [0x010140, 0x010174],
+ [0x010280, 0x01029C],
+ [0x0102A0, 0x0102D0],
+ [0x010300, 0x01031F],
+ [0x01032D, 0x01034A],
+ [0x010350, 0x010375],
+ [0x010380, 0x01039D],
+ [0x0103A0, 0x0103C3],
+ [0x0103C8, 0x0103CF],
+ [0x0103D1, 0x0103D5],
+ [0x010400, 0x01049D],
+ [0x0104B0, 0x0104D3],
+ [0x0104D8, 0x0104FB],
+ [0x010500, 0x010527],
+ [0x010530, 0x010563],
+ [0x010570, 0x01057A],
+ [0x01057C, 0x01058A],
+ [0x01058C, 0x010592],
+ [0x010594, 0x010595],
+ [0x010597, 0x0105A1],
+ [0x0105A3, 0x0105B1],
+ [0x0105B3, 0x0105B9],
+ [0x0105BB, 0x0105BC],
+ [0x010600, 0x010736],
+ [0x010740, 0x010755],
+ [0x010760, 0x010767],
+ [0x010780, 0x010785],
+ [0x010787, 0x0107B0],
+ [0x0107B2, 0x0107BA],
+ [0x010800, 0x010805],
+ [0x01080A, 0x010835],
+ [0x010837, 0x010838],
+ [0x01083F, 0x010855],
+ [0x010860, 0x010876],
+ [0x010880, 0x01089E],
+ [0x0108E0, 0x0108F2],
+ [0x0108F4, 0x0108F5],
+ [0x010900, 0x010915],
+ [0x010920, 0x010939],
+ [0x010980, 0x0109B7],
+ [0x0109BE, 0x0109BF],
+ [0x010A10, 0x010A13],
+ [0x010A15, 0x010A17],
+ [0x010A19, 0x010A35],
+ [0x010A60, 0x010A7C],
+ [0x010A80, 0x010A9C],
+ [0x010AC0, 0x010AC7],
+ [0x010AC9, 0x010AE4],
+ [0x010B00, 0x010B35],
+ [0x010B40, 0x010B55],
+ [0x010B60, 0x010B72],
+ [0x010B80, 0x010B91],
+ [0x010C00, 0x010C48],
+ [0x010C80, 0x010CB2],
+ [0x010CC0, 0x010CF2],
+ [0x010D00, 0x010D23],
+ [0x010E80, 0x010EA9],
+ [0x010EB0, 0x010EB1],
+ [0x010F00, 0x010F1C],
+ [0x010F30, 0x010F45],
+ [0x010F70, 0x010F81],
+ [0x010FB0, 0x010FC4],
+ [0x010FE0, 0x010FF6],
+ [0x011003, 0x011037],
+ [0x011071, 0x011072],
+ [0x011083, 0x0110AF],
+ [0x0110D0, 0x0110E8],
+ [0x011103, 0x011126],
+ [0x011150, 0x011172],
+ [0x011183, 0x0111B2],
+ [0x0111C1, 0x0111C4],
+ [0x011200, 0x011211],
+ [0x011213, 0x01122B],
+ [0x01123F, 0x011240],
+ [0x011280, 0x011286],
+ [0x01128A, 0x01128D],
+ [0x01128F, 0x01129D],
+ [0x01129F, 0x0112A8],
+ [0x0112B0, 0x0112DE],
+ [0x011305, 0x01130C],
+ [0x01130F, 0x011310],
+ [0x011313, 0x011328],
+ [0x01132A, 0x011330],
+ [0x011332, 0x011333],
+ [0x011335, 0x011339],
+ [0x01135D, 0x011361],
+ [0x011400, 0x011434],
+ [0x011447, 0x01144A],
+ [0x01145F, 0x011461],
+ [0x011480, 0x0114AF],
+ [0x0114C4, 0x0114C5],
+ [0x011580, 0x0115AE],
+ [0x0115D8, 0x0115DB],
+ [0x011600, 0x01162F],
+ [0x011680, 0x0116AA],
+ [0x011700, 0x01171A],
+ [0x011740, 0x011746],
+ [0x011800, 0x01182B],
+ [0x0118A0, 0x0118DF],
+ [0x0118FF, 0x011906],
+ [0x01190C, 0x011913],
+ [0x011915, 0x011916],
+ [0x011918, 0x01192F],
+ [0x0119A0, 0x0119A7],
+ [0x0119AA, 0x0119D0],
+ [0x011A0B, 0x011A32],
+ [0x011A5C, 0x011A89],
+ [0x011AB0, 0x011AF8],
+ [0x011C00, 0x011C08],
+ [0x011C0A, 0x011C2E],
+ [0x011C72, 0x011C8F],
+ [0x011D00, 0x011D06],
+ [0x011D08, 0x011D09],
+ [0x011D0B, 0x011D30],
+ [0x011D60, 0x011D65],
+ [0x011D67, 0x011D68],
+ [0x011D6A, 0x011D89],
+ [0x011EE0, 0x011EF2],
+ [0x011F04, 0x011F10],
+ [0x011F12, 0x011F33],
+ [0x012000, 0x012399],
+ [0x012400, 0x01246E],
+ [0x012480, 0x012543],
+ [0x012F90, 0x012FF0],
+ [0x013000, 0x01342F],
+ [0x013441, 0x013446],
+ [0x014400, 0x014646],
+ [0x016800, 0x016A38],
+ [0x016A40, 0x016A5E],
+ [0x016A70, 0x016ABE],
+ [0x016AD0, 0x016AED],
+ [0x016B00, 0x016B2F],
+ [0x016B40, 0x016B43],
+ [0x016B63, 0x016B77],
+ [0x016B7D, 0x016B8F],
+ [0x016E40, 0x016E7F],
+ [0x016F00, 0x016F4A],
+ [0x016F93, 0x016F9F],
+ [0x016FE0, 0x016FE1],
+ [0x017000, 0x0187F7],
+ [0x018800, 0x018CD5],
+ [0x018D00, 0x018D08],
+ [0x01AFF0, 0x01AFF3],
+ [0x01AFF5, 0x01AFFB],
+ [0x01AFFD, 0x01AFFE],
+ [0x01B000, 0x01B122],
+ [0x01B150, 0x01B152],
+ [0x01B164, 0x01B167],
+ [0x01B170, 0x01B2FB],
+ [0x01BC00, 0x01BC6A],
+ [0x01BC70, 0x01BC7C],
+ [0x01BC80, 0x01BC88],
+ [0x01BC90, 0x01BC99],
+ [0x01D400, 0x01D454],
+ [0x01D456, 0x01D49C],
+ [0x01D49E, 0x01D49F],
+ [0x01D4A5, 0x01D4A6],
+ [0x01D4A9, 0x01D4AC],
+ [0x01D4AE, 0x01D4B9],
+ [0x01D4BD, 0x01D4C3],
+ [0x01D4C5, 0x01D505],
+ [0x01D507, 0x01D50A],
+ [0x01D50D, 0x01D514],
+ [0x01D516, 0x01D51C],
+ [0x01D51E, 0x01D539],
+ [0x01D53B, 0x01D53E],
+ [0x01D540, 0x01D544],
+ [0x01D54A, 0x01D550],
+ [0x01D552, 0x01D6A5],
+ [0x01D6A8, 0x01D6C0],
+ [0x01D6C2, 0x01D6DA],
+ [0x01D6DC, 0x01D6FA],
+ [0x01D6FC, 0x01D714],
+ [0x01D716, 0x01D734],
+ [0x01D736, 0x01D74E],
+ [0x01D750, 0x01D76E],
+ [0x01D770, 0x01D788],
+ [0x01D78A, 0x01D7A8],
+ [0x01D7AA, 0x01D7C2],
+ [0x01D7C4, 0x01D7CB],
+ [0x01DF00, 0x01DF1E],
+ [0x01DF25, 0x01DF2A],
+ [0x01E030, 0x01E06D],
+ [0x01E100, 0x01E12C],
+ [0x01E137, 0x01E13D],
+ [0x01E290, 0x01E2AD],
+ [0x01E2C0, 0x01E2EB],
+ [0x01E4D0, 0x01E4EB],
+ [0x01E7E0, 0x01E7E6],
+ [0x01E7E8, 0x01E7EB],
+ [0x01E7ED, 0x01E7EE],
+ [0x01E7F0, 0x01E7FE],
+ [0x01E800, 0x01E8C4],
+ [0x01E900, 0x01E943],
+ [0x01EE00, 0x01EE03],
+ [0x01EE05, 0x01EE1F],
+ [0x01EE21, 0x01EE22],
+ [0x01EE29, 0x01EE32],
+ [0x01EE34, 0x01EE37],
+ [0x01EE4D, 0x01EE4F],
+ [0x01EE51, 0x01EE52],
+ [0x01EE61, 0x01EE62],
+ [0x01EE67, 0x01EE6A],
+ [0x01EE6C, 0x01EE72],
+ [0x01EE74, 0x01EE77],
+ [0x01EE79, 0x01EE7C],
+ [0x01EE80, 0x01EE89],
+ [0x01EE8B, 0x01EE9B],
+ [0x01EEA1, 0x01EEA3],
+ [0x01EEA5, 0x01EEA9],
+ [0x01EEAB, 0x01EEBB],
+ [0x020000, 0x02A6DF],
+ [0x02A700, 0x02B739],
+ [0x02B740, 0x02B81D],
+ [0x02B820, 0x02CEA1],
+ [0x02CEB0, 0x02EBE0],
+ [0x02F800, 0x02FA1D],
+ [0x030000, 0x03134A],
+ [0x031350, 0x0323AF]
+ ]
+});
+testPropertyEscapes(
+ /^\p{XID_Start}+$/u,
+ matchSymbols,
+ "\\p{XID_Start}"
+);
+testPropertyEscapes(
+ /^\p{XIDS}+$/u,
+ matchSymbols,
+ "\\p{XIDS}"
+);
+
+const nonMatchSymbols = buildString({
+ loneCodePoints: [
+ 0x0000D7,
+ 0x0000F7,
+ 0x0002ED,
+ 0x000375,
+ 0x00037E,
+ 0x000387,
+ 0x00038B,
+ 0x00038D,
+ 0x0003A2,
+ 0x0003F6,
+ 0x000530,
+ 0x000670,
+ 0x0006D4,
+ 0x000711,
+ 0x000888,
+ 0x0009A9,
+ 0x0009B1,
+ 0x0009DE,
+ 0x000A29,
+ 0x000A31,
+ 0x000A34,
+ 0x000A37,
+ 0x000A5D,
+ 0x000A8E,
+ 0x000A92,
+ 0x000AA9,
+ 0x000AB1,
+ 0x000AB4,
+ 0x000B29,
+ 0x000B31,
+ 0x000B34,
+ 0x000B5E,
+ 0x000B84,
+ 0x000B91,
+ 0x000B9B,
+ 0x000B9D,
+ 0x000C0D,
+ 0x000C11,
+ 0x000C29,
+ 0x000C8D,
+ 0x000C91,
+ 0x000CA9,
+ 0x000CB4,
+ 0x000CDF,
+ 0x000D0D,
+ 0x000D11,
+ 0x000DB2,
+ 0x000DBC,
+ 0x000E31,
+ 0x000E83,
+ 0x000E85,
+ 0x000E8B,
+ 0x000EA4,
+ 0x000EA6,
+ 0x000EB1,
+ 0x000EC5,
+ 0x000F48,
+ 0x0010C6,
+ 0x0010FB,
+ 0x001249,
+ 0x001257,
+ 0x001259,
+ 0x001289,
+ 0x0012B1,
+ 0x0012BF,
+ 0x0012C1,
+ 0x0012D7,
+ 0x001311,
+ 0x001680,
+ 0x00176D,
+ 0x0018A9,
+ 0x001CED,
+ 0x001CF4,
+ 0x001F58,
+ 0x001F5A,
+ 0x001F5C,
+ 0x001F5E,
+ 0x001FB5,
+ 0x001FBD,
+ 0x001FC5,
+ 0x001FF5,
+ 0x002114,
+ 0x002125,
+ 0x002127,
+ 0x002129,
+ 0x002D26,
+ 0x002DA7,
+ 0x002DAF,
+ 0x002DB7,
+ 0x002DBF,
+ 0x002DC7,
+ 0x002DCF,
+ 0x002DD7,
+ 0x0030A0,
+ 0x0030FB,
+ 0x003130,
+ 0x00A7D2,
+ 0x00A7D4,
+ 0x00A802,
+ 0x00A806,
+ 0x00A80B,
+ 0x00A8FC,
+ 0x00A9E5,
+ 0x00A9FF,
+ 0x00AA43,
+ 0x00AAB0,
+ 0x00AAC1,
+ 0x00AB27,
+ 0x00AB2F,
+ 0x00AB5B,
+ 0x00FB1E,
+ 0x00FB29,
+ 0x00FB37,
+ 0x00FB3D,
+ 0x00FB3F,
+ 0x00FB42,
+ 0x00FB45,
+ 0x00FE72,
+ 0x00FE78,
+ 0x00FE7A,
+ 0x00FE7C,
+ 0x00FE7E,
+ 0x01000C,
+ 0x010027,
+ 0x01003B,
+ 0x01003E,
+ 0x0103D0,
+ 0x01057B,
+ 0x01058B,
+ 0x010593,
+ 0x010596,
+ 0x0105A2,
+ 0x0105B2,
+ 0x0105BA,
+ 0x010786,
+ 0x0107B1,
+ 0x010809,
+ 0x010836,
+ 0x0108F3,
+ 0x010A14,
+ 0x010A18,
+ 0x010AC8,
+ 0x0111DB,
+ 0x011212,
+ 0x011287,
+ 0x011289,
+ 0x01128E,
+ 0x01129E,
+ 0x011329,
+ 0x011331,
+ 0x011334,
+ 0x0114C6,
+ 0x011914,
+ 0x011917,
+ 0x011940,
+ 0x0119E2,
+ 0x011C09,
+ 0x011D07,
+ 0x011D0A,
+ 0x011D66,
+ 0x011D69,
+ 0x011F03,
+ 0x011F11,
+ 0x016FE2,
+ 0x01AFF4,
+ 0x01AFFC,
+ 0x01AFFF,
+ 0x01D455,
+ 0x01D49D,
+ 0x01D4AD,
+ 0x01D4BA,
+ 0x01D4BC,
+ 0x01D4C4,
+ 0x01D506,
+ 0x01D515,
+ 0x01D51D,
+ 0x01D53A,
+ 0x01D53F,
+ 0x01D545,
+ 0x01D551,
+ 0x01D6C1,
+ 0x01D6DB,
+ 0x01D6FB,
+ 0x01D715,
+ 0x01D735,
+ 0x01D74F,
+ 0x01D76F,
+ 0x01D789,
+ 0x01D7A9,
+ 0x01D7C3,
+ 0x01E7E7,
+ 0x01E7EC,
+ 0x01E7EF,
+ 0x01E7FF,
+ 0x01EE04,
+ 0x01EE20,
+ 0x01EE23,
+ 0x01EE28,
+ 0x01EE33,
+ 0x01EE38,
+ 0x01EE3A,
+ 0x01EE48,
+ 0x01EE4A,
+ 0x01EE4C,
+ 0x01EE50,
+ 0x01EE53,
+ 0x01EE58,
+ 0x01EE5A,
+ 0x01EE5C,
+ 0x01EE5E,
+ 0x01EE60,
+ 0x01EE63,
+ 0x01EE6B,
+ 0x01EE73,
+ 0x01EE78,
+ 0x01EE7D,
+ 0x01EE7F,
+ 0x01EE8A,
+ 0x01EEA4,
+ 0x01EEAA
+ ],
+ ranges: [
+ [0x00DC00, 0x00DFFF],
+ [0x000000, 0x000040],
+ [0x00005B, 0x000060],
+ [0x00007B, 0x0000A9],
+ [0x0000AB, 0x0000B4],
+ [0x0000B6, 0x0000B9],
+ [0x0000BB, 0x0000BF],
+ [0x0002C2, 0x0002C5],
+ [0x0002D2, 0x0002DF],
+ [0x0002E5, 0x0002EB],
+ [0x0002EF, 0x00036F],
+ [0x000378, 0x00037A],
+ [0x000380, 0x000385],
+ [0x000482, 0x000489],
+ [0x000557, 0x000558],
+ [0x00055A, 0x00055F],
+ [0x000589, 0x0005CF],
+ [0x0005EB, 0x0005EE],
+ [0x0005F3, 0x00061F],
+ [0x00064B, 0x00066D],
+ [0x0006D6, 0x0006E4],
+ [0x0006E7, 0x0006ED],
+ [0x0006F0, 0x0006F9],
+ [0x0006FD, 0x0006FE],
+ [0x000700, 0x00070F],
+ [0x000730, 0x00074C],
+ [0x0007A6, 0x0007B0],
+ [0x0007B2, 0x0007C9],
+ [0x0007EB, 0x0007F3],
+ [0x0007F6, 0x0007F9],
+ [0x0007FB, 0x0007FF],
+ [0x000816, 0x000819],
+ [0x00081B, 0x000823],
+ [0x000825, 0x000827],
+ [0x000829, 0x00083F],
+ [0x000859, 0x00085F],
+ [0x00086B, 0x00086F],
+ [0x00088F, 0x00089F],
+ [0x0008CA, 0x000903],
+ [0x00093A, 0x00093C],
+ [0x00093E, 0x00094F],
+ [0x000951, 0x000957],
+ [0x000962, 0x000970],
+ [0x000981, 0x000984],
+ [0x00098D, 0x00098E],
+ [0x000991, 0x000992],
+ [0x0009B3, 0x0009B5],
+ [0x0009BA, 0x0009BC],
+ [0x0009BE, 0x0009CD],
+ [0x0009CF, 0x0009DB],
+ [0x0009E2, 0x0009EF],
+ [0x0009F2, 0x0009FB],
+ [0x0009FD, 0x000A04],
+ [0x000A0B, 0x000A0E],
+ [0x000A11, 0x000A12],
+ [0x000A3A, 0x000A58],
+ [0x000A5F, 0x000A71],
+ [0x000A75, 0x000A84],
+ [0x000ABA, 0x000ABC],
+ [0x000ABE, 0x000ACF],
+ [0x000AD1, 0x000ADF],
+ [0x000AE2, 0x000AF8],
+ [0x000AFA, 0x000B04],
+ [0x000B0D, 0x000B0E],
+ [0x000B11, 0x000B12],
+ [0x000B3A, 0x000B3C],
+ [0x000B3E, 0x000B5B],
+ [0x000B62, 0x000B70],
+ [0x000B72, 0x000B82],
+ [0x000B8B, 0x000B8D],
+ [0x000B96, 0x000B98],
+ [0x000BA0, 0x000BA2],
+ [0x000BA5, 0x000BA7],
+ [0x000BAB, 0x000BAD],
+ [0x000BBA, 0x000BCF],
+ [0x000BD1, 0x000C04],
+ [0x000C3A, 0x000C3C],
+ [0x000C3E, 0x000C57],
+ [0x000C5B, 0x000C5C],
+ [0x000C5E, 0x000C5F],
+ [0x000C62, 0x000C7F],
+ [0x000C81, 0x000C84],
+ [0x000CBA, 0x000CBC],
+ [0x000CBE, 0x000CDC],
+ [0x000CE2, 0x000CF0],
+ [0x000CF3, 0x000D03],
+ [0x000D3B, 0x000D3C],
+ [0x000D3E, 0x000D4D],
+ [0x000D4F, 0x000D53],
+ [0x000D57, 0x000D5E],
+ [0x000D62, 0x000D79],
+ [0x000D80, 0x000D84],
+ [0x000D97, 0x000D99],
+ [0x000DBE, 0x000DBF],
+ [0x000DC7, 0x000E00],
+ [0x000E33, 0x000E3F],
+ [0x000E47, 0x000E80],
+ [0x000EB3, 0x000EBC],
+ [0x000EBE, 0x000EBF],
+ [0x000EC7, 0x000EDB],
+ [0x000EE0, 0x000EFF],
+ [0x000F01, 0x000F3F],
+ [0x000F6D, 0x000F87],
+ [0x000F8D, 0x000FFF],
+ [0x00102B, 0x00103E],
+ [0x001040, 0x00104F],
+ [0x001056, 0x001059],
+ [0x00105E, 0x001060],
+ [0x001062, 0x001064],
+ [0x001067, 0x00106D],
+ [0x001071, 0x001074],
+ [0x001082, 0x00108D],
+ [0x00108F, 0x00109F],
+ [0x0010C8, 0x0010CC],
+ [0x0010CE, 0x0010CF],
+ [0x00124E, 0x00124F],
+ [0x00125E, 0x00125F],
+ [0x00128E, 0x00128F],
+ [0x0012B6, 0x0012B7],
+ [0x0012C6, 0x0012C7],
+ [0x001316, 0x001317],
+ [0x00135B, 0x00137F],
+ [0x001390, 0x00139F],
+ [0x0013F6, 0x0013F7],
+ [0x0013FE, 0x001400],
+ [0x00166D, 0x00166E],
+ [0x00169B, 0x00169F],
+ [0x0016EB, 0x0016ED],
+ [0x0016F9, 0x0016FF],
+ [0x001712, 0x00171E],
+ [0x001732, 0x00173F],
+ [0x001752, 0x00175F],
+ [0x001771, 0x00177F],
+ [0x0017B4, 0x0017D6],
+ [0x0017D8, 0x0017DB],
+ [0x0017DD, 0x00181F],
+ [0x001879, 0x00187F],
+ [0x0018AB, 0x0018AF],
+ [0x0018F6, 0x0018FF],
+ [0x00191F, 0x00194F],
+ [0x00196E, 0x00196F],
+ [0x001975, 0x00197F],
+ [0x0019AC, 0x0019AF],
+ [0x0019CA, 0x0019FF],
+ [0x001A17, 0x001A1F],
+ [0x001A55, 0x001AA6],
+ [0x001AA8, 0x001B04],
+ [0x001B34, 0x001B44],
+ [0x001B4D, 0x001B82],
+ [0x001BA1, 0x001BAD],
+ [0x001BB0, 0x001BB9],
+ [0x001BE6, 0x001BFF],
+ [0x001C24, 0x001C4C],
+ [0x001C50, 0x001C59],
+ [0x001C7E, 0x001C7F],
+ [0x001C89, 0x001C8F],
+ [0x001CBB, 0x001CBC],
+ [0x001CC0, 0x001CE8],
+ [0x001CF7, 0x001CF9],
+ [0x001CFB, 0x001CFF],
+ [0x001DC0, 0x001DFF],
+ [0x001F16, 0x001F17],
+ [0x001F1E, 0x001F1F],
+ [0x001F46, 0x001F47],
+ [0x001F4E, 0x001F4F],
+ [0x001F7E, 0x001F7F],
+ [0x001FBF, 0x001FC1],
+ [0x001FCD, 0x001FCF],
+ [0x001FD4, 0x001FD5],
+ [0x001FDC, 0x001FDF],
+ [0x001FED, 0x001FF1],
+ [0x001FFD, 0x002070],
+ [0x002072, 0x00207E],
+ [0x002080, 0x00208F],
+ [0x00209D, 0x002101],
+ [0x002103, 0x002106],
+ [0x002108, 0x002109],
+ [0x002116, 0x002117],
+ [0x00211E, 0x002123],
+ [0x00213A, 0x00213B],
+ [0x002140, 0x002144],
+ [0x00214A, 0x00214D],
+ [0x00214F, 0x00215F],
+ [0x002189, 0x002BFF],
+ [0x002CE5, 0x002CEA],
+ [0x002CEF, 0x002CF1],
+ [0x002CF4, 0x002CFF],
+ [0x002D28, 0x002D2C],
+ [0x002D2E, 0x002D2F],
+ [0x002D68, 0x002D6E],
+ [0x002D70, 0x002D7F],
+ [0x002D97, 0x002D9F],
+ [0x002DDF, 0x003004],
+ [0x003008, 0x003020],
+ [0x00302A, 0x003030],
+ [0x003036, 0x003037],
+ [0x00303D, 0x003040],
+ [0x003097, 0x00309C],
+ [0x003100, 0x003104],
+ [0x00318F, 0x00319F],
+ [0x0031C0, 0x0031EF],
+ [0x003200, 0x0033FF],
+ [0x004DC0, 0x004DFF],
+ [0x00A48D, 0x00A4CF],
+ [0x00A4FE, 0x00A4FF],
+ [0x00A60D, 0x00A60F],
+ [0x00A620, 0x00A629],
+ [0x00A62C, 0x00A63F],
+ [0x00A66F, 0x00A67E],
+ [0x00A69E, 0x00A69F],
+ [0x00A6F0, 0x00A716],
+ [0x00A720, 0x00A721],
+ [0x00A789, 0x00A78A],
+ [0x00A7CB, 0x00A7CF],
+ [0x00A7DA, 0x00A7F1],
+ [0x00A823, 0x00A83F],
+ [0x00A874, 0x00A881],
+ [0x00A8B4, 0x00A8F1],
+ [0x00A8F8, 0x00A8FA],
+ [0x00A8FF, 0x00A909],
+ [0x00A926, 0x00A92F],
+ [0x00A947, 0x00A95F],
+ [0x00A97D, 0x00A983],
+ [0x00A9B3, 0x00A9CE],
+ [0x00A9D0, 0x00A9DF],
+ [0x00A9F0, 0x00A9F9],
+ [0x00AA29, 0x00AA3F],
+ [0x00AA4C, 0x00AA5F],
+ [0x00AA77, 0x00AA79],
+ [0x00AA7B, 0x00AA7D],
+ [0x00AAB2, 0x00AAB4],
+ [0x00AAB7, 0x00AAB8],
+ [0x00AABE, 0x00AABF],
+ [0x00AAC3, 0x00AADA],
+ [0x00AADE, 0x00AADF],
+ [0x00AAEB, 0x00AAF1],
+ [0x00AAF5, 0x00AB00],
+ [0x00AB07, 0x00AB08],
+ [0x00AB0F, 0x00AB10],
+ [0x00AB17, 0x00AB1F],
+ [0x00AB6A, 0x00AB6F],
+ [0x00ABE3, 0x00ABFF],
+ [0x00D7A4, 0x00D7AF],
+ [0x00D7C7, 0x00D7CA],
+ [0x00D7FC, 0x00DBFF],
+ [0x00E000, 0x00F8FF],
+ [0x00FA6E, 0x00FA6F],
+ [0x00FADA, 0x00FAFF],
+ [0x00FB07, 0x00FB12],
+ [0x00FB18, 0x00FB1C],
+ [0x00FBB2, 0x00FBD2],
+ [0x00FC5E, 0x00FC63],
+ [0x00FD3E, 0x00FD4F],
+ [0x00FD90, 0x00FD91],
+ [0x00FDC8, 0x00FDEF],
+ [0x00FDFA, 0x00FE70],
+ [0x00FE74, 0x00FE76],
+ [0x00FEFD, 0x00FF20],
+ [0x00FF3B, 0x00FF40],
+ [0x00FF5B, 0x00FF65],
+ [0x00FF9E, 0x00FF9F],
+ [0x00FFBF, 0x00FFC1],
+ [0x00FFC8, 0x00FFC9],
+ [0x00FFD0, 0x00FFD1],
+ [0x00FFD8, 0x00FFD9],
+ [0x00FFDD, 0x00FFFF],
+ [0x01004E, 0x01004F],
+ [0x01005E, 0x01007F],
+ [0x0100FB, 0x01013F],
+ [0x010175, 0x01027F],
+ [0x01029D, 0x01029F],
+ [0x0102D1, 0x0102FF],
+ [0x010320, 0x01032C],
+ [0x01034B, 0x01034F],
+ [0x010376, 0x01037F],
+ [0x01039E, 0x01039F],
+ [0x0103C4, 0x0103C7],
+ [0x0103D6, 0x0103FF],
+ [0x01049E, 0x0104AF],
+ [0x0104D4, 0x0104D7],
+ [0x0104FC, 0x0104FF],
+ [0x010528, 0x01052F],
+ [0x010564, 0x01056F],
+ [0x0105BD, 0x0105FF],
+ [0x010737, 0x01073F],
+ [0x010756, 0x01075F],
+ [0x010768, 0x01077F],
+ [0x0107BB, 0x0107FF],
+ [0x010806, 0x010807],
+ [0x010839, 0x01083B],
+ [0x01083D, 0x01083E],
+ [0x010856, 0x01085F],
+ [0x010877, 0x01087F],
+ [0x01089F, 0x0108DF],
+ [0x0108F6, 0x0108FF],
+ [0x010916, 0x01091F],
+ [0x01093A, 0x01097F],
+ [0x0109B8, 0x0109BD],
+ [0x0109C0, 0x0109FF],
+ [0x010A01, 0x010A0F],
+ [0x010A36, 0x010A5F],
+ [0x010A7D, 0x010A7F],
+ [0x010A9D, 0x010ABF],
+ [0x010AE5, 0x010AFF],
+ [0x010B36, 0x010B3F],
+ [0x010B56, 0x010B5F],
+ [0x010B73, 0x010B7F],
+ [0x010B92, 0x010BFF],
+ [0x010C49, 0x010C7F],
+ [0x010CB3, 0x010CBF],
+ [0x010CF3, 0x010CFF],
+ [0x010D24, 0x010E7F],
+ [0x010EAA, 0x010EAF],
+ [0x010EB2, 0x010EFF],
+ [0x010F1D, 0x010F26],
+ [0x010F28, 0x010F2F],
+ [0x010F46, 0x010F6F],
+ [0x010F82, 0x010FAF],
+ [0x010FC5, 0x010FDF],
+ [0x010FF7, 0x011002],
+ [0x011038, 0x011070],
+ [0x011073, 0x011074],
+ [0x011076, 0x011082],
+ [0x0110B0, 0x0110CF],
+ [0x0110E9, 0x011102],
+ [0x011127, 0x011143],
+ [0x011145, 0x011146],
+ [0x011148, 0x01114F],
+ [0x011173, 0x011175],
+ [0x011177, 0x011182],
+ [0x0111B3, 0x0111C0],
+ [0x0111C5, 0x0111D9],
+ [0x0111DD, 0x0111FF],
+ [0x01122C, 0x01123E],
+ [0x011241, 0x01127F],
+ [0x0112A9, 0x0112AF],
+ [0x0112DF, 0x011304],
+ [0x01130D, 0x01130E],
+ [0x011311, 0x011312],
+ [0x01133A, 0x01133C],
+ [0x01133E, 0x01134F],
+ [0x011351, 0x01135C],
+ [0x011362, 0x0113FF],
+ [0x011435, 0x011446],
+ [0x01144B, 0x01145E],
+ [0x011462, 0x01147F],
+ [0x0114B0, 0x0114C3],
+ [0x0114C8, 0x01157F],
+ [0x0115AF, 0x0115D7],
+ [0x0115DC, 0x0115FF],
+ [0x011630, 0x011643],
+ [0x011645, 0x01167F],
+ [0x0116AB, 0x0116B7],
+ [0x0116B9, 0x0116FF],
+ [0x01171B, 0x01173F],
+ [0x011747, 0x0117FF],
+ [0x01182C, 0x01189F],
+ [0x0118E0, 0x0118FE],
+ [0x011907, 0x011908],
+ [0x01190A, 0x01190B],
+ [0x011930, 0x01193E],
+ [0x011942, 0x01199F],
+ [0x0119A8, 0x0119A9],
+ [0x0119D1, 0x0119E0],
+ [0x0119E4, 0x0119FF],
+ [0x011A01, 0x011A0A],
+ [0x011A33, 0x011A39],
+ [0x011A3B, 0x011A4F],
+ [0x011A51, 0x011A5B],
+ [0x011A8A, 0x011A9C],
+ [0x011A9E, 0x011AAF],
+ [0x011AF9, 0x011BFF],
+ [0x011C2F, 0x011C3F],
+ [0x011C41, 0x011C71],
+ [0x011C90, 0x011CFF],
+ [0x011D31, 0x011D45],
+ [0x011D47, 0x011D5F],
+ [0x011D8A, 0x011D97],
+ [0x011D99, 0x011EDF],
+ [0x011EF3, 0x011F01],
+ [0x011F34, 0x011FAF],
+ [0x011FB1, 0x011FFF],
+ [0x01239A, 0x0123FF],
+ [0x01246F, 0x01247F],
+ [0x012544, 0x012F8F],
+ [0x012FF1, 0x012FFF],
+ [0x013430, 0x013440],
+ [0x013447, 0x0143FF],
+ [0x014647, 0x0167FF],
+ [0x016A39, 0x016A3F],
+ [0x016A5F, 0x016A6F],
+ [0x016ABF, 0x016ACF],
+ [0x016AEE, 0x016AFF],
+ [0x016B30, 0x016B3F],
+ [0x016B44, 0x016B62],
+ [0x016B78, 0x016B7C],
+ [0x016B90, 0x016E3F],
+ [0x016E80, 0x016EFF],
+ [0x016F4B, 0x016F4F],
+ [0x016F51, 0x016F92],
+ [0x016FA0, 0x016FDF],
+ [0x016FE4, 0x016FFF],
+ [0x0187F8, 0x0187FF],
+ [0x018CD6, 0x018CFF],
+ [0x018D09, 0x01AFEF],
+ [0x01B123, 0x01B131],
+ [0x01B133, 0x01B14F],
+ [0x01B153, 0x01B154],
+ [0x01B156, 0x01B163],
+ [0x01B168, 0x01B16F],
+ [0x01B2FC, 0x01BBFF],
+ [0x01BC6B, 0x01BC6F],
+ [0x01BC7D, 0x01BC7F],
+ [0x01BC89, 0x01BC8F],
+ [0x01BC9A, 0x01D3FF],
+ [0x01D4A0, 0x01D4A1],
+ [0x01D4A3, 0x01D4A4],
+ [0x01D4A7, 0x01D4A8],
+ [0x01D50B, 0x01D50C],
+ [0x01D547, 0x01D549],
+ [0x01D6A6, 0x01D6A7],
+ [0x01D7CC, 0x01DEFF],
+ [0x01DF1F, 0x01DF24],
+ [0x01DF2B, 0x01E02F],
+ [0x01E06E, 0x01E0FF],
+ [0x01E12D, 0x01E136],
+ [0x01E13E, 0x01E14D],
+ [0x01E14F, 0x01E28F],
+ [0x01E2AE, 0x01E2BF],
+ [0x01E2EC, 0x01E4CF],
+ [0x01E4EC, 0x01E7DF],
+ [0x01E8C5, 0x01E8FF],
+ [0x01E944, 0x01E94A],
+ [0x01E94C, 0x01EDFF],
+ [0x01EE25, 0x01EE26],
+ [0x01EE3C, 0x01EE41],
+ [0x01EE43, 0x01EE46],
+ [0x01EE55, 0x01EE56],
+ [0x01EE65, 0x01EE66],
+ [0x01EE9C, 0x01EEA0],
+ [0x01EEBC, 0x01FFFF],
+ [0x02A6E0, 0x02A6FF],
+ [0x02B73A, 0x02B73F],
+ [0x02B81E, 0x02B81F],
+ [0x02CEA2, 0x02CEAF],
+ [0x02EBE1, 0x02F7FF],
+ [0x02FA1E, 0x02FFFF],
+ [0x03134B, 0x03134F],
+ [0x0323B0, 0x10FFFF]
+ ]
+});
+testPropertyEscapes(
+ /^\P{XID_Start}+$/u,
+ nonMatchSymbols,
+ "\\P{XID_Start}"
+);
+testPropertyEscapes(
+ /^\P{XIDS}+$/u,
+ nonMatchSymbols,
+ "\\P{XIDS}"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/browser.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/shell.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/shell.js
new file mode 100644
index 0000000000..591d3924c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/shell.js
@@ -0,0 +1,115 @@
+// GENERATED, DO NOT EDIT
+// file: regExpUtils.js
+// Copyright (C) 2017 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+ Collection of functions used to assert the correctness of RegExp objects.
+defines: [buildString, testPropertyEscapes, testPropertyOfStrings, testExtendedCharacterClass, matchValidator]
+---*/
+
+function buildString(args) {
+ // Use member expressions rather than destructuring `args` for improved
+ // compatibility with engines that only implement assignment patterns
+ // partially or not at all.
+ const loneCodePoints = args.loneCodePoints;
+ const ranges = args.ranges;
+ const CHUNK_SIZE = 10000;
+ let result = Reflect.apply(String.fromCodePoint, null, loneCodePoints);
+ for (let i = 0; i < ranges.length; i++) {
+ const range = ranges[i];
+ const start = range[0];
+ const end = range[1];
+ const codePoints = [];
+ for (let length = 0, codePoint = start; codePoint <= end; codePoint++) {
+ codePoints[length++] = codePoint;
+ if (length === CHUNK_SIZE) {
+ result += Reflect.apply(String.fromCodePoint, null, codePoints);
+ codePoints.length = length = 0;
+ }
+ }
+ result += Reflect.apply(String.fromCodePoint, null, codePoints);
+ }
+ return result;
+}
+
+function printCodePoint(codePoint) {
+ const hex = codePoint
+ .toString(16)
+ .toUpperCase()
+ .padStart(6, "0");
+ return `U+${hex}`;
+}
+
+function printStringCodePoints(string) {
+ const buf = [];
+ for (const symbol of string) {
+ const formatted = printCodePoint(symbol.codePointAt(0));
+ buf.push(formatted);
+ }
+ return buf.join(' ');
+}
+
+function testPropertyEscapes(regExp, string, expression) {
+ if (!regExp.test(string)) {
+ for (const symbol of string) {
+ const formatted = printCodePoint(symbol.codePointAt(0));
+ assert(
+ regExp.test(symbol),
+ `\`${ expression }\` should match ${ formatted } (\`${ symbol }\`)`
+ );
+ }
+ }
+}
+
+function testPropertyOfStrings(args) {
+ // Use member expressions rather than destructuring `args` for improved
+ // compatibility with engines that only implement assignment patterns
+ // partially or not at all.
+ const regExp = args.regExp;
+ const expression = args.expression;
+ const matchStrings = args.matchStrings;
+ const nonMatchStrings = args.nonMatchStrings;
+ const allStrings = matchStrings.join('');
+ if (!regExp.test(allStrings)) {
+ for (const string of matchStrings) {
+ assert(
+ regExp.test(string),
+ `\`${ expression }\` should match ${ string } (${ printStringCodePoints(string) })`
+ );
+ }
+ }
+
+ if (!nonMatchStrings) return;
+
+ const allNonMatchStrings = nonMatchStrings.join('');
+ if (regExp.test(allNonMatchStrings)) {
+ for (const string of nonMatchStrings) {
+ assert(
+ !regExp.test(string),
+ `\`${ expression }\` should not match ${ string } (${ printStringCodePoints(string) })`
+ );
+ }
+ }
+}
+
+// The exact same logic can be used to test extended character classes
+// as enabled through the RegExp `v` flag. This is useful to test not
+// just standalone properties of strings, but also string literals, and
+// set operations.
+const testExtendedCharacterClass = testPropertyOfStrings;
+
+// Returns a function that validates a RegExp match result.
+//
+// Example:
+//
+// var validate = matchValidator(['b'], 1, 'abc');
+// validate(/b/.exec('abc'));
+//
+function matchValidator(expectedEntries, expectedIndex, expectedInput) {
+ return function(match) {
+ assert.compareArray(match, expectedEntries, 'Match entries');
+ assert.sameValue(match.index, expectedIndex, 'Match index');
+ assert.sameValue(match.input, expectedInput, 'Match input');
+ }
+}
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-CharacterClass.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-CharacterClass.js
new file mode 100644
index 0000000000..5f6c0cf750
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-CharacterClass.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Negating Unicode property escapes for `Basic_Emoji` (property of strings) with `[^\p{…}]` throws an early error.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-isvalidregularexpressionliteral
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/[^\p{Basic_Emoji}]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-P.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-P.js
new file mode 100644
index 0000000000..7e2b398be8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-P.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Negating Unicode property escapes for `Basic_Emoji` (property of strings) with `\P{…}` throws an early error.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-isvalidregularexpressionliteral
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Basic_Emoji}/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-u.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-u.js
new file mode 100644
index 0000000000..59ad6d64d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-u.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Basic_Emoji` (property of strings) with the `u` flag throws an early error. Properties of strings are only supported through the `v` flag.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-patterns-static-semantics-early-errors
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Basic_Emoji}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji.js
new file mode 100644
index 0000000000..bb50230273
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji.js
@@ -0,0 +1,1421 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Basic_Emoji` (property of strings)
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testPropertyOfStrings({
+ regExp: /^\p{Basic_Emoji}+$/v,
+ expression: "\\p{Basic_Emoji}",
+ matchStrings: [
+ "\u231A",
+ "\u231B",
+ "\u23E9",
+ "\u23EA",
+ "\u23EB",
+ "\u23EC",
+ "\u23F0",
+ "\u23F3",
+ "\u25FD",
+ "\u25FE",
+ "\u2614",
+ "\u2615",
+ "\u2648",
+ "\u2649",
+ "\u264A",
+ "\u264B",
+ "\u264C",
+ "\u264D",
+ "\u264E",
+ "\u264F",
+ "\u2650",
+ "\u2651",
+ "\u2652",
+ "\u2653",
+ "\u267F",
+ "\u2693",
+ "\u26A1",
+ "\u26AA",
+ "\u26AB",
+ "\u26BD",
+ "\u26BE",
+ "\u26C4",
+ "\u26C5",
+ "\u26CE",
+ "\u26D4",
+ "\u26EA",
+ "\u26F2",
+ "\u26F3",
+ "\u26F5",
+ "\u26FA",
+ "\u26FD",
+ "\u2705",
+ "\u270A",
+ "\u270B",
+ "\u2728",
+ "\u274C",
+ "\u274E",
+ "\u2753",
+ "\u2754",
+ "\u2755",
+ "\u2757",
+ "\u2795",
+ "\u2796",
+ "\u2797",
+ "\u27B0",
+ "\u27BF",
+ "\u2B1B",
+ "\u2B1C",
+ "\u2B50",
+ "\u2B55",
+ "\u{1F004}",
+ "\u{1F0CF}",
+ "\u{1F18E}",
+ "\u{1F191}",
+ "\u{1F192}",
+ "\u{1F193}",
+ "\u{1F194}",
+ "\u{1F195}",
+ "\u{1F196}",
+ "\u{1F197}",
+ "\u{1F198}",
+ "\u{1F199}",
+ "\u{1F19A}",
+ "\u{1F201}",
+ "\u{1F21A}",
+ "\u{1F22F}",
+ "\u{1F232}",
+ "\u{1F233}",
+ "\u{1F234}",
+ "\u{1F235}",
+ "\u{1F236}",
+ "\u{1F238}",
+ "\u{1F239}",
+ "\u{1F23A}",
+ "\u{1F250}",
+ "\u{1F251}",
+ "\u{1F300}",
+ "\u{1F301}",
+ "\u{1F302}",
+ "\u{1F303}",
+ "\u{1F304}",
+ "\u{1F305}",
+ "\u{1F306}",
+ "\u{1F307}",
+ "\u{1F308}",
+ "\u{1F309}",
+ "\u{1F30A}",
+ "\u{1F30B}",
+ "\u{1F30C}",
+ "\u{1F30D}",
+ "\u{1F30E}",
+ "\u{1F30F}",
+ "\u{1F310}",
+ "\u{1F311}",
+ "\u{1F312}",
+ "\u{1F313}",
+ "\u{1F314}",
+ "\u{1F315}",
+ "\u{1F316}",
+ "\u{1F317}",
+ "\u{1F318}",
+ "\u{1F319}",
+ "\u{1F31A}",
+ "\u{1F31B}",
+ "\u{1F31C}",
+ "\u{1F31D}",
+ "\u{1F31E}",
+ "\u{1F31F}",
+ "\u{1F320}",
+ "\u{1F32D}",
+ "\u{1F32E}",
+ "\u{1F32F}",
+ "\u{1F330}",
+ "\u{1F331}",
+ "\u{1F332}",
+ "\u{1F333}",
+ "\u{1F334}",
+ "\u{1F335}",
+ "\u{1F337}",
+ "\u{1F338}",
+ "\u{1F339}",
+ "\u{1F33A}",
+ "\u{1F33B}",
+ "\u{1F33C}",
+ "\u{1F33D}",
+ "\u{1F33E}",
+ "\u{1F33F}",
+ "\u{1F340}",
+ "\u{1F341}",
+ "\u{1F342}",
+ "\u{1F343}",
+ "\u{1F344}",
+ "\u{1F345}",
+ "\u{1F346}",
+ "\u{1F347}",
+ "\u{1F348}",
+ "\u{1F349}",
+ "\u{1F34A}",
+ "\u{1F34B}",
+ "\u{1F34C}",
+ "\u{1F34D}",
+ "\u{1F34E}",
+ "\u{1F34F}",
+ "\u{1F350}",
+ "\u{1F351}",
+ "\u{1F352}",
+ "\u{1F353}",
+ "\u{1F354}",
+ "\u{1F355}",
+ "\u{1F356}",
+ "\u{1F357}",
+ "\u{1F358}",
+ "\u{1F359}",
+ "\u{1F35A}",
+ "\u{1F35B}",
+ "\u{1F35C}",
+ "\u{1F35D}",
+ "\u{1F35E}",
+ "\u{1F35F}",
+ "\u{1F360}",
+ "\u{1F361}",
+ "\u{1F362}",
+ "\u{1F363}",
+ "\u{1F364}",
+ "\u{1F365}",
+ "\u{1F366}",
+ "\u{1F367}",
+ "\u{1F368}",
+ "\u{1F369}",
+ "\u{1F36A}",
+ "\u{1F36B}",
+ "\u{1F36C}",
+ "\u{1F36D}",
+ "\u{1F36E}",
+ "\u{1F36F}",
+ "\u{1F370}",
+ "\u{1F371}",
+ "\u{1F372}",
+ "\u{1F373}",
+ "\u{1F374}",
+ "\u{1F375}",
+ "\u{1F376}",
+ "\u{1F377}",
+ "\u{1F378}",
+ "\u{1F379}",
+ "\u{1F37A}",
+ "\u{1F37B}",
+ "\u{1F37C}",
+ "\u{1F37E}",
+ "\u{1F37F}",
+ "\u{1F380}",
+ "\u{1F381}",
+ "\u{1F382}",
+ "\u{1F383}",
+ "\u{1F384}",
+ "\u{1F385}",
+ "\u{1F386}",
+ "\u{1F387}",
+ "\u{1F388}",
+ "\u{1F389}",
+ "\u{1F38A}",
+ "\u{1F38B}",
+ "\u{1F38C}",
+ "\u{1F38D}",
+ "\u{1F38E}",
+ "\u{1F38F}",
+ "\u{1F390}",
+ "\u{1F391}",
+ "\u{1F392}",
+ "\u{1F393}",
+ "\u{1F3A0}",
+ "\u{1F3A1}",
+ "\u{1F3A2}",
+ "\u{1F3A3}",
+ "\u{1F3A4}",
+ "\u{1F3A5}",
+ "\u{1F3A6}",
+ "\u{1F3A7}",
+ "\u{1F3A8}",
+ "\u{1F3A9}",
+ "\u{1F3AA}",
+ "\u{1F3AB}",
+ "\u{1F3AC}",
+ "\u{1F3AD}",
+ "\u{1F3AE}",
+ "\u{1F3AF}",
+ "\u{1F3B0}",
+ "\u{1F3B1}",
+ "\u{1F3B2}",
+ "\u{1F3B3}",
+ "\u{1F3B4}",
+ "\u{1F3B5}",
+ "\u{1F3B6}",
+ "\u{1F3B7}",
+ "\u{1F3B8}",
+ "\u{1F3B9}",
+ "\u{1F3BA}",
+ "\u{1F3BB}",
+ "\u{1F3BC}",
+ "\u{1F3BD}",
+ "\u{1F3BE}",
+ "\u{1F3BF}",
+ "\u{1F3C0}",
+ "\u{1F3C1}",
+ "\u{1F3C2}",
+ "\u{1F3C3}",
+ "\u{1F3C4}",
+ "\u{1F3C5}",
+ "\u{1F3C6}",
+ "\u{1F3C7}",
+ "\u{1F3C8}",
+ "\u{1F3C9}",
+ "\u{1F3CA}",
+ "\u{1F3CF}",
+ "\u{1F3D0}",
+ "\u{1F3D1}",
+ "\u{1F3D2}",
+ "\u{1F3D3}",
+ "\u{1F3E0}",
+ "\u{1F3E1}",
+ "\u{1F3E2}",
+ "\u{1F3E3}",
+ "\u{1F3E4}",
+ "\u{1F3E5}",
+ "\u{1F3E6}",
+ "\u{1F3E7}",
+ "\u{1F3E8}",
+ "\u{1F3E9}",
+ "\u{1F3EA}",
+ "\u{1F3EB}",
+ "\u{1F3EC}",
+ "\u{1F3ED}",
+ "\u{1F3EE}",
+ "\u{1F3EF}",
+ "\u{1F3F0}",
+ "\u{1F3F4}",
+ "\u{1F3F8}",
+ "\u{1F3F9}",
+ "\u{1F3FA}",
+ "\u{1F3FB}",
+ "\u{1F3FC}",
+ "\u{1F3FD}",
+ "\u{1F3FE}",
+ "\u{1F3FF}",
+ "\u{1F400}",
+ "\u{1F401}",
+ "\u{1F402}",
+ "\u{1F403}",
+ "\u{1F404}",
+ "\u{1F405}",
+ "\u{1F406}",
+ "\u{1F407}",
+ "\u{1F408}",
+ "\u{1F409}",
+ "\u{1F40A}",
+ "\u{1F40B}",
+ "\u{1F40C}",
+ "\u{1F40D}",
+ "\u{1F40E}",
+ "\u{1F40F}",
+ "\u{1F410}",
+ "\u{1F411}",
+ "\u{1F412}",
+ "\u{1F413}",
+ "\u{1F414}",
+ "\u{1F415}",
+ "\u{1F416}",
+ "\u{1F417}",
+ "\u{1F418}",
+ "\u{1F419}",
+ "\u{1F41A}",
+ "\u{1F41B}",
+ "\u{1F41C}",
+ "\u{1F41D}",
+ "\u{1F41E}",
+ "\u{1F41F}",
+ "\u{1F420}",
+ "\u{1F421}",
+ "\u{1F422}",
+ "\u{1F423}",
+ "\u{1F424}",
+ "\u{1F425}",
+ "\u{1F426}",
+ "\u{1F427}",
+ "\u{1F428}",
+ "\u{1F429}",
+ "\u{1F42A}",
+ "\u{1F42B}",
+ "\u{1F42C}",
+ "\u{1F42D}",
+ "\u{1F42E}",
+ "\u{1F42F}",
+ "\u{1F430}",
+ "\u{1F431}",
+ "\u{1F432}",
+ "\u{1F433}",
+ "\u{1F434}",
+ "\u{1F435}",
+ "\u{1F436}",
+ "\u{1F437}",
+ "\u{1F438}",
+ "\u{1F439}",
+ "\u{1F43A}",
+ "\u{1F43B}",
+ "\u{1F43C}",
+ "\u{1F43D}",
+ "\u{1F43E}",
+ "\u{1F440}",
+ "\u{1F442}",
+ "\u{1F443}",
+ "\u{1F444}",
+ "\u{1F445}",
+ "\u{1F446}",
+ "\u{1F447}",
+ "\u{1F448}",
+ "\u{1F449}",
+ "\u{1F44A}",
+ "\u{1F44B}",
+ "\u{1F44C}",
+ "\u{1F44D}",
+ "\u{1F44E}",
+ "\u{1F44F}",
+ "\u{1F450}",
+ "\u{1F451}",
+ "\u{1F452}",
+ "\u{1F453}",
+ "\u{1F454}",
+ "\u{1F455}",
+ "\u{1F456}",
+ "\u{1F457}",
+ "\u{1F458}",
+ "\u{1F459}",
+ "\u{1F45A}",
+ "\u{1F45B}",
+ "\u{1F45C}",
+ "\u{1F45D}",
+ "\u{1F45E}",
+ "\u{1F45F}",
+ "\u{1F460}",
+ "\u{1F461}",
+ "\u{1F462}",
+ "\u{1F463}",
+ "\u{1F464}",
+ "\u{1F465}",
+ "\u{1F466}",
+ "\u{1F467}",
+ "\u{1F468}",
+ "\u{1F469}",
+ "\u{1F46A}",
+ "\u{1F46B}",
+ "\u{1F46C}",
+ "\u{1F46D}",
+ "\u{1F46E}",
+ "\u{1F46F}",
+ "\u{1F470}",
+ "\u{1F471}",
+ "\u{1F472}",
+ "\u{1F473}",
+ "\u{1F474}",
+ "\u{1F475}",
+ "\u{1F476}",
+ "\u{1F477}",
+ "\u{1F478}",
+ "\u{1F479}",
+ "\u{1F47A}",
+ "\u{1F47B}",
+ "\u{1F47C}",
+ "\u{1F47D}",
+ "\u{1F47E}",
+ "\u{1F47F}",
+ "\u{1F480}",
+ "\u{1F481}",
+ "\u{1F482}",
+ "\u{1F483}",
+ "\u{1F484}",
+ "\u{1F485}",
+ "\u{1F486}",
+ "\u{1F487}",
+ "\u{1F488}",
+ "\u{1F489}",
+ "\u{1F48A}",
+ "\u{1F48B}",
+ "\u{1F48C}",
+ "\u{1F48D}",
+ "\u{1F48E}",
+ "\u{1F48F}",
+ "\u{1F490}",
+ "\u{1F491}",
+ "\u{1F492}",
+ "\u{1F493}",
+ "\u{1F494}",
+ "\u{1F495}",
+ "\u{1F496}",
+ "\u{1F497}",
+ "\u{1F498}",
+ "\u{1F499}",
+ "\u{1F49A}",
+ "\u{1F49B}",
+ "\u{1F49C}",
+ "\u{1F49D}",
+ "\u{1F49E}",
+ "\u{1F49F}",
+ "\u{1F4A0}",
+ "\u{1F4A1}",
+ "\u{1F4A2}",
+ "\u{1F4A3}",
+ "\u{1F4A4}",
+ "\u{1F4A5}",
+ "\u{1F4A6}",
+ "\u{1F4A7}",
+ "\u{1F4A8}",
+ "\u{1F4A9}",
+ "\u{1F4AA}",
+ "\u{1F4AB}",
+ "\u{1F4AC}",
+ "\u{1F4AD}",
+ "\u{1F4AE}",
+ "\u{1F4AF}",
+ "\u{1F4B0}",
+ "\u{1F4B1}",
+ "\u{1F4B2}",
+ "\u{1F4B3}",
+ "\u{1F4B4}",
+ "\u{1F4B5}",
+ "\u{1F4B6}",
+ "\u{1F4B7}",
+ "\u{1F4B8}",
+ "\u{1F4B9}",
+ "\u{1F4BA}",
+ "\u{1F4BB}",
+ "\u{1F4BC}",
+ "\u{1F4BD}",
+ "\u{1F4BE}",
+ "\u{1F4BF}",
+ "\u{1F4C0}",
+ "\u{1F4C1}",
+ "\u{1F4C2}",
+ "\u{1F4C3}",
+ "\u{1F4C4}",
+ "\u{1F4C5}",
+ "\u{1F4C6}",
+ "\u{1F4C7}",
+ "\u{1F4C8}",
+ "\u{1F4C9}",
+ "\u{1F4CA}",
+ "\u{1F4CB}",
+ "\u{1F4CC}",
+ "\u{1F4CD}",
+ "\u{1F4CE}",
+ "\u{1F4CF}",
+ "\u{1F4D0}",
+ "\u{1F4D1}",
+ "\u{1F4D2}",
+ "\u{1F4D3}",
+ "\u{1F4D4}",
+ "\u{1F4D5}",
+ "\u{1F4D6}",
+ "\u{1F4D7}",
+ "\u{1F4D8}",
+ "\u{1F4D9}",
+ "\u{1F4DA}",
+ "\u{1F4DB}",
+ "\u{1F4DC}",
+ "\u{1F4DD}",
+ "\u{1F4DE}",
+ "\u{1F4DF}",
+ "\u{1F4E0}",
+ "\u{1F4E1}",
+ "\u{1F4E2}",
+ "\u{1F4E3}",
+ "\u{1F4E4}",
+ "\u{1F4E5}",
+ "\u{1F4E6}",
+ "\u{1F4E7}",
+ "\u{1F4E8}",
+ "\u{1F4E9}",
+ "\u{1F4EA}",
+ "\u{1F4EB}",
+ "\u{1F4EC}",
+ "\u{1F4ED}",
+ "\u{1F4EE}",
+ "\u{1F4EF}",
+ "\u{1F4F0}",
+ "\u{1F4F1}",
+ "\u{1F4F2}",
+ "\u{1F4F3}",
+ "\u{1F4F4}",
+ "\u{1F4F5}",
+ "\u{1F4F6}",
+ "\u{1F4F7}",
+ "\u{1F4F8}",
+ "\u{1F4F9}",
+ "\u{1F4FA}",
+ "\u{1F4FB}",
+ "\u{1F4FC}",
+ "\u{1F4FF}",
+ "\u{1F500}",
+ "\u{1F501}",
+ "\u{1F502}",
+ "\u{1F503}",
+ "\u{1F504}",
+ "\u{1F505}",
+ "\u{1F506}",
+ "\u{1F507}",
+ "\u{1F508}",
+ "\u{1F509}",
+ "\u{1F50A}",
+ "\u{1F50B}",
+ "\u{1F50C}",
+ "\u{1F50D}",
+ "\u{1F50E}",
+ "\u{1F50F}",
+ "\u{1F510}",
+ "\u{1F511}",
+ "\u{1F512}",
+ "\u{1F513}",
+ "\u{1F514}",
+ "\u{1F515}",
+ "\u{1F516}",
+ "\u{1F517}",
+ "\u{1F518}",
+ "\u{1F519}",
+ "\u{1F51A}",
+ "\u{1F51B}",
+ "\u{1F51C}",
+ "\u{1F51D}",
+ "\u{1F51E}",
+ "\u{1F51F}",
+ "\u{1F520}",
+ "\u{1F521}",
+ "\u{1F522}",
+ "\u{1F523}",
+ "\u{1F524}",
+ "\u{1F525}",
+ "\u{1F526}",
+ "\u{1F527}",
+ "\u{1F528}",
+ "\u{1F529}",
+ "\u{1F52A}",
+ "\u{1F52B}",
+ "\u{1F52C}",
+ "\u{1F52D}",
+ "\u{1F52E}",
+ "\u{1F52F}",
+ "\u{1F530}",
+ "\u{1F531}",
+ "\u{1F532}",
+ "\u{1F533}",
+ "\u{1F534}",
+ "\u{1F535}",
+ "\u{1F536}",
+ "\u{1F537}",
+ "\u{1F538}",
+ "\u{1F539}",
+ "\u{1F53A}",
+ "\u{1F53B}",
+ "\u{1F53C}",
+ "\u{1F53D}",
+ "\u{1F54B}",
+ "\u{1F54C}",
+ "\u{1F54D}",
+ "\u{1F54E}",
+ "\u{1F550}",
+ "\u{1F551}",
+ "\u{1F552}",
+ "\u{1F553}",
+ "\u{1F554}",
+ "\u{1F555}",
+ "\u{1F556}",
+ "\u{1F557}",
+ "\u{1F558}",
+ "\u{1F559}",
+ "\u{1F55A}",
+ "\u{1F55B}",
+ "\u{1F55C}",
+ "\u{1F55D}",
+ "\u{1F55E}",
+ "\u{1F55F}",
+ "\u{1F560}",
+ "\u{1F561}",
+ "\u{1F562}",
+ "\u{1F563}",
+ "\u{1F564}",
+ "\u{1F565}",
+ "\u{1F566}",
+ "\u{1F567}",
+ "\u{1F57A}",
+ "\u{1F595}",
+ "\u{1F596}",
+ "\u{1F5A4}",
+ "\u{1F5FB}",
+ "\u{1F5FC}",
+ "\u{1F5FD}",
+ "\u{1F5FE}",
+ "\u{1F5FF}",
+ "\u{1F600}",
+ "\u{1F601}",
+ "\u{1F602}",
+ "\u{1F603}",
+ "\u{1F604}",
+ "\u{1F605}",
+ "\u{1F606}",
+ "\u{1F607}",
+ "\u{1F608}",
+ "\u{1F609}",
+ "\u{1F60A}",
+ "\u{1F60B}",
+ "\u{1F60C}",
+ "\u{1F60D}",
+ "\u{1F60E}",
+ "\u{1F60F}",
+ "\u{1F610}",
+ "\u{1F611}",
+ "\u{1F612}",
+ "\u{1F613}",
+ "\u{1F614}",
+ "\u{1F615}",
+ "\u{1F616}",
+ "\u{1F617}",
+ "\u{1F618}",
+ "\u{1F619}",
+ "\u{1F61A}",
+ "\u{1F61B}",
+ "\u{1F61C}",
+ "\u{1F61D}",
+ "\u{1F61E}",
+ "\u{1F61F}",
+ "\u{1F620}",
+ "\u{1F621}",
+ "\u{1F622}",
+ "\u{1F623}",
+ "\u{1F624}",
+ "\u{1F625}",
+ "\u{1F626}",
+ "\u{1F627}",
+ "\u{1F628}",
+ "\u{1F629}",
+ "\u{1F62A}",
+ "\u{1F62B}",
+ "\u{1F62C}",
+ "\u{1F62D}",
+ "\u{1F62E}",
+ "\u{1F62F}",
+ "\u{1F630}",
+ "\u{1F631}",
+ "\u{1F632}",
+ "\u{1F633}",
+ "\u{1F634}",
+ "\u{1F635}",
+ "\u{1F636}",
+ "\u{1F637}",
+ "\u{1F638}",
+ "\u{1F639}",
+ "\u{1F63A}",
+ "\u{1F63B}",
+ "\u{1F63C}",
+ "\u{1F63D}",
+ "\u{1F63E}",
+ "\u{1F63F}",
+ "\u{1F640}",
+ "\u{1F641}",
+ "\u{1F642}",
+ "\u{1F643}",
+ "\u{1F644}",
+ "\u{1F645}",
+ "\u{1F646}",
+ "\u{1F647}",
+ "\u{1F648}",
+ "\u{1F649}",
+ "\u{1F64A}",
+ "\u{1F64B}",
+ "\u{1F64C}",
+ "\u{1F64D}",
+ "\u{1F64E}",
+ "\u{1F64F}",
+ "\u{1F680}",
+ "\u{1F681}",
+ "\u{1F682}",
+ "\u{1F683}",
+ "\u{1F684}",
+ "\u{1F685}",
+ "\u{1F686}",
+ "\u{1F687}",
+ "\u{1F688}",
+ "\u{1F689}",
+ "\u{1F68A}",
+ "\u{1F68B}",
+ "\u{1F68C}",
+ "\u{1F68D}",
+ "\u{1F68E}",
+ "\u{1F68F}",
+ "\u{1F690}",
+ "\u{1F691}",
+ "\u{1F692}",
+ "\u{1F693}",
+ "\u{1F694}",
+ "\u{1F695}",
+ "\u{1F696}",
+ "\u{1F697}",
+ "\u{1F698}",
+ "\u{1F699}",
+ "\u{1F69A}",
+ "\u{1F69B}",
+ "\u{1F69C}",
+ "\u{1F69D}",
+ "\u{1F69E}",
+ "\u{1F69F}",
+ "\u{1F6A0}",
+ "\u{1F6A1}",
+ "\u{1F6A2}",
+ "\u{1F6A3}",
+ "\u{1F6A4}",
+ "\u{1F6A5}",
+ "\u{1F6A6}",
+ "\u{1F6A7}",
+ "\u{1F6A8}",
+ "\u{1F6A9}",
+ "\u{1F6AA}",
+ "\u{1F6AB}",
+ "\u{1F6AC}",
+ "\u{1F6AD}",
+ "\u{1F6AE}",
+ "\u{1F6AF}",
+ "\u{1F6B0}",
+ "\u{1F6B1}",
+ "\u{1F6B2}",
+ "\u{1F6B3}",
+ "\u{1F6B4}",
+ "\u{1F6B5}",
+ "\u{1F6B6}",
+ "\u{1F6B7}",
+ "\u{1F6B8}",
+ "\u{1F6B9}",
+ "\u{1F6BA}",
+ "\u{1F6BB}",
+ "\u{1F6BC}",
+ "\u{1F6BD}",
+ "\u{1F6BE}",
+ "\u{1F6BF}",
+ "\u{1F6C0}",
+ "\u{1F6C1}",
+ "\u{1F6C2}",
+ "\u{1F6C3}",
+ "\u{1F6C4}",
+ "\u{1F6C5}",
+ "\u{1F6CC}",
+ "\u{1F6D0}",
+ "\u{1F6D1}",
+ "\u{1F6D2}",
+ "\u{1F6D5}",
+ "\u{1F6D6}",
+ "\u{1F6D7}",
+ "\u{1F6DC}",
+ "\u{1F6DD}",
+ "\u{1F6DE}",
+ "\u{1F6DF}",
+ "\u{1F6EB}",
+ "\u{1F6EC}",
+ "\u{1F6F4}",
+ "\u{1F6F5}",
+ "\u{1F6F6}",
+ "\u{1F6F7}",
+ "\u{1F6F8}",
+ "\u{1F6F9}",
+ "\u{1F6FA}",
+ "\u{1F6FB}",
+ "\u{1F6FC}",
+ "\u{1F7E0}",
+ "\u{1F7E1}",
+ "\u{1F7E2}",
+ "\u{1F7E3}",
+ "\u{1F7E4}",
+ "\u{1F7E5}",
+ "\u{1F7E6}",
+ "\u{1F7E7}",
+ "\u{1F7E8}",
+ "\u{1F7E9}",
+ "\u{1F7EA}",
+ "\u{1F7EB}",
+ "\u{1F7F0}",
+ "\u{1F90C}",
+ "\u{1F90D}",
+ "\u{1F90E}",
+ "\u{1F90F}",
+ "\u{1F910}",
+ "\u{1F911}",
+ "\u{1F912}",
+ "\u{1F913}",
+ "\u{1F914}",
+ "\u{1F915}",
+ "\u{1F916}",
+ "\u{1F917}",
+ "\u{1F918}",
+ "\u{1F919}",
+ "\u{1F91A}",
+ "\u{1F91B}",
+ "\u{1F91C}",
+ "\u{1F91D}",
+ "\u{1F91E}",
+ "\u{1F91F}",
+ "\u{1F920}",
+ "\u{1F921}",
+ "\u{1F922}",
+ "\u{1F923}",
+ "\u{1F924}",
+ "\u{1F925}",
+ "\u{1F926}",
+ "\u{1F927}",
+ "\u{1F928}",
+ "\u{1F929}",
+ "\u{1F92A}",
+ "\u{1F92B}",
+ "\u{1F92C}",
+ "\u{1F92D}",
+ "\u{1F92E}",
+ "\u{1F92F}",
+ "\u{1F930}",
+ "\u{1F931}",
+ "\u{1F932}",
+ "\u{1F933}",
+ "\u{1F934}",
+ "\u{1F935}",
+ "\u{1F936}",
+ "\u{1F937}",
+ "\u{1F938}",
+ "\u{1F939}",
+ "\u{1F93A}",
+ "\u{1F93C}",
+ "\u{1F93D}",
+ "\u{1F93E}",
+ "\u{1F93F}",
+ "\u{1F940}",
+ "\u{1F941}",
+ "\u{1F942}",
+ "\u{1F943}",
+ "\u{1F944}",
+ "\u{1F945}",
+ "\u{1F947}",
+ "\u{1F948}",
+ "\u{1F949}",
+ "\u{1F94A}",
+ "\u{1F94B}",
+ "\u{1F94C}",
+ "\u{1F94D}",
+ "\u{1F94E}",
+ "\u{1F94F}",
+ "\u{1F950}",
+ "\u{1F951}",
+ "\u{1F952}",
+ "\u{1F953}",
+ "\u{1F954}",
+ "\u{1F955}",
+ "\u{1F956}",
+ "\u{1F957}",
+ "\u{1F958}",
+ "\u{1F959}",
+ "\u{1F95A}",
+ "\u{1F95B}",
+ "\u{1F95C}",
+ "\u{1F95D}",
+ "\u{1F95E}",
+ "\u{1F95F}",
+ "\u{1F960}",
+ "\u{1F961}",
+ "\u{1F962}",
+ "\u{1F963}",
+ "\u{1F964}",
+ "\u{1F965}",
+ "\u{1F966}",
+ "\u{1F967}",
+ "\u{1F968}",
+ "\u{1F969}",
+ "\u{1F96A}",
+ "\u{1F96B}",
+ "\u{1F96C}",
+ "\u{1F96D}",
+ "\u{1F96E}",
+ "\u{1F96F}",
+ "\u{1F970}",
+ "\u{1F971}",
+ "\u{1F972}",
+ "\u{1F973}",
+ "\u{1F974}",
+ "\u{1F975}",
+ "\u{1F976}",
+ "\u{1F977}",
+ "\u{1F978}",
+ "\u{1F979}",
+ "\u{1F97A}",
+ "\u{1F97B}",
+ "\u{1F97C}",
+ "\u{1F97D}",
+ "\u{1F97E}",
+ "\u{1F97F}",
+ "\u{1F980}",
+ "\u{1F981}",
+ "\u{1F982}",
+ "\u{1F983}",
+ "\u{1F984}",
+ "\u{1F985}",
+ "\u{1F986}",
+ "\u{1F987}",
+ "\u{1F988}",
+ "\u{1F989}",
+ "\u{1F98A}",
+ "\u{1F98B}",
+ "\u{1F98C}",
+ "\u{1F98D}",
+ "\u{1F98E}",
+ "\u{1F98F}",
+ "\u{1F990}",
+ "\u{1F991}",
+ "\u{1F992}",
+ "\u{1F993}",
+ "\u{1F994}",
+ "\u{1F995}",
+ "\u{1F996}",
+ "\u{1F997}",
+ "\u{1F998}",
+ "\u{1F999}",
+ "\u{1F99A}",
+ "\u{1F99B}",
+ "\u{1F99C}",
+ "\u{1F99D}",
+ "\u{1F99E}",
+ "\u{1F99F}",
+ "\u{1F9A0}",
+ "\u{1F9A1}",
+ "\u{1F9A2}",
+ "\u{1F9A3}",
+ "\u{1F9A4}",
+ "\u{1F9A5}",
+ "\u{1F9A6}",
+ "\u{1F9A7}",
+ "\u{1F9A8}",
+ "\u{1F9A9}",
+ "\u{1F9AA}",
+ "\u{1F9AB}",
+ "\u{1F9AC}",
+ "\u{1F9AD}",
+ "\u{1F9AE}",
+ "\u{1F9AF}",
+ "\u{1F9B0}",
+ "\u{1F9B1}",
+ "\u{1F9B2}",
+ "\u{1F9B3}",
+ "\u{1F9B4}",
+ "\u{1F9B5}",
+ "\u{1F9B6}",
+ "\u{1F9B7}",
+ "\u{1F9B8}",
+ "\u{1F9B9}",
+ "\u{1F9BA}",
+ "\u{1F9BB}",
+ "\u{1F9BC}",
+ "\u{1F9BD}",
+ "\u{1F9BE}",
+ "\u{1F9BF}",
+ "\u{1F9C0}",
+ "\u{1F9C1}",
+ "\u{1F9C2}",
+ "\u{1F9C3}",
+ "\u{1F9C4}",
+ "\u{1F9C5}",
+ "\u{1F9C6}",
+ "\u{1F9C7}",
+ "\u{1F9C8}",
+ "\u{1F9C9}",
+ "\u{1F9CA}",
+ "\u{1F9CB}",
+ "\u{1F9CC}",
+ "\u{1F9CD}",
+ "\u{1F9CE}",
+ "\u{1F9CF}",
+ "\u{1F9D0}",
+ "\u{1F9D1}",
+ "\u{1F9D2}",
+ "\u{1F9D3}",
+ "\u{1F9D4}",
+ "\u{1F9D5}",
+ "\u{1F9D6}",
+ "\u{1F9D7}",
+ "\u{1F9D8}",
+ "\u{1F9D9}",
+ "\u{1F9DA}",
+ "\u{1F9DB}",
+ "\u{1F9DC}",
+ "\u{1F9DD}",
+ "\u{1F9DE}",
+ "\u{1F9DF}",
+ "\u{1F9E0}",
+ "\u{1F9E1}",
+ "\u{1F9E2}",
+ "\u{1F9E3}",
+ "\u{1F9E4}",
+ "\u{1F9E5}",
+ "\u{1F9E6}",
+ "\u{1F9E7}",
+ "\u{1F9E8}",
+ "\u{1F9E9}",
+ "\u{1F9EA}",
+ "\u{1F9EB}",
+ "\u{1F9EC}",
+ "\u{1F9ED}",
+ "\u{1F9EE}",
+ "\u{1F9EF}",
+ "\u{1F9F0}",
+ "\u{1F9F1}",
+ "\u{1F9F2}",
+ "\u{1F9F3}",
+ "\u{1F9F4}",
+ "\u{1F9F5}",
+ "\u{1F9F6}",
+ "\u{1F9F7}",
+ "\u{1F9F8}",
+ "\u{1F9F9}",
+ "\u{1F9FA}",
+ "\u{1F9FB}",
+ "\u{1F9FC}",
+ "\u{1F9FD}",
+ "\u{1F9FE}",
+ "\u{1F9FF}",
+ "\u{1FA70}",
+ "\u{1FA71}",
+ "\u{1FA72}",
+ "\u{1FA73}",
+ "\u{1FA74}",
+ "\u{1FA75}",
+ "\u{1FA76}",
+ "\u{1FA77}",
+ "\u{1FA78}",
+ "\u{1FA79}",
+ "\u{1FA7A}",
+ "\u{1FA7B}",
+ "\u{1FA7C}",
+ "\u{1FA80}",
+ "\u{1FA81}",
+ "\u{1FA82}",
+ "\u{1FA83}",
+ "\u{1FA84}",
+ "\u{1FA85}",
+ "\u{1FA86}",
+ "\u{1FA87}",
+ "\u{1FA88}",
+ "\u{1FA90}",
+ "\u{1FA91}",
+ "\u{1FA92}",
+ "\u{1FA93}",
+ "\u{1FA94}",
+ "\u{1FA95}",
+ "\u{1FA96}",
+ "\u{1FA97}",
+ "\u{1FA98}",
+ "\u{1FA99}",
+ "\u{1FA9A}",
+ "\u{1FA9B}",
+ "\u{1FA9C}",
+ "\u{1FA9D}",
+ "\u{1FA9E}",
+ "\u{1FA9F}",
+ "\u{1FAA0}",
+ "\u{1FAA1}",
+ "\u{1FAA2}",
+ "\u{1FAA3}",
+ "\u{1FAA4}",
+ "\u{1FAA5}",
+ "\u{1FAA6}",
+ "\u{1FAA7}",
+ "\u{1FAA8}",
+ "\u{1FAA9}",
+ "\u{1FAAA}",
+ "\u{1FAAB}",
+ "\u{1FAAC}",
+ "\u{1FAAD}",
+ "\u{1FAAE}",
+ "\u{1FAAF}",
+ "\u{1FAB0}",
+ "\u{1FAB1}",
+ "\u{1FAB2}",
+ "\u{1FAB3}",
+ "\u{1FAB4}",
+ "\u{1FAB5}",
+ "\u{1FAB6}",
+ "\u{1FAB7}",
+ "\u{1FAB8}",
+ "\u{1FAB9}",
+ "\u{1FABA}",
+ "\u{1FABB}",
+ "\u{1FABC}",
+ "\u{1FABD}",
+ "\u{1FABF}",
+ "\u{1FAC0}",
+ "\u{1FAC1}",
+ "\u{1FAC2}",
+ "\u{1FAC3}",
+ "\u{1FAC4}",
+ "\u{1FAC5}",
+ "\u{1FACE}",
+ "\u{1FACF}",
+ "\u{1FAD0}",
+ "\u{1FAD1}",
+ "\u{1FAD2}",
+ "\u{1FAD3}",
+ "\u{1FAD4}",
+ "\u{1FAD5}",
+ "\u{1FAD6}",
+ "\u{1FAD7}",
+ "\u{1FAD8}",
+ "\u{1FAD9}",
+ "\u{1FADA}",
+ "\u{1FADB}",
+ "\u{1FAE0}",
+ "\u{1FAE1}",
+ "\u{1FAE2}",
+ "\u{1FAE3}",
+ "\u{1FAE4}",
+ "\u{1FAE5}",
+ "\u{1FAE6}",
+ "\u{1FAE7}",
+ "\u{1FAE8}",
+ "\u{1FAF0}",
+ "\u{1FAF1}",
+ "\u{1FAF2}",
+ "\u{1FAF3}",
+ "\u{1FAF4}",
+ "\u{1FAF5}",
+ "\u{1FAF6}",
+ "\u{1FAF7}",
+ "\u{1FAF8}",
+ "\xA9\uFE0F",
+ "\xAE\uFE0F",
+ "\u203C\uFE0F",
+ "\u2049\uFE0F",
+ "\u2122\uFE0F",
+ "\u2139\uFE0F",
+ "\u2194\uFE0F",
+ "\u2195\uFE0F",
+ "\u2196\uFE0F",
+ "\u2197\uFE0F",
+ "\u2198\uFE0F",
+ "\u2199\uFE0F",
+ "\u21A9\uFE0F",
+ "\u21AA\uFE0F",
+ "\u2328\uFE0F",
+ "\u23CF\uFE0F",
+ "\u23ED\uFE0F",
+ "\u23EE\uFE0F",
+ "\u23EF\uFE0F",
+ "\u23F1\uFE0F",
+ "\u23F2\uFE0F",
+ "\u23F8\uFE0F",
+ "\u23F9\uFE0F",
+ "\u23FA\uFE0F",
+ "\u24C2\uFE0F",
+ "\u25AA\uFE0F",
+ "\u25AB\uFE0F",
+ "\u25B6\uFE0F",
+ "\u25C0\uFE0F",
+ "\u25FB\uFE0F",
+ "\u25FC\uFE0F",
+ "\u2600\uFE0F",
+ "\u2601\uFE0F",
+ "\u2602\uFE0F",
+ "\u2603\uFE0F",
+ "\u2604\uFE0F",
+ "\u260E\uFE0F",
+ "\u2611\uFE0F",
+ "\u2618\uFE0F",
+ "\u261D\uFE0F",
+ "\u2620\uFE0F",
+ "\u2622\uFE0F",
+ "\u2623\uFE0F",
+ "\u2626\uFE0F",
+ "\u262A\uFE0F",
+ "\u262E\uFE0F",
+ "\u262F\uFE0F",
+ "\u2638\uFE0F",
+ "\u2639\uFE0F",
+ "\u263A\uFE0F",
+ "\u2640\uFE0F",
+ "\u2642\uFE0F",
+ "\u265F\uFE0F",
+ "\u2660\uFE0F",
+ "\u2663\uFE0F",
+ "\u2665\uFE0F",
+ "\u2666\uFE0F",
+ "\u2668\uFE0F",
+ "\u267B\uFE0F",
+ "\u267E\uFE0F",
+ "\u2692\uFE0F",
+ "\u2694\uFE0F",
+ "\u2695\uFE0F",
+ "\u2696\uFE0F",
+ "\u2697\uFE0F",
+ "\u2699\uFE0F",
+ "\u269B\uFE0F",
+ "\u269C\uFE0F",
+ "\u26A0\uFE0F",
+ "\u26A7\uFE0F",
+ "\u26B0\uFE0F",
+ "\u26B1\uFE0F",
+ "\u26C8\uFE0F",
+ "\u26CF\uFE0F",
+ "\u26D1\uFE0F",
+ "\u26D3\uFE0F",
+ "\u26E9\uFE0F",
+ "\u26F0\uFE0F",
+ "\u26F1\uFE0F",
+ "\u26F4\uFE0F",
+ "\u26F7\uFE0F",
+ "\u26F8\uFE0F",
+ "\u26F9\uFE0F",
+ "\u2702\uFE0F",
+ "\u2708\uFE0F",
+ "\u2709\uFE0F",
+ "\u270C\uFE0F",
+ "\u270D\uFE0F",
+ "\u270F\uFE0F",
+ "\u2712\uFE0F",
+ "\u2714\uFE0F",
+ "\u2716\uFE0F",
+ "\u271D\uFE0F",
+ "\u2721\uFE0F",
+ "\u2733\uFE0F",
+ "\u2734\uFE0F",
+ "\u2744\uFE0F",
+ "\u2747\uFE0F",
+ "\u2763\uFE0F",
+ "\u2764\uFE0F",
+ "\u27A1\uFE0F",
+ "\u2934\uFE0F",
+ "\u2935\uFE0F",
+ "\u2B05\uFE0F",
+ "\u2B06\uFE0F",
+ "\u2B07\uFE0F",
+ "\u3030\uFE0F",
+ "\u303D\uFE0F",
+ "\u3297\uFE0F",
+ "\u3299\uFE0F",
+ "\u{1F170}\uFE0F",
+ "\u{1F171}\uFE0F",
+ "\u{1F17E}\uFE0F",
+ "\u{1F17F}\uFE0F",
+ "\u{1F202}\uFE0F",
+ "\u{1F237}\uFE0F",
+ "\u{1F321}\uFE0F",
+ "\u{1F324}\uFE0F",
+ "\u{1F325}\uFE0F",
+ "\u{1F326}\uFE0F",
+ "\u{1F327}\uFE0F",
+ "\u{1F328}\uFE0F",
+ "\u{1F329}\uFE0F",
+ "\u{1F32A}\uFE0F",
+ "\u{1F32B}\uFE0F",
+ "\u{1F32C}\uFE0F",
+ "\u{1F336}\uFE0F",
+ "\u{1F37D}\uFE0F",
+ "\u{1F396}\uFE0F",
+ "\u{1F397}\uFE0F",
+ "\u{1F399}\uFE0F",
+ "\u{1F39A}\uFE0F",
+ "\u{1F39B}\uFE0F",
+ "\u{1F39E}\uFE0F",
+ "\u{1F39F}\uFE0F",
+ "\u{1F3CB}\uFE0F",
+ "\u{1F3CC}\uFE0F",
+ "\u{1F3CD}\uFE0F",
+ "\u{1F3CE}\uFE0F",
+ "\u{1F3D4}\uFE0F",
+ "\u{1F3D5}\uFE0F",
+ "\u{1F3D6}\uFE0F",
+ "\u{1F3D7}\uFE0F",
+ "\u{1F3D8}\uFE0F",
+ "\u{1F3D9}\uFE0F",
+ "\u{1F3DA}\uFE0F",
+ "\u{1F3DB}\uFE0F",
+ "\u{1F3DC}\uFE0F",
+ "\u{1F3DD}\uFE0F",
+ "\u{1F3DE}\uFE0F",
+ "\u{1F3DF}\uFE0F",
+ "\u{1F3F3}\uFE0F",
+ "\u{1F3F5}\uFE0F",
+ "\u{1F3F7}\uFE0F",
+ "\u{1F43F}\uFE0F",
+ "\u{1F441}\uFE0F",
+ "\u{1F4FD}\uFE0F",
+ "\u{1F549}\uFE0F",
+ "\u{1F54A}\uFE0F",
+ "\u{1F56F}\uFE0F",
+ "\u{1F570}\uFE0F",
+ "\u{1F573}\uFE0F",
+ "\u{1F574}\uFE0F",
+ "\u{1F575}\uFE0F",
+ "\u{1F576}\uFE0F",
+ "\u{1F577}\uFE0F",
+ "\u{1F578}\uFE0F",
+ "\u{1F579}\uFE0F",
+ "\u{1F587}\uFE0F",
+ "\u{1F58A}\uFE0F",
+ "\u{1F58B}\uFE0F",
+ "\u{1F58C}\uFE0F",
+ "\u{1F58D}\uFE0F",
+ "\u{1F590}\uFE0F",
+ "\u{1F5A5}\uFE0F",
+ "\u{1F5A8}\uFE0F",
+ "\u{1F5B1}\uFE0F",
+ "\u{1F5B2}\uFE0F",
+ "\u{1F5BC}\uFE0F",
+ "\u{1F5C2}\uFE0F",
+ "\u{1F5C3}\uFE0F",
+ "\u{1F5C4}\uFE0F",
+ "\u{1F5D1}\uFE0F",
+ "\u{1F5D2}\uFE0F",
+ "\u{1F5D3}\uFE0F",
+ "\u{1F5DC}\uFE0F",
+ "\u{1F5DD}\uFE0F",
+ "\u{1F5DE}\uFE0F",
+ "\u{1F5E1}\uFE0F",
+ "\u{1F5E3}\uFE0F",
+ "\u{1F5E8}\uFE0F",
+ "\u{1F5EF}\uFE0F",
+ "\u{1F5F3}\uFE0F",
+ "\u{1F5FA}\uFE0F",
+ "\u{1F6CB}\uFE0F",
+ "\u{1F6CD}\uFE0F",
+ "\u{1F6CE}\uFE0F",
+ "\u{1F6CF}\uFE0F",
+ "\u{1F6E0}\uFE0F",
+ "\u{1F6E1}\uFE0F",
+ "\u{1F6E2}\uFE0F",
+ "\u{1F6E3}\uFE0F",
+ "\u{1F6E4}\uFE0F",
+ "\u{1F6E5}\uFE0F",
+ "\u{1F6E9}\uFE0F",
+ "\u{1F6F0}\uFE0F",
+ "\u{1F6F3}\uFE0F"
+ ],
+ nonMatchStrings: [
+ "\uFE0F",
+ "\xA9",
+ "\uFE0F",
+ "\xAE",
+ "\uFE0F",
+ "\u203C",
+ "\uFE0F",
+ "\u2049",
+ "\uFE0F",
+ "\u2122"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence-negative-CharacterClass.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence-negative-CharacterClass.js
new file mode 100644
index 0000000000..b0d8ace463
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence-negative-CharacterClass.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Negating Unicode property escapes for `Emoji_Keycap_Sequence` (property of strings) with `[^\p{…}]` throws an early error.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-isvalidregularexpressionliteral
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/[^\p{Emoji_Keycap_Sequence}]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence-negative-P.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence-negative-P.js
new file mode 100644
index 0000000000..deb6d9fab6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence-negative-P.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Negating Unicode property escapes for `Emoji_Keycap_Sequence` (property of strings) with `\P{…}` throws an early error.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-isvalidregularexpressionliteral
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Emoji_Keycap_Sequence}/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence-negative-u.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence-negative-u.js
new file mode 100644
index 0000000000..9183b91957
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence-negative-u.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Emoji_Keycap_Sequence` (property of strings) with the `u` flag throws an early error. Properties of strings are only supported through the `v` flag.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-patterns-static-semantics-early-errors
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Emoji_Keycap_Sequence}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence.js
new file mode 100644
index 0000000000..767195f2db
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence.js
@@ -0,0 +1,52 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `Emoji_Keycap_Sequence` (property of strings)
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testPropertyOfStrings({
+ regExp: /^\p{Emoji_Keycap_Sequence}+$/v,
+ expression: "\\p{Emoji_Keycap_Sequence}",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "\uFE0F\u20E3",
+ "#\uFE0F",
+ "#\u20E3",
+ "\uFE0F\u20E3",
+ "*\uFE0F",
+ "*\u20E3",
+ "\uFE0F\u20E3",
+ "0\uFE0F",
+ "0\u20E3",
+ "\uFE0F\u20E3",
+ "1\uFE0F",
+ "1\u20E3",
+ "\uFE0F\u20E3",
+ "2\uFE0F",
+ "2\u20E3"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji-negative-CharacterClass.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji-negative-CharacterClass.js
new file mode 100644
index 0000000000..19971720a2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji-negative-CharacterClass.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Negating Unicode property escapes for `RGI_Emoji` (property of strings) with `[^\p{…}]` throws an early error.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-isvalidregularexpressionliteral
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/[^\p{RGI_Emoji}]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji-negative-P.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji-negative-P.js
new file mode 100644
index 0000000000..3b0cc4f75b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji-negative-P.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Negating Unicode property escapes for `RGI_Emoji` (property of strings) with `\P{…}` throws an early error.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-isvalidregularexpressionliteral
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/\P{RGI_Emoji}/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji-negative-u.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji-negative-u.js
new file mode 100644
index 0000000000..cefe64486c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji-negative-u.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `RGI_Emoji` (property of strings) with the `u` flag throws an early error. Properties of strings are only supported through the `v` flag.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-patterns-static-semantics-early-errors
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/\p{RGI_Emoji}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji.js
new file mode 100644
index 0000000000..636a279a5c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji.js
@@ -0,0 +1,3704 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `RGI_Emoji` (property of strings)
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testPropertyOfStrings({
+ regExp: /^\p{RGI_Emoji}+$/v,
+ expression: "\\p{RGI_Emoji}",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\xA9\uFE0F",
+ "\xAE\uFE0F",
+ "\u203C\uFE0F",
+ "\u2049\uFE0F",
+ "\u2122\uFE0F",
+ "\u2139\uFE0F",
+ "\u2194\uFE0F",
+ "\u2195\uFE0F",
+ "\u2196\uFE0F",
+ "\u2197\uFE0F",
+ "\u2198\uFE0F",
+ "\u2199\uFE0F",
+ "\u21A9\uFE0F",
+ "\u21AA\uFE0F",
+ "\u231A",
+ "\u231B",
+ "\u2328\uFE0F",
+ "\u23CF\uFE0F",
+ "\u23E9",
+ "\u23EA",
+ "\u23EB",
+ "\u23EC",
+ "\u23ED\uFE0F",
+ "\u23EE\uFE0F",
+ "\u23EF\uFE0F",
+ "\u23F0",
+ "\u23F1\uFE0F",
+ "\u23F2\uFE0F",
+ "\u23F3",
+ "\u23F8\uFE0F",
+ "\u23F9\uFE0F",
+ "\u23FA\uFE0F",
+ "\u24C2\uFE0F",
+ "\u25AA\uFE0F",
+ "\u25AB\uFE0F",
+ "\u25B6\uFE0F",
+ "\u25C0\uFE0F",
+ "\u25FB\uFE0F",
+ "\u25FC\uFE0F",
+ "\u25FD",
+ "\u25FE",
+ "\u2600\uFE0F",
+ "\u2601\uFE0F",
+ "\u2602\uFE0F",
+ "\u2603\uFE0F",
+ "\u2604\uFE0F",
+ "\u260E\uFE0F",
+ "\u2611\uFE0F",
+ "\u2614",
+ "\u2615",
+ "\u2618\uFE0F",
+ "\u261D\u{1F3FB}",
+ "\u261D\u{1F3FC}",
+ "\u261D\u{1F3FD}",
+ "\u261D\u{1F3FE}",
+ "\u261D\u{1F3FF}",
+ "\u261D\uFE0F",
+ "\u2620\uFE0F",
+ "\u2622\uFE0F",
+ "\u2623\uFE0F",
+ "\u2626\uFE0F",
+ "\u262A\uFE0F",
+ "\u262E\uFE0F",
+ "\u262F\uFE0F",
+ "\u2638\uFE0F",
+ "\u2639\uFE0F",
+ "\u263A\uFE0F",
+ "\u2640\uFE0F",
+ "\u2642\uFE0F",
+ "\u2648",
+ "\u2649",
+ "\u264A",
+ "\u264B",
+ "\u264C",
+ "\u264D",
+ "\u264E",
+ "\u264F",
+ "\u2650",
+ "\u2651",
+ "\u2652",
+ "\u2653",
+ "\u265F\uFE0F",
+ "\u2660\uFE0F",
+ "\u2663\uFE0F",
+ "\u2665\uFE0F",
+ "\u2666\uFE0F",
+ "\u2668\uFE0F",
+ "\u267B\uFE0F",
+ "\u267E\uFE0F",
+ "\u267F",
+ "\u2692\uFE0F",
+ "\u2693",
+ "\u2694\uFE0F",
+ "\u2695\uFE0F",
+ "\u2696\uFE0F",
+ "\u2697\uFE0F",
+ "\u2699\uFE0F",
+ "\u269B\uFE0F",
+ "\u269C\uFE0F",
+ "\u26A0\uFE0F",
+ "\u26A1",
+ "\u26A7\uFE0F",
+ "\u26AA",
+ "\u26AB",
+ "\u26B0\uFE0F",
+ "\u26B1\uFE0F",
+ "\u26BD",
+ "\u26BE",
+ "\u26C4",
+ "\u26C5",
+ "\u26C8\uFE0F",
+ "\u26CE",
+ "\u26CF\uFE0F",
+ "\u26D1\uFE0F",
+ "\u26D3\uFE0F",
+ "\u26D4",
+ "\u26E9\uFE0F",
+ "\u26EA",
+ "\u26F0\uFE0F",
+ "\u26F1\uFE0F",
+ "\u26F2",
+ "\u26F3",
+ "\u26F4\uFE0F",
+ "\u26F5",
+ "\u26F7\uFE0F",
+ "\u26F8\uFE0F",
+ "\u26F9\u{1F3FB}",
+ "\u26F9\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u26F9\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u26F9\u{1F3FC}",
+ "\u26F9\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u26F9\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u26F9\u{1F3FD}",
+ "\u26F9\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u26F9\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u26F9\u{1F3FE}",
+ "\u26F9\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u26F9\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u26F9\u{1F3FF}",
+ "\u26F9\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u26F9\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u26F9\uFE0F",
+ "\u26F9\uFE0F\u200D\u2640\uFE0F",
+ "\u26F9\uFE0F\u200D\u2642\uFE0F",
+ "\u26FA",
+ "\u26FD",
+ "\u2702\uFE0F",
+ "\u2705",
+ "\u2708\uFE0F",
+ "\u2709\uFE0F",
+ "\u270A",
+ "\u270A\u{1F3FB}",
+ "\u270A\u{1F3FC}",
+ "\u270A\u{1F3FD}",
+ "\u270A\u{1F3FE}",
+ "\u270A\u{1F3FF}",
+ "\u270B",
+ "\u270B\u{1F3FB}",
+ "\u270B\u{1F3FC}",
+ "\u270B\u{1F3FD}",
+ "\u270B\u{1F3FE}",
+ "\u270B\u{1F3FF}",
+ "\u270C\u{1F3FB}",
+ "\u270C\u{1F3FC}",
+ "\u270C\u{1F3FD}",
+ "\u270C\u{1F3FE}",
+ "\u270C\u{1F3FF}",
+ "\u270C\uFE0F",
+ "\u270D\u{1F3FB}",
+ "\u270D\u{1F3FC}",
+ "\u270D\u{1F3FD}",
+ "\u270D\u{1F3FE}",
+ "\u270D\u{1F3FF}",
+ "\u270D\uFE0F",
+ "\u270F\uFE0F",
+ "\u2712\uFE0F",
+ "\u2714\uFE0F",
+ "\u2716\uFE0F",
+ "\u271D\uFE0F",
+ "\u2721\uFE0F",
+ "\u2728",
+ "\u2733\uFE0F",
+ "\u2734\uFE0F",
+ "\u2744\uFE0F",
+ "\u2747\uFE0F",
+ "\u274C",
+ "\u274E",
+ "\u2753",
+ "\u2754",
+ "\u2755",
+ "\u2757",
+ "\u2763\uFE0F",
+ "\u2764\uFE0F",
+ "\u2764\uFE0F\u200D\u{1F525}",
+ "\u2764\uFE0F\u200D\u{1FA79}",
+ "\u2795",
+ "\u2796",
+ "\u2797",
+ "\u27A1\uFE0F",
+ "\u27B0",
+ "\u27BF",
+ "\u2934\uFE0F",
+ "\u2935\uFE0F",
+ "\u2B05\uFE0F",
+ "\u2B06\uFE0F",
+ "\u2B07\uFE0F",
+ "\u2B1B",
+ "\u2B1C",
+ "\u2B50",
+ "\u2B55",
+ "\u3030\uFE0F",
+ "\u303D\uFE0F",
+ "\u3297\uFE0F",
+ "\u3299\uFE0F",
+ "\u{1F004}",
+ "\u{1F0CF}",
+ "\u{1F170}\uFE0F",
+ "\u{1F171}\uFE0F",
+ "\u{1F17E}\uFE0F",
+ "\u{1F17F}\uFE0F",
+ "\u{1F18E}",
+ "\u{1F191}",
+ "\u{1F192}",
+ "\u{1F193}",
+ "\u{1F194}",
+ "\u{1F195}",
+ "\u{1F196}",
+ "\u{1F197}",
+ "\u{1F198}",
+ "\u{1F199}",
+ "\u{1F19A}",
+ "\u{1F1E6}\u{1F1E8}",
+ "\u{1F1E6}\u{1F1E9}",
+ "\u{1F1E6}\u{1F1EA}",
+ "\u{1F1E6}\u{1F1EB}",
+ "\u{1F1E6}\u{1F1EC}",
+ "\u{1F1E6}\u{1F1EE}",
+ "\u{1F1E6}\u{1F1F1}",
+ "\u{1F1E6}\u{1F1F2}",
+ "\u{1F1E6}\u{1F1F4}",
+ "\u{1F1E6}\u{1F1F6}",
+ "\u{1F1E6}\u{1F1F7}",
+ "\u{1F1E6}\u{1F1F8}",
+ "\u{1F1E6}\u{1F1F9}",
+ "\u{1F1E6}\u{1F1FA}",
+ "\u{1F1E6}\u{1F1FC}",
+ "\u{1F1E6}\u{1F1FD}",
+ "\u{1F1E6}\u{1F1FF}",
+ "\u{1F1E7}\u{1F1E6}",
+ "\u{1F1E7}\u{1F1E7}",
+ "\u{1F1E7}\u{1F1E9}",
+ "\u{1F1E7}\u{1F1EA}",
+ "\u{1F1E7}\u{1F1EB}",
+ "\u{1F1E7}\u{1F1EC}",
+ "\u{1F1E7}\u{1F1ED}",
+ "\u{1F1E7}\u{1F1EE}",
+ "\u{1F1E7}\u{1F1EF}",
+ "\u{1F1E7}\u{1F1F1}",
+ "\u{1F1E7}\u{1F1F2}",
+ "\u{1F1E7}\u{1F1F3}",
+ "\u{1F1E7}\u{1F1F4}",
+ "\u{1F1E7}\u{1F1F6}",
+ "\u{1F1E7}\u{1F1F7}",
+ "\u{1F1E7}\u{1F1F8}",
+ "\u{1F1E7}\u{1F1F9}",
+ "\u{1F1E7}\u{1F1FB}",
+ "\u{1F1E7}\u{1F1FC}",
+ "\u{1F1E7}\u{1F1FE}",
+ "\u{1F1E7}\u{1F1FF}",
+ "\u{1F1E8}\u{1F1E6}",
+ "\u{1F1E8}\u{1F1E8}",
+ "\u{1F1E8}\u{1F1E9}",
+ "\u{1F1E8}\u{1F1EB}",
+ "\u{1F1E8}\u{1F1EC}",
+ "\u{1F1E8}\u{1F1ED}",
+ "\u{1F1E8}\u{1F1EE}",
+ "\u{1F1E8}\u{1F1F0}",
+ "\u{1F1E8}\u{1F1F1}",
+ "\u{1F1E8}\u{1F1F2}",
+ "\u{1F1E8}\u{1F1F3}",
+ "\u{1F1E8}\u{1F1F4}",
+ "\u{1F1E8}\u{1F1F5}",
+ "\u{1F1E8}\u{1F1F7}",
+ "\u{1F1E8}\u{1F1FA}",
+ "\u{1F1E8}\u{1F1FB}",
+ "\u{1F1E8}\u{1F1FC}",
+ "\u{1F1E8}\u{1F1FD}",
+ "\u{1F1E8}\u{1F1FE}",
+ "\u{1F1E8}\u{1F1FF}",
+ "\u{1F1E9}\u{1F1EA}",
+ "\u{1F1E9}\u{1F1EC}",
+ "\u{1F1E9}\u{1F1EF}",
+ "\u{1F1E9}\u{1F1F0}",
+ "\u{1F1E9}\u{1F1F2}",
+ "\u{1F1E9}\u{1F1F4}",
+ "\u{1F1E9}\u{1F1FF}",
+ "\u{1F1EA}\u{1F1E6}",
+ "\u{1F1EA}\u{1F1E8}",
+ "\u{1F1EA}\u{1F1EA}",
+ "\u{1F1EA}\u{1F1EC}",
+ "\u{1F1EA}\u{1F1ED}",
+ "\u{1F1EA}\u{1F1F7}",
+ "\u{1F1EA}\u{1F1F8}",
+ "\u{1F1EA}\u{1F1F9}",
+ "\u{1F1EA}\u{1F1FA}",
+ "\u{1F1EB}\u{1F1EE}",
+ "\u{1F1EB}\u{1F1EF}",
+ "\u{1F1EB}\u{1F1F0}",
+ "\u{1F1EB}\u{1F1F2}",
+ "\u{1F1EB}\u{1F1F4}",
+ "\u{1F1EB}\u{1F1F7}",
+ "\u{1F1EC}\u{1F1E6}",
+ "\u{1F1EC}\u{1F1E7}",
+ "\u{1F1EC}\u{1F1E9}",
+ "\u{1F1EC}\u{1F1EA}",
+ "\u{1F1EC}\u{1F1EB}",
+ "\u{1F1EC}\u{1F1EC}",
+ "\u{1F1EC}\u{1F1ED}",
+ "\u{1F1EC}\u{1F1EE}",
+ "\u{1F1EC}\u{1F1F1}",
+ "\u{1F1EC}\u{1F1F2}",
+ "\u{1F1EC}\u{1F1F3}",
+ "\u{1F1EC}\u{1F1F5}",
+ "\u{1F1EC}\u{1F1F6}",
+ "\u{1F1EC}\u{1F1F7}",
+ "\u{1F1EC}\u{1F1F8}",
+ "\u{1F1EC}\u{1F1F9}",
+ "\u{1F1EC}\u{1F1FA}",
+ "\u{1F1EC}\u{1F1FC}",
+ "\u{1F1EC}\u{1F1FE}",
+ "\u{1F1ED}\u{1F1F0}",
+ "\u{1F1ED}\u{1F1F2}",
+ "\u{1F1ED}\u{1F1F3}",
+ "\u{1F1ED}\u{1F1F7}",
+ "\u{1F1ED}\u{1F1F9}",
+ "\u{1F1ED}\u{1F1FA}",
+ "\u{1F1EE}\u{1F1E8}",
+ "\u{1F1EE}\u{1F1E9}",
+ "\u{1F1EE}\u{1F1EA}",
+ "\u{1F1EE}\u{1F1F1}",
+ "\u{1F1EE}\u{1F1F2}",
+ "\u{1F1EE}\u{1F1F3}",
+ "\u{1F1EE}\u{1F1F4}",
+ "\u{1F1EE}\u{1F1F6}",
+ "\u{1F1EE}\u{1F1F7}",
+ "\u{1F1EE}\u{1F1F8}",
+ "\u{1F1EE}\u{1F1F9}",
+ "\u{1F1EF}\u{1F1EA}",
+ "\u{1F1EF}\u{1F1F2}",
+ "\u{1F1EF}\u{1F1F4}",
+ "\u{1F1EF}\u{1F1F5}",
+ "\u{1F1F0}\u{1F1EA}",
+ "\u{1F1F0}\u{1F1EC}",
+ "\u{1F1F0}\u{1F1ED}",
+ "\u{1F1F0}\u{1F1EE}",
+ "\u{1F1F0}\u{1F1F2}",
+ "\u{1F1F0}\u{1F1F3}",
+ "\u{1F1F0}\u{1F1F5}",
+ "\u{1F1F0}\u{1F1F7}",
+ "\u{1F1F0}\u{1F1FC}",
+ "\u{1F1F0}\u{1F1FE}",
+ "\u{1F1F0}\u{1F1FF}",
+ "\u{1F1F1}\u{1F1E6}",
+ "\u{1F1F1}\u{1F1E7}",
+ "\u{1F1F1}\u{1F1E8}",
+ "\u{1F1F1}\u{1F1EE}",
+ "\u{1F1F1}\u{1F1F0}",
+ "\u{1F1F1}\u{1F1F7}",
+ "\u{1F1F1}\u{1F1F8}",
+ "\u{1F1F1}\u{1F1F9}",
+ "\u{1F1F1}\u{1F1FA}",
+ "\u{1F1F1}\u{1F1FB}",
+ "\u{1F1F1}\u{1F1FE}",
+ "\u{1F1F2}\u{1F1E6}",
+ "\u{1F1F2}\u{1F1E8}",
+ "\u{1F1F2}\u{1F1E9}",
+ "\u{1F1F2}\u{1F1EA}",
+ "\u{1F1F2}\u{1F1EB}",
+ "\u{1F1F2}\u{1F1EC}",
+ "\u{1F1F2}\u{1F1ED}",
+ "\u{1F1F2}\u{1F1F0}",
+ "\u{1F1F2}\u{1F1F1}",
+ "\u{1F1F2}\u{1F1F2}",
+ "\u{1F1F2}\u{1F1F3}",
+ "\u{1F1F2}\u{1F1F4}",
+ "\u{1F1F2}\u{1F1F5}",
+ "\u{1F1F2}\u{1F1F6}",
+ "\u{1F1F2}\u{1F1F7}",
+ "\u{1F1F2}\u{1F1F8}",
+ "\u{1F1F2}\u{1F1F9}",
+ "\u{1F1F2}\u{1F1FA}",
+ "\u{1F1F2}\u{1F1FB}",
+ "\u{1F1F2}\u{1F1FC}",
+ "\u{1F1F2}\u{1F1FD}",
+ "\u{1F1F2}\u{1F1FE}",
+ "\u{1F1F2}\u{1F1FF}",
+ "\u{1F1F3}\u{1F1E6}",
+ "\u{1F1F3}\u{1F1E8}",
+ "\u{1F1F3}\u{1F1EA}",
+ "\u{1F1F3}\u{1F1EB}",
+ "\u{1F1F3}\u{1F1EC}",
+ "\u{1F1F3}\u{1F1EE}",
+ "\u{1F1F3}\u{1F1F1}",
+ "\u{1F1F3}\u{1F1F4}",
+ "\u{1F1F3}\u{1F1F5}",
+ "\u{1F1F3}\u{1F1F7}",
+ "\u{1F1F3}\u{1F1FA}",
+ "\u{1F1F3}\u{1F1FF}",
+ "\u{1F1F4}\u{1F1F2}",
+ "\u{1F1F5}\u{1F1E6}",
+ "\u{1F1F5}\u{1F1EA}",
+ "\u{1F1F5}\u{1F1EB}",
+ "\u{1F1F5}\u{1F1EC}",
+ "\u{1F1F5}\u{1F1ED}",
+ "\u{1F1F5}\u{1F1F0}",
+ "\u{1F1F5}\u{1F1F1}",
+ "\u{1F1F5}\u{1F1F2}",
+ "\u{1F1F5}\u{1F1F3}",
+ "\u{1F1F5}\u{1F1F7}",
+ "\u{1F1F5}\u{1F1F8}",
+ "\u{1F1F5}\u{1F1F9}",
+ "\u{1F1F5}\u{1F1FC}",
+ "\u{1F1F5}\u{1F1FE}",
+ "\u{1F1F6}\u{1F1E6}",
+ "\u{1F1F7}\u{1F1EA}",
+ "\u{1F1F7}\u{1F1F4}",
+ "\u{1F1F7}\u{1F1F8}",
+ "\u{1F1F7}\u{1F1FA}",
+ "\u{1F1F7}\u{1F1FC}",
+ "\u{1F1F8}\u{1F1E6}",
+ "\u{1F1F8}\u{1F1E7}",
+ "\u{1F1F8}\u{1F1E8}",
+ "\u{1F1F8}\u{1F1E9}",
+ "\u{1F1F8}\u{1F1EA}",
+ "\u{1F1F8}\u{1F1EC}",
+ "\u{1F1F8}\u{1F1ED}",
+ "\u{1F1F8}\u{1F1EE}",
+ "\u{1F1F8}\u{1F1EF}",
+ "\u{1F1F8}\u{1F1F0}",
+ "\u{1F1F8}\u{1F1F1}",
+ "\u{1F1F8}\u{1F1F2}",
+ "\u{1F1F8}\u{1F1F3}",
+ "\u{1F1F8}\u{1F1F4}",
+ "\u{1F1F8}\u{1F1F7}",
+ "\u{1F1F8}\u{1F1F8}",
+ "\u{1F1F8}\u{1F1F9}",
+ "\u{1F1F8}\u{1F1FB}",
+ "\u{1F1F8}\u{1F1FD}",
+ "\u{1F1F8}\u{1F1FE}",
+ "\u{1F1F8}\u{1F1FF}",
+ "\u{1F1F9}\u{1F1E6}",
+ "\u{1F1F9}\u{1F1E8}",
+ "\u{1F1F9}\u{1F1E9}",
+ "\u{1F1F9}\u{1F1EB}",
+ "\u{1F1F9}\u{1F1EC}",
+ "\u{1F1F9}\u{1F1ED}",
+ "\u{1F1F9}\u{1F1EF}",
+ "\u{1F1F9}\u{1F1F0}",
+ "\u{1F1F9}\u{1F1F1}",
+ "\u{1F1F9}\u{1F1F2}",
+ "\u{1F1F9}\u{1F1F3}",
+ "\u{1F1F9}\u{1F1F4}",
+ "\u{1F1F9}\u{1F1F7}",
+ "\u{1F1F9}\u{1F1F9}",
+ "\u{1F1F9}\u{1F1FB}",
+ "\u{1F1F9}\u{1F1FC}",
+ "\u{1F1F9}\u{1F1FF}",
+ "\u{1F1FA}\u{1F1E6}",
+ "\u{1F1FA}\u{1F1EC}",
+ "\u{1F1FA}\u{1F1F2}",
+ "\u{1F1FA}\u{1F1F3}",
+ "\u{1F1FA}\u{1F1F8}",
+ "\u{1F1FA}\u{1F1FE}",
+ "\u{1F1FA}\u{1F1FF}",
+ "\u{1F1FB}\u{1F1E6}",
+ "\u{1F1FB}\u{1F1E8}",
+ "\u{1F1FB}\u{1F1EA}",
+ "\u{1F1FB}\u{1F1EC}",
+ "\u{1F1FB}\u{1F1EE}",
+ "\u{1F1FB}\u{1F1F3}",
+ "\u{1F1FB}\u{1F1FA}",
+ "\u{1F1FC}\u{1F1EB}",
+ "\u{1F1FC}\u{1F1F8}",
+ "\u{1F1FD}\u{1F1F0}",
+ "\u{1F1FE}\u{1F1EA}",
+ "\u{1F1FE}\u{1F1F9}",
+ "\u{1F1FF}\u{1F1E6}",
+ "\u{1F1FF}\u{1F1F2}",
+ "\u{1F1FF}\u{1F1FC}",
+ "\u{1F201}",
+ "\u{1F202}\uFE0F",
+ "\u{1F21A}",
+ "\u{1F22F}",
+ "\u{1F232}",
+ "\u{1F233}",
+ "\u{1F234}",
+ "\u{1F235}",
+ "\u{1F236}",
+ "\u{1F237}\uFE0F",
+ "\u{1F238}",
+ "\u{1F239}",
+ "\u{1F23A}",
+ "\u{1F250}",
+ "\u{1F251}",
+ "\u{1F300}",
+ "\u{1F301}",
+ "\u{1F302}",
+ "\u{1F303}",
+ "\u{1F304}",
+ "\u{1F305}",
+ "\u{1F306}",
+ "\u{1F307}",
+ "\u{1F308}",
+ "\u{1F309}",
+ "\u{1F30A}",
+ "\u{1F30B}",
+ "\u{1F30C}",
+ "\u{1F30D}",
+ "\u{1F30E}",
+ "\u{1F30F}",
+ "\u{1F310}",
+ "\u{1F311}",
+ "\u{1F312}",
+ "\u{1F313}",
+ "\u{1F314}",
+ "\u{1F315}",
+ "\u{1F316}",
+ "\u{1F317}",
+ "\u{1F318}",
+ "\u{1F319}",
+ "\u{1F31A}",
+ "\u{1F31B}",
+ "\u{1F31C}",
+ "\u{1F31D}",
+ "\u{1F31E}",
+ "\u{1F31F}",
+ "\u{1F320}",
+ "\u{1F321}\uFE0F",
+ "\u{1F324}\uFE0F",
+ "\u{1F325}\uFE0F",
+ "\u{1F326}\uFE0F",
+ "\u{1F327}\uFE0F",
+ "\u{1F328}\uFE0F",
+ "\u{1F329}\uFE0F",
+ "\u{1F32A}\uFE0F",
+ "\u{1F32B}\uFE0F",
+ "\u{1F32C}\uFE0F",
+ "\u{1F32D}",
+ "\u{1F32E}",
+ "\u{1F32F}",
+ "\u{1F330}",
+ "\u{1F331}",
+ "\u{1F332}",
+ "\u{1F333}",
+ "\u{1F334}",
+ "\u{1F335}",
+ "\u{1F336}\uFE0F",
+ "\u{1F337}",
+ "\u{1F338}",
+ "\u{1F339}",
+ "\u{1F33A}",
+ "\u{1F33B}",
+ "\u{1F33C}",
+ "\u{1F33D}",
+ "\u{1F33E}",
+ "\u{1F33F}",
+ "\u{1F340}",
+ "\u{1F341}",
+ "\u{1F342}",
+ "\u{1F343}",
+ "\u{1F344}",
+ "\u{1F345}",
+ "\u{1F346}",
+ "\u{1F347}",
+ "\u{1F348}",
+ "\u{1F349}",
+ "\u{1F34A}",
+ "\u{1F34B}",
+ "\u{1F34C}",
+ "\u{1F34D}",
+ "\u{1F34E}",
+ "\u{1F34F}",
+ "\u{1F350}",
+ "\u{1F351}",
+ "\u{1F352}",
+ "\u{1F353}",
+ "\u{1F354}",
+ "\u{1F355}",
+ "\u{1F356}",
+ "\u{1F357}",
+ "\u{1F358}",
+ "\u{1F359}",
+ "\u{1F35A}",
+ "\u{1F35B}",
+ "\u{1F35C}",
+ "\u{1F35D}",
+ "\u{1F35E}",
+ "\u{1F35F}",
+ "\u{1F360}",
+ "\u{1F361}",
+ "\u{1F362}",
+ "\u{1F363}",
+ "\u{1F364}",
+ "\u{1F365}",
+ "\u{1F366}",
+ "\u{1F367}",
+ "\u{1F368}",
+ "\u{1F369}",
+ "\u{1F36A}",
+ "\u{1F36B}",
+ "\u{1F36C}",
+ "\u{1F36D}",
+ "\u{1F36E}",
+ "\u{1F36F}",
+ "\u{1F370}",
+ "\u{1F371}",
+ "\u{1F372}",
+ "\u{1F373}",
+ "\u{1F374}",
+ "\u{1F375}",
+ "\u{1F376}",
+ "\u{1F377}",
+ "\u{1F378}",
+ "\u{1F379}",
+ "\u{1F37A}",
+ "\u{1F37B}",
+ "\u{1F37C}",
+ "\u{1F37D}\uFE0F",
+ "\u{1F37E}",
+ "\u{1F37F}",
+ "\u{1F380}",
+ "\u{1F381}",
+ "\u{1F382}",
+ "\u{1F383}",
+ "\u{1F384}",
+ "\u{1F385}",
+ "\u{1F385}\u{1F3FB}",
+ "\u{1F385}\u{1F3FC}",
+ "\u{1F385}\u{1F3FD}",
+ "\u{1F385}\u{1F3FE}",
+ "\u{1F385}\u{1F3FF}",
+ "\u{1F386}",
+ "\u{1F387}",
+ "\u{1F388}",
+ "\u{1F389}",
+ "\u{1F38A}",
+ "\u{1F38B}",
+ "\u{1F38C}",
+ "\u{1F38D}",
+ "\u{1F38E}",
+ "\u{1F38F}",
+ "\u{1F390}",
+ "\u{1F391}",
+ "\u{1F392}",
+ "\u{1F393}",
+ "\u{1F396}\uFE0F",
+ "\u{1F397}\uFE0F",
+ "\u{1F399}\uFE0F",
+ "\u{1F39A}\uFE0F",
+ "\u{1F39B}\uFE0F",
+ "\u{1F39E}\uFE0F",
+ "\u{1F39F}\uFE0F",
+ "\u{1F3A0}",
+ "\u{1F3A1}",
+ "\u{1F3A2}",
+ "\u{1F3A3}",
+ "\u{1F3A4}",
+ "\u{1F3A5}",
+ "\u{1F3A6}",
+ "\u{1F3A7}",
+ "\u{1F3A8}",
+ "\u{1F3A9}",
+ "\u{1F3AA}",
+ "\u{1F3AB}",
+ "\u{1F3AC}",
+ "\u{1F3AD}",
+ "\u{1F3AE}",
+ "\u{1F3AF}",
+ "\u{1F3B0}",
+ "\u{1F3B1}",
+ "\u{1F3B2}",
+ "\u{1F3B3}",
+ "\u{1F3B4}",
+ "\u{1F3B5}",
+ "\u{1F3B6}",
+ "\u{1F3B7}",
+ "\u{1F3B8}",
+ "\u{1F3B9}",
+ "\u{1F3BA}",
+ "\u{1F3BB}",
+ "\u{1F3BC}",
+ "\u{1F3BD}",
+ "\u{1F3BE}",
+ "\u{1F3BF}",
+ "\u{1F3C0}",
+ "\u{1F3C1}",
+ "\u{1F3C2}",
+ "\u{1F3C2}\u{1F3FB}",
+ "\u{1F3C2}\u{1F3FC}",
+ "\u{1F3C2}\u{1F3FD}",
+ "\u{1F3C2}\u{1F3FE}",
+ "\u{1F3C2}\u{1F3FF}",
+ "\u{1F3C3}",
+ "\u{1F3C3}\u200D\u2640\uFE0F",
+ "\u{1F3C3}\u200D\u2642\uFE0F",
+ "\u{1F3C3}\u{1F3FB}",
+ "\u{1F3C3}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F3C3}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F3C3}\u{1F3FC}",
+ "\u{1F3C3}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F3C3}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F3C3}\u{1F3FD}",
+ "\u{1F3C3}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F3C3}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F3C3}\u{1F3FE}",
+ "\u{1F3C3}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F3C3}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F3C3}\u{1F3FF}",
+ "\u{1F3C3}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F3C3}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F3C4}",
+ "\u{1F3C4}\u200D\u2640\uFE0F",
+ "\u{1F3C4}\u200D\u2642\uFE0F",
+ "\u{1F3C4}\u{1F3FB}",
+ "\u{1F3C4}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F3C4}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F3C4}\u{1F3FC}",
+ "\u{1F3C4}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F3C4}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F3C4}\u{1F3FD}",
+ "\u{1F3C4}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F3C4}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F3C4}\u{1F3FE}",
+ "\u{1F3C4}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F3C4}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F3C4}\u{1F3FF}",
+ "\u{1F3C4}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F3C4}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F3C5}",
+ "\u{1F3C6}",
+ "\u{1F3C7}",
+ "\u{1F3C7}\u{1F3FB}",
+ "\u{1F3C7}\u{1F3FC}",
+ "\u{1F3C7}\u{1F3FD}",
+ "\u{1F3C7}\u{1F3FE}",
+ "\u{1F3C7}\u{1F3FF}",
+ "\u{1F3C8}",
+ "\u{1F3C9}",
+ "\u{1F3CA}",
+ "\u{1F3CA}\u200D\u2640\uFE0F",
+ "\u{1F3CA}\u200D\u2642\uFE0F",
+ "\u{1F3CA}\u{1F3FB}",
+ "\u{1F3CA}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F3CA}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F3CA}\u{1F3FC}",
+ "\u{1F3CA}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F3CA}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F3CA}\u{1F3FD}",
+ "\u{1F3CA}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F3CA}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F3CA}\u{1F3FE}",
+ "\u{1F3CA}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F3CA}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F3CA}\u{1F3FF}",
+ "\u{1F3CA}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F3CA}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F3CB}\u{1F3FB}",
+ "\u{1F3CB}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F3CB}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F3CB}\u{1F3FC}",
+ "\u{1F3CB}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F3CB}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F3CB}\u{1F3FD}",
+ "\u{1F3CB}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F3CB}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F3CB}\u{1F3FE}",
+ "\u{1F3CB}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F3CB}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F3CB}\u{1F3FF}",
+ "\u{1F3CB}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F3CB}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F3CB}\uFE0F",
+ "\u{1F3CB}\uFE0F\u200D\u2640\uFE0F",
+ "\u{1F3CB}\uFE0F\u200D\u2642\uFE0F",
+ "\u{1F3CC}\u{1F3FB}",
+ "\u{1F3CC}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F3CC}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F3CC}\u{1F3FC}",
+ "\u{1F3CC}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F3CC}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F3CC}\u{1F3FD}",
+ "\u{1F3CC}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F3CC}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F3CC}\u{1F3FE}",
+ "\u{1F3CC}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F3CC}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F3CC}\u{1F3FF}",
+ "\u{1F3CC}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F3CC}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F3CC}\uFE0F",
+ "\u{1F3CC}\uFE0F\u200D\u2640\uFE0F",
+ "\u{1F3CC}\uFE0F\u200D\u2642\uFE0F",
+ "\u{1F3CD}\uFE0F",
+ "\u{1F3CE}\uFE0F",
+ "\u{1F3CF}",
+ "\u{1F3D0}",
+ "\u{1F3D1}",
+ "\u{1F3D2}",
+ "\u{1F3D3}",
+ "\u{1F3D4}\uFE0F",
+ "\u{1F3D5}\uFE0F",
+ "\u{1F3D6}\uFE0F",
+ "\u{1F3D7}\uFE0F",
+ "\u{1F3D8}\uFE0F",
+ "\u{1F3D9}\uFE0F",
+ "\u{1F3DA}\uFE0F",
+ "\u{1F3DB}\uFE0F",
+ "\u{1F3DC}\uFE0F",
+ "\u{1F3DD}\uFE0F",
+ "\u{1F3DE}\uFE0F",
+ "\u{1F3DF}\uFE0F",
+ "\u{1F3E0}",
+ "\u{1F3E1}",
+ "\u{1F3E2}",
+ "\u{1F3E3}",
+ "\u{1F3E4}",
+ "\u{1F3E5}",
+ "\u{1F3E6}",
+ "\u{1F3E7}",
+ "\u{1F3E8}",
+ "\u{1F3E9}",
+ "\u{1F3EA}",
+ "\u{1F3EB}",
+ "\u{1F3EC}",
+ "\u{1F3ED}",
+ "\u{1F3EE}",
+ "\u{1F3EF}",
+ "\u{1F3F0}",
+ "\u{1F3F3}\uFE0F",
+ "\u{1F3F3}\uFE0F\u200D\u26A7\uFE0F",
+ "\u{1F3F3}\uFE0F\u200D\u{1F308}",
+ "\u{1F3F4}",
+ "\u{1F3F4}\u200D\u2620\uFE0F",
+ "\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}",
+ "\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}",
+ "\u{1F3F4}\u{E0067}\u{E0062}\u{E0077}\u{E006C}\u{E0073}\u{E007F}",
+ "\u{1F3F5}\uFE0F",
+ "\u{1F3F7}\uFE0F",
+ "\u{1F3F8}",
+ "\u{1F3F9}",
+ "\u{1F3FA}",
+ "\u{1F3FB}",
+ "\u{1F3FC}",
+ "\u{1F3FD}",
+ "\u{1F3FE}",
+ "\u{1F3FF}",
+ "\u{1F400}",
+ "\u{1F401}",
+ "\u{1F402}",
+ "\u{1F403}",
+ "\u{1F404}",
+ "\u{1F405}",
+ "\u{1F406}",
+ "\u{1F407}",
+ "\u{1F408}",
+ "\u{1F408}\u200D\u2B1B",
+ "\u{1F409}",
+ "\u{1F40A}",
+ "\u{1F40B}",
+ "\u{1F40C}",
+ "\u{1F40D}",
+ "\u{1F40E}",
+ "\u{1F40F}",
+ "\u{1F410}",
+ "\u{1F411}",
+ "\u{1F412}",
+ "\u{1F413}",
+ "\u{1F414}",
+ "\u{1F415}",
+ "\u{1F415}\u200D\u{1F9BA}",
+ "\u{1F416}",
+ "\u{1F417}",
+ "\u{1F418}",
+ "\u{1F419}",
+ "\u{1F41A}",
+ "\u{1F41B}",
+ "\u{1F41C}",
+ "\u{1F41D}",
+ "\u{1F41E}",
+ "\u{1F41F}",
+ "\u{1F420}",
+ "\u{1F421}",
+ "\u{1F422}",
+ "\u{1F423}",
+ "\u{1F424}",
+ "\u{1F425}",
+ "\u{1F426}",
+ "\u{1F426}\u200D\u2B1B",
+ "\u{1F427}",
+ "\u{1F428}",
+ "\u{1F429}",
+ "\u{1F42A}",
+ "\u{1F42B}",
+ "\u{1F42C}",
+ "\u{1F42D}",
+ "\u{1F42E}",
+ "\u{1F42F}",
+ "\u{1F430}",
+ "\u{1F431}",
+ "\u{1F432}",
+ "\u{1F433}",
+ "\u{1F434}",
+ "\u{1F435}",
+ "\u{1F436}",
+ "\u{1F437}",
+ "\u{1F438}",
+ "\u{1F439}",
+ "\u{1F43A}",
+ "\u{1F43B}",
+ "\u{1F43B}\u200D\u2744\uFE0F",
+ "\u{1F43C}",
+ "\u{1F43D}",
+ "\u{1F43E}",
+ "\u{1F43F}\uFE0F",
+ "\u{1F440}",
+ "\u{1F441}\uFE0F",
+ "\u{1F441}\uFE0F\u200D\u{1F5E8}\uFE0F",
+ "\u{1F442}",
+ "\u{1F442}\u{1F3FB}",
+ "\u{1F442}\u{1F3FC}",
+ "\u{1F442}\u{1F3FD}",
+ "\u{1F442}\u{1F3FE}",
+ "\u{1F442}\u{1F3FF}",
+ "\u{1F443}",
+ "\u{1F443}\u{1F3FB}",
+ "\u{1F443}\u{1F3FC}",
+ "\u{1F443}\u{1F3FD}",
+ "\u{1F443}\u{1F3FE}",
+ "\u{1F443}\u{1F3FF}",
+ "\u{1F444}",
+ "\u{1F445}",
+ "\u{1F446}",
+ "\u{1F446}\u{1F3FB}",
+ "\u{1F446}\u{1F3FC}",
+ "\u{1F446}\u{1F3FD}",
+ "\u{1F446}\u{1F3FE}",
+ "\u{1F446}\u{1F3FF}",
+ "\u{1F447}",
+ "\u{1F447}\u{1F3FB}",
+ "\u{1F447}\u{1F3FC}",
+ "\u{1F447}\u{1F3FD}",
+ "\u{1F447}\u{1F3FE}",
+ "\u{1F447}\u{1F3FF}",
+ "\u{1F448}",
+ "\u{1F448}\u{1F3FB}",
+ "\u{1F448}\u{1F3FC}",
+ "\u{1F448}\u{1F3FD}",
+ "\u{1F448}\u{1F3FE}",
+ "\u{1F448}\u{1F3FF}",
+ "\u{1F449}",
+ "\u{1F449}\u{1F3FB}",
+ "\u{1F449}\u{1F3FC}",
+ "\u{1F449}\u{1F3FD}",
+ "\u{1F449}\u{1F3FE}",
+ "\u{1F449}\u{1F3FF}",
+ "\u{1F44A}",
+ "\u{1F44A}\u{1F3FB}",
+ "\u{1F44A}\u{1F3FC}",
+ "\u{1F44A}\u{1F3FD}",
+ "\u{1F44A}\u{1F3FE}",
+ "\u{1F44A}\u{1F3FF}",
+ "\u{1F44B}",
+ "\u{1F44B}\u{1F3FB}",
+ "\u{1F44B}\u{1F3FC}",
+ "\u{1F44B}\u{1F3FD}",
+ "\u{1F44B}\u{1F3FE}",
+ "\u{1F44B}\u{1F3FF}",
+ "\u{1F44C}",
+ "\u{1F44C}\u{1F3FB}",
+ "\u{1F44C}\u{1F3FC}",
+ "\u{1F44C}\u{1F3FD}",
+ "\u{1F44C}\u{1F3FE}",
+ "\u{1F44C}\u{1F3FF}",
+ "\u{1F44D}",
+ "\u{1F44D}\u{1F3FB}",
+ "\u{1F44D}\u{1F3FC}",
+ "\u{1F44D}\u{1F3FD}",
+ "\u{1F44D}\u{1F3FE}",
+ "\u{1F44D}\u{1F3FF}",
+ "\u{1F44E}",
+ "\u{1F44E}\u{1F3FB}",
+ "\u{1F44E}\u{1F3FC}",
+ "\u{1F44E}\u{1F3FD}",
+ "\u{1F44E}\u{1F3FE}",
+ "\u{1F44E}\u{1F3FF}",
+ "\u{1F44F}",
+ "\u{1F44F}\u{1F3FB}",
+ "\u{1F44F}\u{1F3FC}",
+ "\u{1F44F}\u{1F3FD}",
+ "\u{1F44F}\u{1F3FE}",
+ "\u{1F44F}\u{1F3FF}",
+ "\u{1F450}",
+ "\u{1F450}\u{1F3FB}",
+ "\u{1F450}\u{1F3FC}",
+ "\u{1F450}\u{1F3FD}",
+ "\u{1F450}\u{1F3FE}",
+ "\u{1F450}\u{1F3FF}",
+ "\u{1F451}",
+ "\u{1F452}",
+ "\u{1F453}",
+ "\u{1F454}",
+ "\u{1F455}",
+ "\u{1F456}",
+ "\u{1F457}",
+ "\u{1F458}",
+ "\u{1F459}",
+ "\u{1F45A}",
+ "\u{1F45B}",
+ "\u{1F45C}",
+ "\u{1F45D}",
+ "\u{1F45E}",
+ "\u{1F45F}",
+ "\u{1F460}",
+ "\u{1F461}",
+ "\u{1F462}",
+ "\u{1F463}",
+ "\u{1F464}",
+ "\u{1F465}",
+ "\u{1F466}",
+ "\u{1F466}\u{1F3FB}",
+ "\u{1F466}\u{1F3FC}",
+ "\u{1F466}\u{1F3FD}",
+ "\u{1F466}\u{1F3FE}",
+ "\u{1F466}\u{1F3FF}",
+ "\u{1F467}",
+ "\u{1F467}\u{1F3FB}",
+ "\u{1F467}\u{1F3FC}",
+ "\u{1F467}\u{1F3FD}",
+ "\u{1F467}\u{1F3FE}",
+ "\u{1F467}\u{1F3FF}",
+ "\u{1F468}",
+ "\u{1F468}\u200D\u2695\uFE0F",
+ "\u{1F468}\u200D\u2696\uFE0F",
+ "\u{1F468}\u200D\u2708\uFE0F",
+ "\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F468}",
+ "\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}",
+ "\u{1F468}\u200D\u{1F33E}",
+ "\u{1F468}\u200D\u{1F373}",
+ "\u{1F468}\u200D\u{1F37C}",
+ "\u{1F468}\u200D\u{1F393}",
+ "\u{1F468}\u200D\u{1F3A4}",
+ "\u{1F468}\u200D\u{1F3A8}",
+ "\u{1F468}\u200D\u{1F3EB}",
+ "\u{1F468}\u200D\u{1F3ED}",
+ "\u{1F468}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F466}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F467}",
+ "\u{1F468}\u200D\u{1F467}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F467}\u200D\u{1F467}",
+ "\u{1F468}\u200D\u{1F468}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F468}\u200D\u{1F466}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F468}\u200D\u{1F467}",
+ "\u{1F468}\u200D\u{1F468}\u200D\u{1F467}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F468}\u200D\u{1F467}\u200D\u{1F467}",
+ "\u{1F468}\u200D\u{1F469}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F469}\u200D\u{1F466}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F469}\u200D\u{1F467}",
+ "\u{1F468}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F467}",
+ "\u{1F468}\u200D\u{1F4BB}",
+ "\u{1F468}\u200D\u{1F4BC}",
+ "\u{1F468}\u200D\u{1F527}",
+ "\u{1F468}\u200D\u{1F52C}",
+ "\u{1F468}\u200D\u{1F680}",
+ "\u{1F468}\u200D\u{1F692}",
+ "\u{1F468}\u200D\u{1F9AF}",
+ "\u{1F468}\u200D\u{1F9B0}",
+ "\u{1F468}\u200D\u{1F9B1}",
+ "\u{1F468}\u200D\u{1F9B2}",
+ "\u{1F468}\u200D\u{1F9B3}",
+ "\u{1F468}\u200D\u{1F9BC}",
+ "\u{1F468}\u200D\u{1F9BD}",
+ "\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FB}\u200D\u2695\uFE0F",
+ "\u{1F468}\u{1F3FB}\u200D\u2696\uFE0F",
+ "\u{1F468}\u{1F3FB}\u200D\u2708\uFE0F",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F33E}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F373}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F37C}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F393}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F3A4}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F3A8}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F3EB}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F3ED}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F4BB}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F4BC}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F527}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F52C}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F680}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F692}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9AF}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9B0}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9B1}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9B2}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9B3}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9BC}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9BD}",
+ "\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FC}\u200D\u2695\uFE0F",
+ "\u{1F468}\u{1F3FC}\u200D\u2696\uFE0F",
+ "\u{1F468}\u{1F3FC}\u200D\u2708\uFE0F",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F33E}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F373}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F37C}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F393}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F3A4}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F3A8}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F3EB}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F3ED}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F4BB}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F4BC}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F527}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F52C}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F680}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F692}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9AF}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9B0}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9B1}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9B2}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9B3}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9BC}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9BD}",
+ "\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FD}\u200D\u2695\uFE0F",
+ "\u{1F468}\u{1F3FD}\u200D\u2696\uFE0F",
+ "\u{1F468}\u{1F3FD}\u200D\u2708\uFE0F",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F33E}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F373}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F37C}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F393}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F3A4}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F3A8}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F3EB}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F3ED}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F4BB}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F4BC}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F527}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F52C}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F680}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F692}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9AF}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9B0}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9B1}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9B2}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9B3}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9BC}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9BD}",
+ "\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FE}\u200D\u2695\uFE0F",
+ "\u{1F468}\u{1F3FE}\u200D\u2696\uFE0F",
+ "\u{1F468}\u{1F3FE}\u200D\u2708\uFE0F",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F33E}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F373}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F37C}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F393}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F3A4}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F3A8}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F3EB}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F3ED}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F4BB}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F4BC}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F527}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F52C}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F680}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F692}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9AF}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9B0}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9B1}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9B2}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9B3}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9BC}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9BD}",
+ "\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FF}\u200D\u2695\uFE0F",
+ "\u{1F468}\u{1F3FF}\u200D\u2696\uFE0F",
+ "\u{1F468}\u{1F3FF}\u200D\u2708\uFE0F",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F33E}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F373}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F37C}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F393}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F3A4}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F3A8}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F3EB}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F3ED}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F4BB}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F4BC}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F527}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F52C}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F680}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F692}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9AF}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9B0}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9B1}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9B2}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9B3}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9BC}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9BD}",
+ "\u{1F469}",
+ "\u{1F469}\u200D\u2695\uFE0F",
+ "\u{1F469}\u200D\u2696\uFE0F",
+ "\u{1F469}\u200D\u2708\uFE0F",
+ "\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F468}",
+ "\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F469}",
+ "\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}",
+ "\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}",
+ "\u{1F469}\u200D\u{1F33E}",
+ "\u{1F469}\u200D\u{1F373}",
+ "\u{1F469}\u200D\u{1F37C}",
+ "\u{1F469}\u200D\u{1F393}",
+ "\u{1F469}\u200D\u{1F3A4}",
+ "\u{1F469}\u200D\u{1F3A8}",
+ "\u{1F469}\u200D\u{1F3EB}",
+ "\u{1F469}\u200D\u{1F3ED}",
+ "\u{1F469}\u200D\u{1F466}",
+ "\u{1F469}\u200D\u{1F466}\u200D\u{1F466}",
+ "\u{1F469}\u200D\u{1F467}",
+ "\u{1F469}\u200D\u{1F467}\u200D\u{1F466}",
+ "\u{1F469}\u200D\u{1F467}\u200D\u{1F467}",
+ "\u{1F469}\u200D\u{1F469}\u200D\u{1F466}",
+ "\u{1F469}\u200D\u{1F469}\u200D\u{1F466}\u200D\u{1F466}",
+ "\u{1F469}\u200D\u{1F469}\u200D\u{1F467}",
+ "\u{1F469}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F466}",
+ "\u{1F469}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F467}",
+ "\u{1F469}\u200D\u{1F4BB}",
+ "\u{1F469}\u200D\u{1F4BC}",
+ "\u{1F469}\u200D\u{1F527}",
+ "\u{1F469}\u200D\u{1F52C}",
+ "\u{1F469}\u200D\u{1F680}",
+ "\u{1F469}\u200D\u{1F692}",
+ "\u{1F469}\u200D\u{1F9AF}",
+ "\u{1F469}\u200D\u{1F9B0}",
+ "\u{1F469}\u200D\u{1F9B1}",
+ "\u{1F469}\u200D\u{1F9B2}",
+ "\u{1F469}\u200D\u{1F9B3}",
+ "\u{1F469}\u200D\u{1F9BC}",
+ "\u{1F469}\u200D\u{1F9BD}",
+ "\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FB}\u200D\u2695\uFE0F",
+ "\u{1F469}\u{1F3FB}\u200D\u2696\uFE0F",
+ "\u{1F469}\u{1F3FB}\u200D\u2708\uFE0F",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F33E}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F373}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F37C}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F393}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F3A4}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F3A8}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F3EB}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F3ED}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F4BB}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F4BC}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F527}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F52C}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F680}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F692}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9AF}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9B0}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9B1}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9B2}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9B3}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9BC}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9BD}",
+ "\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FC}\u200D\u2695\uFE0F",
+ "\u{1F469}\u{1F3FC}\u200D\u2696\uFE0F",
+ "\u{1F469}\u{1F3FC}\u200D\u2708\uFE0F",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F33E}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F373}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F37C}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F393}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F3A4}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F3A8}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F3EB}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F3ED}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F4BB}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F4BC}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F527}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F52C}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F680}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F692}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9AF}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9B0}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9B1}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9B2}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9B3}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9BC}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9BD}",
+ "\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2695\uFE0F",
+ "\u{1F469}\u{1F3FD}\u200D\u2696\uFE0F",
+ "\u{1F469}\u{1F3FD}\u200D\u2708\uFE0F",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F33E}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F373}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F37C}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F393}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F3A4}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F3A8}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F3EB}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F3ED}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F4BB}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F4BC}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F527}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F52C}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F680}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F692}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9AF}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9B0}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9B1}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9B2}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9B3}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9BC}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9BD}",
+ "\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FE}\u200D\u2695\uFE0F",
+ "\u{1F469}\u{1F3FE}\u200D\u2696\uFE0F",
+ "\u{1F469}\u{1F3FE}\u200D\u2708\uFE0F",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F33E}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F373}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F37C}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F393}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F3A4}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F3A8}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F3EB}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F3ED}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F4BB}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F4BC}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F527}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F52C}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F680}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F692}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9AF}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9B0}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9B1}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9B2}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9B3}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9BC}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9BD}",
+ "\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u2695\uFE0F",
+ "\u{1F469}\u{1F3FF}\u200D\u2696\uFE0F",
+ "\u{1F469}\u{1F3FF}\u200D\u2708\uFE0F",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F33E}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F373}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F37C}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F393}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F3A4}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F3A8}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F3EB}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F3ED}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F4BB}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F4BC}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F527}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F52C}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F680}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F692}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9AF}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9B0}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9B1}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9B2}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9B3}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9BC}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9BD}",
+ "\u{1F46A}",
+ "\u{1F46B}",
+ "\u{1F46B}\u{1F3FB}",
+ "\u{1F46B}\u{1F3FC}",
+ "\u{1F46B}\u{1F3FD}",
+ "\u{1F46B}\u{1F3FE}",
+ "\u{1F46B}\u{1F3FF}",
+ "\u{1F46C}",
+ "\u{1F46C}\u{1F3FB}",
+ "\u{1F46C}\u{1F3FC}",
+ "\u{1F46C}\u{1F3FD}",
+ "\u{1F46C}\u{1F3FE}",
+ "\u{1F46C}\u{1F3FF}",
+ "\u{1F46D}",
+ "\u{1F46D}\u{1F3FB}",
+ "\u{1F46D}\u{1F3FC}",
+ "\u{1F46D}\u{1F3FD}",
+ "\u{1F46D}\u{1F3FE}",
+ "\u{1F46D}\u{1F3FF}",
+ "\u{1F46E}",
+ "\u{1F46E}\u200D\u2640\uFE0F",
+ "\u{1F46E}\u200D\u2642\uFE0F",
+ "\u{1F46E}\u{1F3FB}",
+ "\u{1F46E}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F46E}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F46E}\u{1F3FC}",
+ "\u{1F46E}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F46E}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F46E}\u{1F3FD}",
+ "\u{1F46E}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F46E}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F46E}\u{1F3FE}",
+ "\u{1F46E}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F46E}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F46E}\u{1F3FF}",
+ "\u{1F46E}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F46E}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F46F}",
+ "\u{1F46F}\u200D\u2640\uFE0F",
+ "\u{1F46F}\u200D\u2642\uFE0F",
+ "\u{1F470}",
+ "\u{1F470}\u200D\u2640\uFE0F",
+ "\u{1F470}\u200D\u2642\uFE0F",
+ "\u{1F470}\u{1F3FB}",
+ "\u{1F470}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F470}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F470}\u{1F3FC}",
+ "\u{1F470}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F470}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F470}\u{1F3FD}",
+ "\u{1F470}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F470}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F470}\u{1F3FE}",
+ "\u{1F470}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F470}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F470}\u{1F3FF}",
+ "\u{1F470}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F470}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F471}",
+ "\u{1F471}\u200D\u2640\uFE0F",
+ "\u{1F471}\u200D\u2642\uFE0F",
+ "\u{1F471}\u{1F3FB}",
+ "\u{1F471}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F471}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F471}\u{1F3FC}",
+ "\u{1F471}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F471}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F471}\u{1F3FD}",
+ "\u{1F471}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F471}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F471}\u{1F3FE}",
+ "\u{1F471}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F471}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F471}\u{1F3FF}",
+ "\u{1F471}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F471}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F472}",
+ "\u{1F472}\u{1F3FB}",
+ "\u{1F472}\u{1F3FC}",
+ "\u{1F472}\u{1F3FD}",
+ "\u{1F472}\u{1F3FE}",
+ "\u{1F472}\u{1F3FF}",
+ "\u{1F473}",
+ "\u{1F473}\u200D\u2640\uFE0F",
+ "\u{1F473}\u200D\u2642\uFE0F",
+ "\u{1F473}\u{1F3FB}",
+ "\u{1F473}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F473}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F473}\u{1F3FC}",
+ "\u{1F473}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F473}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F473}\u{1F3FD}",
+ "\u{1F473}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F473}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F473}\u{1F3FE}",
+ "\u{1F473}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F473}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F473}\u{1F3FF}",
+ "\u{1F473}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F473}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F474}",
+ "\u{1F474}\u{1F3FB}",
+ "\u{1F474}\u{1F3FC}",
+ "\u{1F474}\u{1F3FD}",
+ "\u{1F474}\u{1F3FE}",
+ "\u{1F474}\u{1F3FF}",
+ "\u{1F475}",
+ "\u{1F475}\u{1F3FB}",
+ "\u{1F475}\u{1F3FC}",
+ "\u{1F475}\u{1F3FD}",
+ "\u{1F475}\u{1F3FE}",
+ "\u{1F475}\u{1F3FF}",
+ "\u{1F476}",
+ "\u{1F476}\u{1F3FB}",
+ "\u{1F476}\u{1F3FC}",
+ "\u{1F476}\u{1F3FD}",
+ "\u{1F476}\u{1F3FE}",
+ "\u{1F476}\u{1F3FF}",
+ "\u{1F477}",
+ "\u{1F477}\u200D\u2640\uFE0F",
+ "\u{1F477}\u200D\u2642\uFE0F",
+ "\u{1F477}\u{1F3FB}",
+ "\u{1F477}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F477}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F477}\u{1F3FC}",
+ "\u{1F477}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F477}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F477}\u{1F3FD}",
+ "\u{1F477}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F477}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F477}\u{1F3FE}",
+ "\u{1F477}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F477}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F477}\u{1F3FF}",
+ "\u{1F477}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F477}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F478}",
+ "\u{1F478}\u{1F3FB}",
+ "\u{1F478}\u{1F3FC}",
+ "\u{1F478}\u{1F3FD}",
+ "\u{1F478}\u{1F3FE}",
+ "\u{1F478}\u{1F3FF}",
+ "\u{1F479}",
+ "\u{1F47A}",
+ "\u{1F47B}",
+ "\u{1F47C}",
+ "\u{1F47C}\u{1F3FB}",
+ "\u{1F47C}\u{1F3FC}",
+ "\u{1F47C}\u{1F3FD}",
+ "\u{1F47C}\u{1F3FE}",
+ "\u{1F47C}\u{1F3FF}",
+ "\u{1F47D}",
+ "\u{1F47E}",
+ "\u{1F47F}",
+ "\u{1F480}",
+ "\u{1F481}",
+ "\u{1F481}\u200D\u2640\uFE0F",
+ "\u{1F481}\u200D\u2642\uFE0F",
+ "\u{1F481}\u{1F3FB}",
+ "\u{1F481}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F481}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F481}\u{1F3FC}",
+ "\u{1F481}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F481}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F481}\u{1F3FD}",
+ "\u{1F481}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F481}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F481}\u{1F3FE}",
+ "\u{1F481}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F481}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F481}\u{1F3FF}",
+ "\u{1F481}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F481}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F482}",
+ "\u{1F482}\u200D\u2640\uFE0F",
+ "\u{1F482}\u200D\u2642\uFE0F",
+ "\u{1F482}\u{1F3FB}",
+ "\u{1F482}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F482}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F482}\u{1F3FC}",
+ "\u{1F482}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F482}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F482}\u{1F3FD}",
+ "\u{1F482}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F482}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F482}\u{1F3FE}",
+ "\u{1F482}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F482}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F482}\u{1F3FF}",
+ "\u{1F482}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F482}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F483}",
+ "\u{1F483}\u{1F3FB}",
+ "\u{1F483}\u{1F3FC}",
+ "\u{1F483}\u{1F3FD}",
+ "\u{1F483}\u{1F3FE}",
+ "\u{1F483}\u{1F3FF}",
+ "\u{1F484}",
+ "\u{1F485}",
+ "\u{1F485}\u{1F3FB}",
+ "\u{1F485}\u{1F3FC}",
+ "\u{1F485}\u{1F3FD}",
+ "\u{1F485}\u{1F3FE}",
+ "\u{1F485}\u{1F3FF}",
+ "\u{1F486}",
+ "\u{1F486}\u200D\u2640\uFE0F",
+ "\u{1F486}\u200D\u2642\uFE0F",
+ "\u{1F486}\u{1F3FB}",
+ "\u{1F486}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F486}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F486}\u{1F3FC}",
+ "\u{1F486}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F486}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F486}\u{1F3FD}",
+ "\u{1F486}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F486}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F486}\u{1F3FE}",
+ "\u{1F486}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F486}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F486}\u{1F3FF}",
+ "\u{1F486}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F486}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F487}",
+ "\u{1F487}\u200D\u2640\uFE0F",
+ "\u{1F487}\u200D\u2642\uFE0F",
+ "\u{1F487}\u{1F3FB}",
+ "\u{1F487}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F487}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F487}\u{1F3FC}",
+ "\u{1F487}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F487}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F487}\u{1F3FD}",
+ "\u{1F487}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F487}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F487}\u{1F3FE}",
+ "\u{1F487}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F487}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F487}\u{1F3FF}",
+ "\u{1F487}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F487}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F488}",
+ "\u{1F489}",
+ "\u{1F48A}",
+ "\u{1F48B}",
+ "\u{1F48C}",
+ "\u{1F48D}",
+ "\u{1F48E}",
+ "\u{1F48F}",
+ "\u{1F48F}\u{1F3FB}",
+ "\u{1F48F}\u{1F3FC}",
+ "\u{1F48F}\u{1F3FD}",
+ "\u{1F48F}\u{1F3FE}",
+ "\u{1F48F}\u{1F3FF}",
+ "\u{1F490}",
+ "\u{1F491}",
+ "\u{1F491}\u{1F3FB}",
+ "\u{1F491}\u{1F3FC}",
+ "\u{1F491}\u{1F3FD}",
+ "\u{1F491}\u{1F3FE}",
+ "\u{1F491}\u{1F3FF}",
+ "\u{1F492}",
+ "\u{1F493}",
+ "\u{1F494}",
+ "\u{1F495}",
+ "\u{1F496}",
+ "\u{1F497}",
+ "\u{1F498}",
+ "\u{1F499}",
+ "\u{1F49A}",
+ "\u{1F49B}",
+ "\u{1F49C}",
+ "\u{1F49D}",
+ "\u{1F49E}",
+ "\u{1F49F}",
+ "\u{1F4A0}",
+ "\u{1F4A1}",
+ "\u{1F4A2}",
+ "\u{1F4A3}",
+ "\u{1F4A4}",
+ "\u{1F4A5}",
+ "\u{1F4A6}",
+ "\u{1F4A7}",
+ "\u{1F4A8}",
+ "\u{1F4A9}",
+ "\u{1F4AA}",
+ "\u{1F4AA}\u{1F3FB}",
+ "\u{1F4AA}\u{1F3FC}",
+ "\u{1F4AA}\u{1F3FD}",
+ "\u{1F4AA}\u{1F3FE}",
+ "\u{1F4AA}\u{1F3FF}",
+ "\u{1F4AB}",
+ "\u{1F4AC}",
+ "\u{1F4AD}",
+ "\u{1F4AE}",
+ "\u{1F4AF}",
+ "\u{1F4B0}",
+ "\u{1F4B1}",
+ "\u{1F4B2}",
+ "\u{1F4B3}",
+ "\u{1F4B4}",
+ "\u{1F4B5}",
+ "\u{1F4B6}",
+ "\u{1F4B7}",
+ "\u{1F4B8}",
+ "\u{1F4B9}",
+ "\u{1F4BA}",
+ "\u{1F4BB}",
+ "\u{1F4BC}",
+ "\u{1F4BD}",
+ "\u{1F4BE}",
+ "\u{1F4BF}",
+ "\u{1F4C0}",
+ "\u{1F4C1}",
+ "\u{1F4C2}",
+ "\u{1F4C3}",
+ "\u{1F4C4}",
+ "\u{1F4C5}",
+ "\u{1F4C6}",
+ "\u{1F4C7}",
+ "\u{1F4C8}",
+ "\u{1F4C9}",
+ "\u{1F4CA}",
+ "\u{1F4CB}",
+ "\u{1F4CC}",
+ "\u{1F4CD}",
+ "\u{1F4CE}",
+ "\u{1F4CF}",
+ "\u{1F4D0}",
+ "\u{1F4D1}",
+ "\u{1F4D2}",
+ "\u{1F4D3}",
+ "\u{1F4D4}",
+ "\u{1F4D5}",
+ "\u{1F4D6}",
+ "\u{1F4D7}",
+ "\u{1F4D8}",
+ "\u{1F4D9}",
+ "\u{1F4DA}",
+ "\u{1F4DB}",
+ "\u{1F4DC}",
+ "\u{1F4DD}",
+ "\u{1F4DE}",
+ "\u{1F4DF}",
+ "\u{1F4E0}",
+ "\u{1F4E1}",
+ "\u{1F4E2}",
+ "\u{1F4E3}",
+ "\u{1F4E4}",
+ "\u{1F4E5}",
+ "\u{1F4E6}",
+ "\u{1F4E7}",
+ "\u{1F4E8}",
+ "\u{1F4E9}",
+ "\u{1F4EA}",
+ "\u{1F4EB}",
+ "\u{1F4EC}",
+ "\u{1F4ED}",
+ "\u{1F4EE}",
+ "\u{1F4EF}",
+ "\u{1F4F0}",
+ "\u{1F4F1}",
+ "\u{1F4F2}",
+ "\u{1F4F3}",
+ "\u{1F4F4}",
+ "\u{1F4F5}",
+ "\u{1F4F6}",
+ "\u{1F4F7}",
+ "\u{1F4F8}",
+ "\u{1F4F9}",
+ "\u{1F4FA}",
+ "\u{1F4FB}",
+ "\u{1F4FC}",
+ "\u{1F4FD}\uFE0F",
+ "\u{1F4FF}",
+ "\u{1F500}",
+ "\u{1F501}",
+ "\u{1F502}",
+ "\u{1F503}",
+ "\u{1F504}",
+ "\u{1F505}",
+ "\u{1F506}",
+ "\u{1F507}",
+ "\u{1F508}",
+ "\u{1F509}",
+ "\u{1F50A}",
+ "\u{1F50B}",
+ "\u{1F50C}",
+ "\u{1F50D}",
+ "\u{1F50E}",
+ "\u{1F50F}",
+ "\u{1F510}",
+ "\u{1F511}",
+ "\u{1F512}",
+ "\u{1F513}",
+ "\u{1F514}",
+ "\u{1F515}",
+ "\u{1F516}",
+ "\u{1F517}",
+ "\u{1F518}",
+ "\u{1F519}",
+ "\u{1F51A}",
+ "\u{1F51B}",
+ "\u{1F51C}",
+ "\u{1F51D}",
+ "\u{1F51E}",
+ "\u{1F51F}",
+ "\u{1F520}",
+ "\u{1F521}",
+ "\u{1F522}",
+ "\u{1F523}",
+ "\u{1F524}",
+ "\u{1F525}",
+ "\u{1F526}",
+ "\u{1F527}",
+ "\u{1F528}",
+ "\u{1F529}",
+ "\u{1F52A}",
+ "\u{1F52B}",
+ "\u{1F52C}",
+ "\u{1F52D}",
+ "\u{1F52E}",
+ "\u{1F52F}",
+ "\u{1F530}",
+ "\u{1F531}",
+ "\u{1F532}",
+ "\u{1F533}",
+ "\u{1F534}",
+ "\u{1F535}",
+ "\u{1F536}",
+ "\u{1F537}",
+ "\u{1F538}",
+ "\u{1F539}",
+ "\u{1F53A}",
+ "\u{1F53B}",
+ "\u{1F53C}",
+ "\u{1F53D}",
+ "\u{1F549}\uFE0F",
+ "\u{1F54A}\uFE0F",
+ "\u{1F54B}",
+ "\u{1F54C}",
+ "\u{1F54D}",
+ "\u{1F54E}",
+ "\u{1F550}",
+ "\u{1F551}",
+ "\u{1F552}",
+ "\u{1F553}",
+ "\u{1F554}",
+ "\u{1F555}",
+ "\u{1F556}",
+ "\u{1F557}",
+ "\u{1F558}",
+ "\u{1F559}",
+ "\u{1F55A}",
+ "\u{1F55B}",
+ "\u{1F55C}",
+ "\u{1F55D}",
+ "\u{1F55E}",
+ "\u{1F55F}",
+ "\u{1F560}",
+ "\u{1F561}",
+ "\u{1F562}",
+ "\u{1F563}",
+ "\u{1F564}",
+ "\u{1F565}",
+ "\u{1F566}",
+ "\u{1F567}",
+ "\u{1F56F}\uFE0F",
+ "\u{1F570}\uFE0F",
+ "\u{1F573}\uFE0F",
+ "\u{1F574}\u{1F3FB}",
+ "\u{1F574}\u{1F3FC}",
+ "\u{1F574}\u{1F3FD}",
+ "\u{1F574}\u{1F3FE}",
+ "\u{1F574}\u{1F3FF}",
+ "\u{1F574}\uFE0F",
+ "\u{1F575}\u{1F3FB}",
+ "\u{1F575}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F575}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F575}\u{1F3FC}",
+ "\u{1F575}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F575}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F575}\u{1F3FD}",
+ "\u{1F575}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F575}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F575}\u{1F3FE}",
+ "\u{1F575}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F575}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F575}\u{1F3FF}",
+ "\u{1F575}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F575}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F575}\uFE0F",
+ "\u{1F575}\uFE0F\u200D\u2640\uFE0F",
+ "\u{1F575}\uFE0F\u200D\u2642\uFE0F",
+ "\u{1F576}\uFE0F",
+ "\u{1F577}\uFE0F",
+ "\u{1F578}\uFE0F",
+ "\u{1F579}\uFE0F",
+ "\u{1F57A}",
+ "\u{1F57A}\u{1F3FB}",
+ "\u{1F57A}\u{1F3FC}",
+ "\u{1F57A}\u{1F3FD}",
+ "\u{1F57A}\u{1F3FE}",
+ "\u{1F57A}\u{1F3FF}",
+ "\u{1F587}\uFE0F",
+ "\u{1F58A}\uFE0F",
+ "\u{1F58B}\uFE0F",
+ "\u{1F58C}\uFE0F",
+ "\u{1F58D}\uFE0F",
+ "\u{1F590}\u{1F3FB}",
+ "\u{1F590}\u{1F3FC}",
+ "\u{1F590}\u{1F3FD}",
+ "\u{1F590}\u{1F3FE}",
+ "\u{1F590}\u{1F3FF}",
+ "\u{1F590}\uFE0F",
+ "\u{1F595}",
+ "\u{1F595}\u{1F3FB}",
+ "\u{1F595}\u{1F3FC}",
+ "\u{1F595}\u{1F3FD}",
+ "\u{1F595}\u{1F3FE}",
+ "\u{1F595}\u{1F3FF}",
+ "\u{1F596}",
+ "\u{1F596}\u{1F3FB}",
+ "\u{1F596}\u{1F3FC}",
+ "\u{1F596}\u{1F3FD}",
+ "\u{1F596}\u{1F3FE}",
+ "\u{1F596}\u{1F3FF}",
+ "\u{1F5A4}",
+ "\u{1F5A5}\uFE0F",
+ "\u{1F5A8}\uFE0F",
+ "\u{1F5B1}\uFE0F",
+ "\u{1F5B2}\uFE0F",
+ "\u{1F5BC}\uFE0F",
+ "\u{1F5C2}\uFE0F",
+ "\u{1F5C3}\uFE0F",
+ "\u{1F5C4}\uFE0F",
+ "\u{1F5D1}\uFE0F",
+ "\u{1F5D2}\uFE0F",
+ "\u{1F5D3}\uFE0F",
+ "\u{1F5DC}\uFE0F",
+ "\u{1F5DD}\uFE0F",
+ "\u{1F5DE}\uFE0F",
+ "\u{1F5E1}\uFE0F",
+ "\u{1F5E3}\uFE0F",
+ "\u{1F5E8}\uFE0F",
+ "\u{1F5EF}\uFE0F",
+ "\u{1F5F3}\uFE0F",
+ "\u{1F5FA}\uFE0F",
+ "\u{1F5FB}",
+ "\u{1F5FC}",
+ "\u{1F5FD}",
+ "\u{1F5FE}",
+ "\u{1F5FF}",
+ "\u{1F600}",
+ "\u{1F601}",
+ "\u{1F602}",
+ "\u{1F603}",
+ "\u{1F604}",
+ "\u{1F605}",
+ "\u{1F606}",
+ "\u{1F607}",
+ "\u{1F608}",
+ "\u{1F609}",
+ "\u{1F60A}",
+ "\u{1F60B}",
+ "\u{1F60C}",
+ "\u{1F60D}",
+ "\u{1F60E}",
+ "\u{1F60F}",
+ "\u{1F610}",
+ "\u{1F611}",
+ "\u{1F612}",
+ "\u{1F613}",
+ "\u{1F614}",
+ "\u{1F615}",
+ "\u{1F616}",
+ "\u{1F617}",
+ "\u{1F618}",
+ "\u{1F619}",
+ "\u{1F61A}",
+ "\u{1F61B}",
+ "\u{1F61C}",
+ "\u{1F61D}",
+ "\u{1F61E}",
+ "\u{1F61F}",
+ "\u{1F620}",
+ "\u{1F621}",
+ "\u{1F622}",
+ "\u{1F623}",
+ "\u{1F624}",
+ "\u{1F625}",
+ "\u{1F626}",
+ "\u{1F627}",
+ "\u{1F628}",
+ "\u{1F629}",
+ "\u{1F62A}",
+ "\u{1F62B}",
+ "\u{1F62C}",
+ "\u{1F62D}",
+ "\u{1F62E}",
+ "\u{1F62E}\u200D\u{1F4A8}",
+ "\u{1F62F}",
+ "\u{1F630}",
+ "\u{1F631}",
+ "\u{1F632}",
+ "\u{1F633}",
+ "\u{1F634}",
+ "\u{1F635}",
+ "\u{1F635}\u200D\u{1F4AB}",
+ "\u{1F636}",
+ "\u{1F636}\u200D\u{1F32B}\uFE0F",
+ "\u{1F637}",
+ "\u{1F638}",
+ "\u{1F639}",
+ "\u{1F63A}",
+ "\u{1F63B}",
+ "\u{1F63C}",
+ "\u{1F63D}",
+ "\u{1F63E}",
+ "\u{1F63F}",
+ "\u{1F640}",
+ "\u{1F641}",
+ "\u{1F642}",
+ "\u{1F643}",
+ "\u{1F644}",
+ "\u{1F645}",
+ "\u{1F645}\u200D\u2640\uFE0F",
+ "\u{1F645}\u200D\u2642\uFE0F",
+ "\u{1F645}\u{1F3FB}",
+ "\u{1F645}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F645}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F645}\u{1F3FC}",
+ "\u{1F645}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F645}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F645}\u{1F3FD}",
+ "\u{1F645}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F645}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F645}\u{1F3FE}",
+ "\u{1F645}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F645}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F645}\u{1F3FF}",
+ "\u{1F645}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F645}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F646}",
+ "\u{1F646}\u200D\u2640\uFE0F",
+ "\u{1F646}\u200D\u2642\uFE0F",
+ "\u{1F646}\u{1F3FB}",
+ "\u{1F646}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F646}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F646}\u{1F3FC}",
+ "\u{1F646}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F646}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F646}\u{1F3FD}",
+ "\u{1F646}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F646}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F646}\u{1F3FE}",
+ "\u{1F646}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F646}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F646}\u{1F3FF}",
+ "\u{1F646}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F646}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F647}",
+ "\u{1F647}\u200D\u2640\uFE0F",
+ "\u{1F647}\u200D\u2642\uFE0F",
+ "\u{1F647}\u{1F3FB}",
+ "\u{1F647}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F647}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F647}\u{1F3FC}",
+ "\u{1F647}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F647}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F647}\u{1F3FD}",
+ "\u{1F647}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F647}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F647}\u{1F3FE}",
+ "\u{1F647}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F647}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F647}\u{1F3FF}",
+ "\u{1F647}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F647}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F648}",
+ "\u{1F649}",
+ "\u{1F64A}",
+ "\u{1F64B}",
+ "\u{1F64B}\u200D\u2640\uFE0F",
+ "\u{1F64B}\u200D\u2642\uFE0F",
+ "\u{1F64B}\u{1F3FB}",
+ "\u{1F64B}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F64B}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F64B}\u{1F3FC}",
+ "\u{1F64B}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F64B}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F64B}\u{1F3FD}",
+ "\u{1F64B}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F64B}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F64B}\u{1F3FE}",
+ "\u{1F64B}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F64B}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F64B}\u{1F3FF}",
+ "\u{1F64B}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F64B}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F64C}",
+ "\u{1F64C}\u{1F3FB}",
+ "\u{1F64C}\u{1F3FC}",
+ "\u{1F64C}\u{1F3FD}",
+ "\u{1F64C}\u{1F3FE}",
+ "\u{1F64C}\u{1F3FF}",
+ "\u{1F64D}",
+ "\u{1F64D}\u200D\u2640\uFE0F",
+ "\u{1F64D}\u200D\u2642\uFE0F",
+ "\u{1F64D}\u{1F3FB}",
+ "\u{1F64D}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F64D}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F64D}\u{1F3FC}",
+ "\u{1F64D}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F64D}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F64D}\u{1F3FD}",
+ "\u{1F64D}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F64D}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F64D}\u{1F3FE}",
+ "\u{1F64D}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F64D}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F64D}\u{1F3FF}",
+ "\u{1F64D}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F64D}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F64E}",
+ "\u{1F64E}\u200D\u2640\uFE0F",
+ "\u{1F64E}\u200D\u2642\uFE0F",
+ "\u{1F64E}\u{1F3FB}",
+ "\u{1F64E}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F64E}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F64E}\u{1F3FC}",
+ "\u{1F64E}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F64E}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F64E}\u{1F3FD}",
+ "\u{1F64E}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F64E}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F64E}\u{1F3FE}",
+ "\u{1F64E}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F64E}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F64E}\u{1F3FF}",
+ "\u{1F64E}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F64E}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F64F}",
+ "\u{1F64F}\u{1F3FB}",
+ "\u{1F64F}\u{1F3FC}",
+ "\u{1F64F}\u{1F3FD}",
+ "\u{1F64F}\u{1F3FE}",
+ "\u{1F64F}\u{1F3FF}",
+ "\u{1F680}",
+ "\u{1F681}",
+ "\u{1F682}",
+ "\u{1F683}",
+ "\u{1F684}",
+ "\u{1F685}",
+ "\u{1F686}",
+ "\u{1F687}",
+ "\u{1F688}",
+ "\u{1F689}",
+ "\u{1F68A}",
+ "\u{1F68B}",
+ "\u{1F68C}",
+ "\u{1F68D}",
+ "\u{1F68E}",
+ "\u{1F68F}",
+ "\u{1F690}",
+ "\u{1F691}",
+ "\u{1F692}",
+ "\u{1F693}",
+ "\u{1F694}",
+ "\u{1F695}",
+ "\u{1F696}",
+ "\u{1F697}",
+ "\u{1F698}",
+ "\u{1F699}",
+ "\u{1F69A}",
+ "\u{1F69B}",
+ "\u{1F69C}",
+ "\u{1F69D}",
+ "\u{1F69E}",
+ "\u{1F69F}",
+ "\u{1F6A0}",
+ "\u{1F6A1}",
+ "\u{1F6A2}",
+ "\u{1F6A3}",
+ "\u{1F6A3}\u200D\u2640\uFE0F",
+ "\u{1F6A3}\u200D\u2642\uFE0F",
+ "\u{1F6A3}\u{1F3FB}",
+ "\u{1F6A3}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F6A3}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F6A3}\u{1F3FC}",
+ "\u{1F6A3}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F6A3}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F6A3}\u{1F3FD}",
+ "\u{1F6A3}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F6A3}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F6A3}\u{1F3FE}",
+ "\u{1F6A3}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F6A3}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F6A3}\u{1F3FF}",
+ "\u{1F6A3}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F6A3}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F6A4}",
+ "\u{1F6A5}",
+ "\u{1F6A6}",
+ "\u{1F6A7}",
+ "\u{1F6A8}",
+ "\u{1F6A9}",
+ "\u{1F6AA}",
+ "\u{1F6AB}",
+ "\u{1F6AC}",
+ "\u{1F6AD}",
+ "\u{1F6AE}",
+ "\u{1F6AF}",
+ "\u{1F6B0}",
+ "\u{1F6B1}",
+ "\u{1F6B2}",
+ "\u{1F6B3}",
+ "\u{1F6B4}",
+ "\u{1F6B4}\u200D\u2640\uFE0F",
+ "\u{1F6B4}\u200D\u2642\uFE0F",
+ "\u{1F6B4}\u{1F3FB}",
+ "\u{1F6B4}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F6B4}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F6B4}\u{1F3FC}",
+ "\u{1F6B4}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F6B4}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F6B4}\u{1F3FD}",
+ "\u{1F6B4}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F6B4}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F6B4}\u{1F3FE}",
+ "\u{1F6B4}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F6B4}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F6B4}\u{1F3FF}",
+ "\u{1F6B4}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F6B4}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F6B5}",
+ "\u{1F6B5}\u200D\u2640\uFE0F",
+ "\u{1F6B5}\u200D\u2642\uFE0F",
+ "\u{1F6B5}\u{1F3FB}",
+ "\u{1F6B5}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F6B5}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F6B5}\u{1F3FC}",
+ "\u{1F6B5}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F6B5}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F6B5}\u{1F3FD}",
+ "\u{1F6B5}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F6B5}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F6B5}\u{1F3FE}",
+ "\u{1F6B5}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F6B5}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F6B5}\u{1F3FF}",
+ "\u{1F6B5}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F6B5}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F6B6}",
+ "\u{1F6B6}\u200D\u2640\uFE0F",
+ "\u{1F6B6}\u200D\u2642\uFE0F",
+ "\u{1F6B6}\u{1F3FB}",
+ "\u{1F6B6}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F6B6}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F6B6}\u{1F3FC}",
+ "\u{1F6B6}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F6B6}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F6B6}\u{1F3FD}",
+ "\u{1F6B6}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F6B6}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F6B6}\u{1F3FE}",
+ "\u{1F6B6}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F6B6}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F6B6}\u{1F3FF}",
+ "\u{1F6B6}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F6B6}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F6B7}",
+ "\u{1F6B8}",
+ "\u{1F6B9}",
+ "\u{1F6BA}",
+ "\u{1F6BB}",
+ "\u{1F6BC}",
+ "\u{1F6BD}",
+ "\u{1F6BE}",
+ "\u{1F6BF}",
+ "\u{1F6C0}",
+ "\u{1F6C0}\u{1F3FB}",
+ "\u{1F6C0}\u{1F3FC}",
+ "\u{1F6C0}\u{1F3FD}",
+ "\u{1F6C0}\u{1F3FE}",
+ "\u{1F6C0}\u{1F3FF}",
+ "\u{1F6C1}",
+ "\u{1F6C2}",
+ "\u{1F6C3}",
+ "\u{1F6C4}",
+ "\u{1F6C5}",
+ "\u{1F6CB}\uFE0F",
+ "\u{1F6CC}",
+ "\u{1F6CC}\u{1F3FB}",
+ "\u{1F6CC}\u{1F3FC}",
+ "\u{1F6CC}\u{1F3FD}",
+ "\u{1F6CC}\u{1F3FE}",
+ "\u{1F6CC}\u{1F3FF}",
+ "\u{1F6CD}\uFE0F",
+ "\u{1F6CE}\uFE0F",
+ "\u{1F6CF}\uFE0F",
+ "\u{1F6D0}",
+ "\u{1F6D1}",
+ "\u{1F6D2}",
+ "\u{1F6D5}",
+ "\u{1F6D6}",
+ "\u{1F6D7}",
+ "\u{1F6DC}",
+ "\u{1F6DD}",
+ "\u{1F6DE}",
+ "\u{1F6DF}",
+ "\u{1F6E0}\uFE0F",
+ "\u{1F6E1}\uFE0F",
+ "\u{1F6E2}\uFE0F",
+ "\u{1F6E3}\uFE0F",
+ "\u{1F6E4}\uFE0F",
+ "\u{1F6E5}\uFE0F",
+ "\u{1F6E9}\uFE0F",
+ "\u{1F6EB}",
+ "\u{1F6EC}",
+ "\u{1F6F0}\uFE0F",
+ "\u{1F6F3}\uFE0F",
+ "\u{1F6F4}",
+ "\u{1F6F5}",
+ "\u{1F6F6}",
+ "\u{1F6F7}",
+ "\u{1F6F8}",
+ "\u{1F6F9}",
+ "\u{1F6FA}",
+ "\u{1F6FB}",
+ "\u{1F6FC}",
+ "\u{1F7E0}",
+ "\u{1F7E1}",
+ "\u{1F7E2}",
+ "\u{1F7E3}",
+ "\u{1F7E4}",
+ "\u{1F7E5}",
+ "\u{1F7E6}",
+ "\u{1F7E7}",
+ "\u{1F7E8}",
+ "\u{1F7E9}",
+ "\u{1F7EA}",
+ "\u{1F7EB}",
+ "\u{1F7F0}",
+ "\u{1F90C}",
+ "\u{1F90C}\u{1F3FB}",
+ "\u{1F90C}\u{1F3FC}",
+ "\u{1F90C}\u{1F3FD}",
+ "\u{1F90C}\u{1F3FE}",
+ "\u{1F90C}\u{1F3FF}",
+ "\u{1F90D}",
+ "\u{1F90E}",
+ "\u{1F90F}",
+ "\u{1F90F}\u{1F3FB}",
+ "\u{1F90F}\u{1F3FC}",
+ "\u{1F90F}\u{1F3FD}",
+ "\u{1F90F}\u{1F3FE}",
+ "\u{1F90F}\u{1F3FF}",
+ "\u{1F910}",
+ "\u{1F911}",
+ "\u{1F912}",
+ "\u{1F913}",
+ "\u{1F914}",
+ "\u{1F915}",
+ "\u{1F916}",
+ "\u{1F917}",
+ "\u{1F918}",
+ "\u{1F918}\u{1F3FB}",
+ "\u{1F918}\u{1F3FC}",
+ "\u{1F918}\u{1F3FD}",
+ "\u{1F918}\u{1F3FE}",
+ "\u{1F918}\u{1F3FF}",
+ "\u{1F919}",
+ "\u{1F919}\u{1F3FB}",
+ "\u{1F919}\u{1F3FC}",
+ "\u{1F919}\u{1F3FD}",
+ "\u{1F919}\u{1F3FE}",
+ "\u{1F919}\u{1F3FF}",
+ "\u{1F91A}",
+ "\u{1F91A}\u{1F3FB}",
+ "\u{1F91A}\u{1F3FC}",
+ "\u{1F91A}\u{1F3FD}",
+ "\u{1F91A}\u{1F3FE}",
+ "\u{1F91A}\u{1F3FF}",
+ "\u{1F91B}",
+ "\u{1F91B}\u{1F3FB}",
+ "\u{1F91B}\u{1F3FC}",
+ "\u{1F91B}\u{1F3FD}",
+ "\u{1F91B}\u{1F3FE}",
+ "\u{1F91B}\u{1F3FF}",
+ "\u{1F91C}",
+ "\u{1F91C}\u{1F3FB}",
+ "\u{1F91C}\u{1F3FC}",
+ "\u{1F91C}\u{1F3FD}",
+ "\u{1F91C}\u{1F3FE}",
+ "\u{1F91C}\u{1F3FF}",
+ "\u{1F91D}",
+ "\u{1F91D}\u{1F3FB}",
+ "\u{1F91D}\u{1F3FC}",
+ "\u{1F91D}\u{1F3FD}",
+ "\u{1F91D}\u{1F3FE}",
+ "\u{1F91D}\u{1F3FF}",
+ "\u{1F91E}",
+ "\u{1F91E}\u{1F3FB}",
+ "\u{1F91E}\u{1F3FC}",
+ "\u{1F91E}\u{1F3FD}",
+ "\u{1F91E}\u{1F3FE}",
+ "\u{1F91E}\u{1F3FF}",
+ "\u{1F91F}",
+ "\u{1F91F}\u{1F3FB}",
+ "\u{1F91F}\u{1F3FC}",
+ "\u{1F91F}\u{1F3FD}",
+ "\u{1F91F}\u{1F3FE}",
+ "\u{1F91F}\u{1F3FF}",
+ "\u{1F920}",
+ "\u{1F921}",
+ "\u{1F922}",
+ "\u{1F923}",
+ "\u{1F924}",
+ "\u{1F925}",
+ "\u{1F926}",
+ "\u{1F926}\u200D\u2640\uFE0F",
+ "\u{1F926}\u200D\u2642\uFE0F",
+ "\u{1F926}\u{1F3FB}",
+ "\u{1F926}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F926}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F926}\u{1F3FC}",
+ "\u{1F926}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F926}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F926}\u{1F3FD}",
+ "\u{1F926}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F926}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F926}\u{1F3FE}",
+ "\u{1F926}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F926}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F926}\u{1F3FF}",
+ "\u{1F926}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F926}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F927}",
+ "\u{1F928}",
+ "\u{1F929}",
+ "\u{1F92A}",
+ "\u{1F92B}",
+ "\u{1F92C}",
+ "\u{1F92D}",
+ "\u{1F92E}",
+ "\u{1F92F}",
+ "\u{1F930}",
+ "\u{1F930}\u{1F3FB}",
+ "\u{1F930}\u{1F3FC}",
+ "\u{1F930}\u{1F3FD}",
+ "\u{1F930}\u{1F3FE}",
+ "\u{1F930}\u{1F3FF}",
+ "\u{1F931}",
+ "\u{1F931}\u{1F3FB}",
+ "\u{1F931}\u{1F3FC}",
+ "\u{1F931}\u{1F3FD}",
+ "\u{1F931}\u{1F3FE}",
+ "\u{1F931}\u{1F3FF}",
+ "\u{1F932}",
+ "\u{1F932}\u{1F3FB}",
+ "\u{1F932}\u{1F3FC}",
+ "\u{1F932}\u{1F3FD}",
+ "\u{1F932}\u{1F3FE}",
+ "\u{1F932}\u{1F3FF}",
+ "\u{1F933}",
+ "\u{1F933}\u{1F3FB}",
+ "\u{1F933}\u{1F3FC}",
+ "\u{1F933}\u{1F3FD}",
+ "\u{1F933}\u{1F3FE}",
+ "\u{1F933}\u{1F3FF}",
+ "\u{1F934}",
+ "\u{1F934}\u{1F3FB}",
+ "\u{1F934}\u{1F3FC}",
+ "\u{1F934}\u{1F3FD}",
+ "\u{1F934}\u{1F3FE}",
+ "\u{1F934}\u{1F3FF}",
+ "\u{1F935}",
+ "\u{1F935}\u200D\u2640\uFE0F",
+ "\u{1F935}\u200D\u2642\uFE0F",
+ "\u{1F935}\u{1F3FB}",
+ "\u{1F935}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F935}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F935}\u{1F3FC}",
+ "\u{1F935}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F935}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F935}\u{1F3FD}",
+ "\u{1F935}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F935}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F935}\u{1F3FE}",
+ "\u{1F935}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F935}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F935}\u{1F3FF}",
+ "\u{1F935}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F935}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F936}",
+ "\u{1F936}\u{1F3FB}",
+ "\u{1F936}\u{1F3FC}",
+ "\u{1F936}\u{1F3FD}",
+ "\u{1F936}\u{1F3FE}",
+ "\u{1F936}\u{1F3FF}",
+ "\u{1F937}",
+ "\u{1F937}\u200D\u2640\uFE0F",
+ "\u{1F937}\u200D\u2642\uFE0F",
+ "\u{1F937}\u{1F3FB}",
+ "\u{1F937}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F937}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F937}\u{1F3FC}",
+ "\u{1F937}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F937}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F937}\u{1F3FD}",
+ "\u{1F937}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F937}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F937}\u{1F3FE}",
+ "\u{1F937}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F937}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F937}\u{1F3FF}",
+ "\u{1F937}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F937}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F938}",
+ "\u{1F938}\u200D\u2640\uFE0F",
+ "\u{1F938}\u200D\u2642\uFE0F",
+ "\u{1F938}\u{1F3FB}",
+ "\u{1F938}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F938}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F938}\u{1F3FC}",
+ "\u{1F938}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F938}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F938}\u{1F3FD}",
+ "\u{1F938}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F938}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F938}\u{1F3FE}",
+ "\u{1F938}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F938}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F938}\u{1F3FF}",
+ "\u{1F938}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F938}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F939}",
+ "\u{1F939}\u200D\u2640\uFE0F",
+ "\u{1F939}\u200D\u2642\uFE0F",
+ "\u{1F939}\u{1F3FB}",
+ "\u{1F939}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F939}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F939}\u{1F3FC}",
+ "\u{1F939}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F939}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F939}\u{1F3FD}",
+ "\u{1F939}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F939}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F939}\u{1F3FE}",
+ "\u{1F939}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F939}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F939}\u{1F3FF}",
+ "\u{1F939}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F939}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F93A}",
+ "\u{1F93C}",
+ "\u{1F93C}\u200D\u2640\uFE0F",
+ "\u{1F93C}\u200D\u2642\uFE0F",
+ "\u{1F93D}",
+ "\u{1F93D}\u200D\u2640\uFE0F",
+ "\u{1F93D}\u200D\u2642\uFE0F",
+ "\u{1F93D}\u{1F3FB}",
+ "\u{1F93D}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F93D}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F93D}\u{1F3FC}",
+ "\u{1F93D}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F93D}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F93D}\u{1F3FD}",
+ "\u{1F93D}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F93D}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F93D}\u{1F3FE}",
+ "\u{1F93D}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F93D}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F93D}\u{1F3FF}",
+ "\u{1F93D}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F93D}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F93E}",
+ "\u{1F93E}\u200D\u2640\uFE0F",
+ "\u{1F93E}\u200D\u2642\uFE0F",
+ "\u{1F93E}\u{1F3FB}",
+ "\u{1F93E}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F93E}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F93E}\u{1F3FC}",
+ "\u{1F93E}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F93E}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F93E}\u{1F3FD}",
+ "\u{1F93E}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F93E}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F93E}\u{1F3FE}",
+ "\u{1F93E}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F93E}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F93E}\u{1F3FF}",
+ "\u{1F93E}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F93E}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F93F}",
+ "\u{1F940}",
+ "\u{1F941}",
+ "\u{1F942}",
+ "\u{1F943}",
+ "\u{1F944}",
+ "\u{1F945}",
+ "\u{1F947}",
+ "\u{1F948}",
+ "\u{1F949}",
+ "\u{1F94A}",
+ "\u{1F94B}",
+ "\u{1F94C}",
+ "\u{1F94D}",
+ "\u{1F94E}",
+ "\u{1F94F}",
+ "\u{1F950}",
+ "\u{1F951}",
+ "\u{1F952}",
+ "\u{1F953}",
+ "\u{1F954}",
+ "\u{1F955}",
+ "\u{1F956}",
+ "\u{1F957}",
+ "\u{1F958}",
+ "\u{1F959}",
+ "\u{1F95A}",
+ "\u{1F95B}",
+ "\u{1F95C}",
+ "\u{1F95D}",
+ "\u{1F95E}",
+ "\u{1F95F}",
+ "\u{1F960}",
+ "\u{1F961}",
+ "\u{1F962}",
+ "\u{1F963}",
+ "\u{1F964}",
+ "\u{1F965}",
+ "\u{1F966}",
+ "\u{1F967}",
+ "\u{1F968}",
+ "\u{1F969}",
+ "\u{1F96A}",
+ "\u{1F96B}",
+ "\u{1F96C}",
+ "\u{1F96D}",
+ "\u{1F96E}",
+ "\u{1F96F}",
+ "\u{1F970}",
+ "\u{1F971}",
+ "\u{1F972}",
+ "\u{1F973}",
+ "\u{1F974}",
+ "\u{1F975}",
+ "\u{1F976}",
+ "\u{1F977}",
+ "\u{1F977}\u{1F3FB}",
+ "\u{1F977}\u{1F3FC}",
+ "\u{1F977}\u{1F3FD}",
+ "\u{1F977}\u{1F3FE}",
+ "\u{1F977}\u{1F3FF}",
+ "\u{1F978}",
+ "\u{1F979}",
+ "\u{1F97A}",
+ "\u{1F97B}",
+ "\u{1F97C}",
+ "\u{1F97D}",
+ "\u{1F97E}",
+ "\u{1F97F}",
+ "\u{1F980}",
+ "\u{1F981}",
+ "\u{1F982}",
+ "\u{1F983}",
+ "\u{1F984}",
+ "\u{1F985}",
+ "\u{1F986}",
+ "\u{1F987}",
+ "\u{1F988}",
+ "\u{1F989}",
+ "\u{1F98A}",
+ "\u{1F98B}",
+ "\u{1F98C}",
+ "\u{1F98D}",
+ "\u{1F98E}",
+ "\u{1F98F}",
+ "\u{1F990}",
+ "\u{1F991}",
+ "\u{1F992}",
+ "\u{1F993}",
+ "\u{1F994}",
+ "\u{1F995}",
+ "\u{1F996}",
+ "\u{1F997}",
+ "\u{1F998}",
+ "\u{1F999}",
+ "\u{1F99A}",
+ "\u{1F99B}",
+ "\u{1F99C}",
+ "\u{1F99D}",
+ "\u{1F99E}",
+ "\u{1F99F}",
+ "\u{1F9A0}",
+ "\u{1F9A1}",
+ "\u{1F9A2}",
+ "\u{1F9A3}",
+ "\u{1F9A4}",
+ "\u{1F9A5}",
+ "\u{1F9A6}",
+ "\u{1F9A7}",
+ "\u{1F9A8}",
+ "\u{1F9A9}",
+ "\u{1F9AA}",
+ "\u{1F9AB}",
+ "\u{1F9AC}",
+ "\u{1F9AD}",
+ "\u{1F9AE}",
+ "\u{1F9AF}",
+ "\u{1F9B0}",
+ "\u{1F9B1}",
+ "\u{1F9B2}",
+ "\u{1F9B3}",
+ "\u{1F9B4}",
+ "\u{1F9B5}",
+ "\u{1F9B5}\u{1F3FB}",
+ "\u{1F9B5}\u{1F3FC}",
+ "\u{1F9B5}\u{1F3FD}",
+ "\u{1F9B5}\u{1F3FE}",
+ "\u{1F9B5}\u{1F3FF}",
+ "\u{1F9B6}",
+ "\u{1F9B6}\u{1F3FB}",
+ "\u{1F9B6}\u{1F3FC}",
+ "\u{1F9B6}\u{1F3FD}",
+ "\u{1F9B6}\u{1F3FE}",
+ "\u{1F9B6}\u{1F3FF}",
+ "\u{1F9B7}",
+ "\u{1F9B8}",
+ "\u{1F9B8}\u200D\u2640\uFE0F",
+ "\u{1F9B8}\u200D\u2642\uFE0F",
+ "\u{1F9B8}\u{1F3FB}",
+ "\u{1F9B8}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9B8}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9B8}\u{1F3FC}",
+ "\u{1F9B8}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9B8}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9B8}\u{1F3FD}",
+ "\u{1F9B8}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9B8}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9B8}\u{1F3FE}",
+ "\u{1F9B8}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9B8}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9B8}\u{1F3FF}",
+ "\u{1F9B8}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9B8}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9B9}",
+ "\u{1F9B9}\u200D\u2640\uFE0F",
+ "\u{1F9B9}\u200D\u2642\uFE0F",
+ "\u{1F9B9}\u{1F3FB}",
+ "\u{1F9B9}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9B9}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9B9}\u{1F3FC}",
+ "\u{1F9B9}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9B9}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9B9}\u{1F3FD}",
+ "\u{1F9B9}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9B9}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9B9}\u{1F3FE}",
+ "\u{1F9B9}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9B9}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9B9}\u{1F3FF}",
+ "\u{1F9B9}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9B9}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9BA}",
+ "\u{1F9BB}",
+ "\u{1F9BB}\u{1F3FB}",
+ "\u{1F9BB}\u{1F3FC}",
+ "\u{1F9BB}\u{1F3FD}",
+ "\u{1F9BB}\u{1F3FE}",
+ "\u{1F9BB}\u{1F3FF}",
+ "\u{1F9BC}",
+ "\u{1F9BD}",
+ "\u{1F9BE}",
+ "\u{1F9BF}",
+ "\u{1F9C0}",
+ "\u{1F9C1}",
+ "\u{1F9C2}",
+ "\u{1F9C3}",
+ "\u{1F9C4}",
+ "\u{1F9C5}",
+ "\u{1F9C6}",
+ "\u{1F9C7}",
+ "\u{1F9C8}",
+ "\u{1F9C9}",
+ "\u{1F9CA}",
+ "\u{1F9CB}",
+ "\u{1F9CC}",
+ "\u{1F9CD}",
+ "\u{1F9CD}\u200D\u2640\uFE0F",
+ "\u{1F9CD}\u200D\u2642\uFE0F",
+ "\u{1F9CD}\u{1F3FB}",
+ "\u{1F9CD}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9CD}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9CD}\u{1F3FC}",
+ "\u{1F9CD}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9CD}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9CD}\u{1F3FD}",
+ "\u{1F9CD}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9CD}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9CD}\u{1F3FE}",
+ "\u{1F9CD}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9CD}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9CD}\u{1F3FF}",
+ "\u{1F9CD}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9CD}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9CE}",
+ "\u{1F9CE}\u200D\u2640\uFE0F",
+ "\u{1F9CE}\u200D\u2642\uFE0F",
+ "\u{1F9CE}\u{1F3FB}",
+ "\u{1F9CE}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9CE}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9CE}\u{1F3FC}",
+ "\u{1F9CE}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9CE}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9CE}\u{1F3FD}",
+ "\u{1F9CE}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9CE}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9CE}\u{1F3FE}",
+ "\u{1F9CE}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9CE}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9CE}\u{1F3FF}",
+ "\u{1F9CE}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9CE}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9CF}",
+ "\u{1F9CF}\u200D\u2640\uFE0F",
+ "\u{1F9CF}\u200D\u2642\uFE0F",
+ "\u{1F9CF}\u{1F3FB}",
+ "\u{1F9CF}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9CF}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9CF}\u{1F3FC}",
+ "\u{1F9CF}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9CF}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9CF}\u{1F3FD}",
+ "\u{1F9CF}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9CF}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9CF}\u{1F3FE}",
+ "\u{1F9CF}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9CF}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9CF}\u{1F3FF}",
+ "\u{1F9CF}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9CF}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9D0}",
+ "\u{1F9D1}",
+ "\u{1F9D1}\u200D\u2695\uFE0F",
+ "\u{1F9D1}\u200D\u2696\uFE0F",
+ "\u{1F9D1}\u200D\u2708\uFE0F",
+ "\u{1F9D1}\u200D\u{1F33E}",
+ "\u{1F9D1}\u200D\u{1F373}",
+ "\u{1F9D1}\u200D\u{1F37C}",
+ "\u{1F9D1}\u200D\u{1F384}",
+ "\u{1F9D1}\u200D\u{1F393}",
+ "\u{1F9D1}\u200D\u{1F3A4}",
+ "\u{1F9D1}\u200D\u{1F3A8}",
+ "\u{1F9D1}\u200D\u{1F3EB}",
+ "\u{1F9D1}\u200D\u{1F3ED}",
+ "\u{1F9D1}\u200D\u{1F4BB}",
+ "\u{1F9D1}\u200D\u{1F4BC}",
+ "\u{1F9D1}\u200D\u{1F527}",
+ "\u{1F9D1}\u200D\u{1F52C}",
+ "\u{1F9D1}\u200D\u{1F680}",
+ "\u{1F9D1}\u200D\u{1F692}",
+ "\u{1F9D1}\u200D\u{1F91D}\u200D\u{1F9D1}",
+ "\u{1F9D1}\u200D\u{1F9AF}",
+ "\u{1F9D1}\u200D\u{1F9B0}",
+ "\u{1F9D1}\u200D\u{1F9B1}",
+ "\u{1F9D1}\u200D\u{1F9B2}",
+ "\u{1F9D1}\u200D\u{1F9B3}",
+ "\u{1F9D1}\u200D\u{1F9BC}",
+ "\u{1F9D1}\u200D\u{1F9BD}",
+ "\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2695\uFE0F",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2696\uFE0F",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2708\uFE0F",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F33E}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F373}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F37C}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F384}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F393}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F3A4}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F3A8}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F3EB}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F3ED}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F4BB}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F4BC}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F527}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F52C}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F680}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F692}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9AF}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9B0}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9B1}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9B2}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9B3}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9BC}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9BD}",
+ "\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2695\uFE0F",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2696\uFE0F",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2708\uFE0F",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F33E}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F373}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F37C}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F384}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F393}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F3A4}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F3A8}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F3EB}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F3ED}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F4BB}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F4BC}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F527}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F52C}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F680}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F692}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9AF}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9B0}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9B1}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9B2}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9B3}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9BC}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9BD}",
+ "\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2695\uFE0F",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2696\uFE0F",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2708\uFE0F",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F33E}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F373}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F37C}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F384}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F393}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F3A4}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F3A8}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F3EB}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F3ED}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F4BB}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F4BC}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F527}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F52C}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F680}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F692}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9AF}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9B0}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9B1}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9B2}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9B3}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9BC}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9BD}",
+ "\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2695\uFE0F",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2696\uFE0F",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2708\uFE0F",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F33E}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F373}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F37C}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F384}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F393}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F3A4}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F3A8}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F3EB}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F3ED}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F4BB}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F4BC}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F527}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F52C}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F680}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F692}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9AF}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9B0}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9B1}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9B2}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9B3}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9BC}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9BD}",
+ "\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2695\uFE0F",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2696\uFE0F",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2708\uFE0F",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F33E}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F373}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F37C}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F384}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F393}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F3A4}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F3A8}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F3EB}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F3ED}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F4BB}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F4BC}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F527}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F52C}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F680}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F692}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9AF}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9B0}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9B1}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9B2}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9B3}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9BC}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9BD}",
+ "\u{1F9D2}",
+ "\u{1F9D2}\u{1F3FB}",
+ "\u{1F9D2}\u{1F3FC}",
+ "\u{1F9D2}\u{1F3FD}",
+ "\u{1F9D2}\u{1F3FE}",
+ "\u{1F9D2}\u{1F3FF}",
+ "\u{1F9D3}",
+ "\u{1F9D3}\u{1F3FB}",
+ "\u{1F9D3}\u{1F3FC}",
+ "\u{1F9D3}\u{1F3FD}",
+ "\u{1F9D3}\u{1F3FE}",
+ "\u{1F9D3}\u{1F3FF}",
+ "\u{1F9D4}",
+ "\u{1F9D4}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FB}",
+ "\u{1F9D4}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FC}",
+ "\u{1F9D4}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FD}",
+ "\u{1F9D4}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FE}",
+ "\u{1F9D4}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FF}",
+ "\u{1F9D4}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9D5}",
+ "\u{1F9D5}\u{1F3FB}",
+ "\u{1F9D5}\u{1F3FC}",
+ "\u{1F9D5}\u{1F3FD}",
+ "\u{1F9D5}\u{1F3FE}",
+ "\u{1F9D5}\u{1F3FF}",
+ "\u{1F9D6}",
+ "\u{1F9D6}\u200D\u2640\uFE0F",
+ "\u{1F9D6}\u200D\u2642\uFE0F",
+ "\u{1F9D6}\u{1F3FB}",
+ "\u{1F9D6}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9D6}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9D6}\u{1F3FC}",
+ "\u{1F9D6}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9D6}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9D6}\u{1F3FD}",
+ "\u{1F9D6}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9D6}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9D6}\u{1F3FE}",
+ "\u{1F9D6}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9D6}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9D6}\u{1F3FF}",
+ "\u{1F9D6}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9D6}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9D7}",
+ "\u{1F9D7}\u200D\u2640\uFE0F",
+ "\u{1F9D7}\u200D\u2642\uFE0F",
+ "\u{1F9D7}\u{1F3FB}",
+ "\u{1F9D7}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9D7}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9D7}\u{1F3FC}",
+ "\u{1F9D7}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9D7}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9D7}\u{1F3FD}",
+ "\u{1F9D7}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9D7}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9D7}\u{1F3FE}",
+ "\u{1F9D7}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9D7}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9D7}\u{1F3FF}",
+ "\u{1F9D7}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9D7}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9D8}",
+ "\u{1F9D8}\u200D\u2640\uFE0F",
+ "\u{1F9D8}\u200D\u2642\uFE0F",
+ "\u{1F9D8}\u{1F3FB}",
+ "\u{1F9D8}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9D8}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9D8}\u{1F3FC}",
+ "\u{1F9D8}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9D8}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9D8}\u{1F3FD}",
+ "\u{1F9D8}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9D8}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9D8}\u{1F3FE}",
+ "\u{1F9D8}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9D8}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9D8}\u{1F3FF}",
+ "\u{1F9D8}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9D8}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9D9}",
+ "\u{1F9D9}\u200D\u2640\uFE0F",
+ "\u{1F9D9}\u200D\u2642\uFE0F",
+ "\u{1F9D9}\u{1F3FB}",
+ "\u{1F9D9}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9D9}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9D9}\u{1F3FC}",
+ "\u{1F9D9}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9D9}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9D9}\u{1F3FD}",
+ "\u{1F9D9}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9D9}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9D9}\u{1F3FE}",
+ "\u{1F9D9}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9D9}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9D9}\u{1F3FF}",
+ "\u{1F9D9}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9D9}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9DA}",
+ "\u{1F9DA}\u200D\u2640\uFE0F",
+ "\u{1F9DA}\u200D\u2642\uFE0F",
+ "\u{1F9DA}\u{1F3FB}",
+ "\u{1F9DA}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9DA}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9DA}\u{1F3FC}",
+ "\u{1F9DA}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9DA}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9DA}\u{1F3FD}",
+ "\u{1F9DA}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9DA}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9DA}\u{1F3FE}",
+ "\u{1F9DA}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9DA}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9DA}\u{1F3FF}",
+ "\u{1F9DA}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9DA}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9DB}",
+ "\u{1F9DB}\u200D\u2640\uFE0F",
+ "\u{1F9DB}\u200D\u2642\uFE0F",
+ "\u{1F9DB}\u{1F3FB}",
+ "\u{1F9DB}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9DB}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9DB}\u{1F3FC}",
+ "\u{1F9DB}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9DB}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9DB}\u{1F3FD}",
+ "\u{1F9DB}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9DB}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9DB}\u{1F3FE}",
+ "\u{1F9DB}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9DB}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9DB}\u{1F3FF}",
+ "\u{1F9DB}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9DB}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9DC}",
+ "\u{1F9DC}\u200D\u2640\uFE0F",
+ "\u{1F9DC}\u200D\u2642\uFE0F",
+ "\u{1F9DC}\u{1F3FB}",
+ "\u{1F9DC}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9DC}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9DC}\u{1F3FC}",
+ "\u{1F9DC}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9DC}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9DC}\u{1F3FD}",
+ "\u{1F9DC}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9DC}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9DC}\u{1F3FE}",
+ "\u{1F9DC}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9DC}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9DC}\u{1F3FF}",
+ "\u{1F9DC}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9DC}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9DD}",
+ "\u{1F9DD}\u200D\u2640\uFE0F",
+ "\u{1F9DD}\u200D\u2642\uFE0F",
+ "\u{1F9DD}\u{1F3FB}",
+ "\u{1F9DD}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9DD}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9DD}\u{1F3FC}",
+ "\u{1F9DD}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9DD}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9DD}\u{1F3FD}",
+ "\u{1F9DD}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9DD}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9DD}\u{1F3FE}",
+ "\u{1F9DD}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9DD}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9DD}\u{1F3FF}",
+ "\u{1F9DD}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9DD}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9DE}",
+ "\u{1F9DE}\u200D\u2640\uFE0F",
+ "\u{1F9DE}\u200D\u2642\uFE0F",
+ "\u{1F9DF}",
+ "\u{1F9DF}\u200D\u2640\uFE0F",
+ "\u{1F9DF}\u200D\u2642\uFE0F",
+ "\u{1F9E0}",
+ "\u{1F9E1}",
+ "\u{1F9E2}",
+ "\u{1F9E3}",
+ "\u{1F9E4}",
+ "\u{1F9E5}",
+ "\u{1F9E6}",
+ "\u{1F9E7}",
+ "\u{1F9E8}",
+ "\u{1F9E9}",
+ "\u{1F9EA}",
+ "\u{1F9EB}",
+ "\u{1F9EC}",
+ "\u{1F9ED}",
+ "\u{1F9EE}",
+ "\u{1F9EF}",
+ "\u{1F9F0}",
+ "\u{1F9F1}",
+ "\u{1F9F2}",
+ "\u{1F9F3}",
+ "\u{1F9F4}",
+ "\u{1F9F5}",
+ "\u{1F9F6}",
+ "\u{1F9F7}",
+ "\u{1F9F8}",
+ "\u{1F9F9}",
+ "\u{1F9FA}",
+ "\u{1F9FB}",
+ "\u{1F9FC}",
+ "\u{1F9FD}",
+ "\u{1F9FE}",
+ "\u{1F9FF}",
+ "\u{1FA70}",
+ "\u{1FA71}",
+ "\u{1FA72}",
+ "\u{1FA73}",
+ "\u{1FA74}",
+ "\u{1FA75}",
+ "\u{1FA76}",
+ "\u{1FA77}",
+ "\u{1FA78}",
+ "\u{1FA79}",
+ "\u{1FA7A}",
+ "\u{1FA7B}",
+ "\u{1FA7C}",
+ "\u{1FA80}",
+ "\u{1FA81}",
+ "\u{1FA82}",
+ "\u{1FA83}",
+ "\u{1FA84}",
+ "\u{1FA85}",
+ "\u{1FA86}",
+ "\u{1FA87}",
+ "\u{1FA88}",
+ "\u{1FA90}",
+ "\u{1FA91}",
+ "\u{1FA92}",
+ "\u{1FA93}",
+ "\u{1FA94}",
+ "\u{1FA95}",
+ "\u{1FA96}",
+ "\u{1FA97}",
+ "\u{1FA98}",
+ "\u{1FA99}",
+ "\u{1FA9A}",
+ "\u{1FA9B}",
+ "\u{1FA9C}",
+ "\u{1FA9D}",
+ "\u{1FA9E}",
+ "\u{1FA9F}",
+ "\u{1FAA0}",
+ "\u{1FAA1}",
+ "\u{1FAA2}",
+ "\u{1FAA3}",
+ "\u{1FAA4}",
+ "\u{1FAA5}",
+ "\u{1FAA6}",
+ "\u{1FAA7}",
+ "\u{1FAA8}",
+ "\u{1FAA9}",
+ "\u{1FAAA}",
+ "\u{1FAAB}",
+ "\u{1FAAC}",
+ "\u{1FAAD}",
+ "\u{1FAAE}",
+ "\u{1FAAF}",
+ "\u{1FAB0}",
+ "\u{1FAB1}",
+ "\u{1FAB2}",
+ "\u{1FAB3}",
+ "\u{1FAB4}",
+ "\u{1FAB5}",
+ "\u{1FAB6}",
+ "\u{1FAB7}",
+ "\u{1FAB8}",
+ "\u{1FAB9}",
+ "\u{1FABA}",
+ "\u{1FABB}",
+ "\u{1FABC}",
+ "\u{1FABD}",
+ "\u{1FABF}",
+ "\u{1FAC0}",
+ "\u{1FAC1}",
+ "\u{1FAC2}",
+ "\u{1FAC3}",
+ "\u{1FAC3}\u{1F3FB}",
+ "\u{1FAC3}\u{1F3FC}",
+ "\u{1FAC3}\u{1F3FD}",
+ "\u{1FAC3}\u{1F3FE}",
+ "\u{1FAC3}\u{1F3FF}",
+ "\u{1FAC4}",
+ "\u{1FAC4}\u{1F3FB}",
+ "\u{1FAC4}\u{1F3FC}",
+ "\u{1FAC4}\u{1F3FD}",
+ "\u{1FAC4}\u{1F3FE}",
+ "\u{1FAC4}\u{1F3FF}",
+ "\u{1FAC5}",
+ "\u{1FAC5}\u{1F3FB}",
+ "\u{1FAC5}\u{1F3FC}",
+ "\u{1FAC5}\u{1F3FD}",
+ "\u{1FAC5}\u{1F3FE}",
+ "\u{1FAC5}\u{1F3FF}",
+ "\u{1FACE}",
+ "\u{1FACF}",
+ "\u{1FAD0}",
+ "\u{1FAD1}",
+ "\u{1FAD2}",
+ "\u{1FAD3}",
+ "\u{1FAD4}",
+ "\u{1FAD5}",
+ "\u{1FAD6}",
+ "\u{1FAD7}",
+ "\u{1FAD8}",
+ "\u{1FAD9}",
+ "\u{1FADA}",
+ "\u{1FADB}",
+ "\u{1FAE0}",
+ "\u{1FAE1}",
+ "\u{1FAE2}",
+ "\u{1FAE3}",
+ "\u{1FAE4}",
+ "\u{1FAE5}",
+ "\u{1FAE6}",
+ "\u{1FAE7}",
+ "\u{1FAE8}",
+ "\u{1FAF0}",
+ "\u{1FAF0}\u{1F3FB}",
+ "\u{1FAF0}\u{1F3FC}",
+ "\u{1FAF0}\u{1F3FD}",
+ "\u{1FAF0}\u{1F3FE}",
+ "\u{1FAF0}\u{1F3FF}",
+ "\u{1FAF1}",
+ "\u{1FAF1}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FB}\u200D\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FB}\u200D\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FB}\u200D\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF1}\u{1F3FB}\u200D\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FC}\u200D\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FC}\u200D\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FC}\u200D\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF1}\u{1F3FC}\u200D\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FD}\u200D\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FD}\u200D\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FD}\u200D\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF1}\u{1F3FD}\u200D\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FE}",
+ "\u{1FAF1}\u{1F3FE}\u200D\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FE}\u200D\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FE}\u200D\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FE}\u200D\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FF}\u200D\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FF}\u200D\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FF}\u200D\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FF}\u200D\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF2}",
+ "\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF3}",
+ "\u{1FAF3}\u{1F3FB}",
+ "\u{1FAF3}\u{1F3FC}",
+ "\u{1FAF3}\u{1F3FD}",
+ "\u{1FAF3}\u{1F3FE}",
+ "\u{1FAF3}\u{1F3FF}",
+ "\u{1FAF4}",
+ "\u{1FAF4}\u{1F3FB}",
+ "\u{1FAF4}\u{1F3FC}",
+ "\u{1FAF4}\u{1F3FD}",
+ "\u{1FAF4}\u{1F3FE}",
+ "\u{1FAF4}\u{1F3FF}",
+ "\u{1FAF5}",
+ "\u{1FAF5}\u{1F3FB}",
+ "\u{1FAF5}\u{1F3FC}",
+ "\u{1FAF5}\u{1F3FD}",
+ "\u{1FAF5}\u{1F3FE}",
+ "\u{1FAF5}\u{1F3FF}",
+ "\u{1FAF6}",
+ "\u{1FAF6}\u{1F3FB}",
+ "\u{1FAF6}\u{1F3FC}",
+ "\u{1FAF6}\u{1F3FD}",
+ "\u{1FAF6}\u{1F3FE}",
+ "\u{1FAF6}\u{1F3FF}",
+ "\u{1FAF7}",
+ "\u{1FAF7}\u{1F3FB}",
+ "\u{1FAF7}\u{1F3FC}",
+ "\u{1FAF7}\u{1F3FD}",
+ "\u{1FAF7}\u{1F3FE}",
+ "\u{1FAF7}\u{1F3FF}",
+ "\u{1FAF8}",
+ "\u{1FAF8}\u{1F3FB}",
+ "\u{1FAF8}\u{1F3FC}",
+ "\u{1FAF8}\u{1F3FD}",
+ "\u{1FAF8}\u{1F3FE}",
+ "\u{1FAF8}\u{1F3FF}"
+ ],
+ nonMatchStrings: [
+ "\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}",
+ "\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}",
+ "\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}",
+ "\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}",
+ "\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}",
+ "\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence-negative-CharacterClass.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence-negative-CharacterClass.js
new file mode 100644
index 0000000000..bebfe18a60
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence-negative-CharacterClass.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Negating Unicode property escapes for `RGI_Emoji_Flag_Sequence` (property of strings) with `[^\p{…}]` throws an early error.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-isvalidregularexpressionliteral
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/[^\p{RGI_Emoji_Flag_Sequence}]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence-negative-P.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence-negative-P.js
new file mode 100644
index 0000000000..7cfcba16d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence-negative-P.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Negating Unicode property escapes for `RGI_Emoji_Flag_Sequence` (property of strings) with `\P{…}` throws an early error.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-isvalidregularexpressionliteral
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/\P{RGI_Emoji_Flag_Sequence}/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence-negative-u.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence-negative-u.js
new file mode 100644
index 0000000000..fe92444da3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence-negative-u.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `RGI_Emoji_Flag_Sequence` (property of strings) with the `u` flag throws an early error. Properties of strings are only supported through the `v` flag.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-patterns-static-semantics-early-errors
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/\p{RGI_Emoji_Flag_Sequence}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence.js
new file mode 100644
index 0000000000..f8d4627cbb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence.js
@@ -0,0 +1,293 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `RGI_Emoji_Flag_Sequence` (property of strings)
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testPropertyOfStrings({
+ regExp: /^\p{RGI_Emoji_Flag_Sequence}+$/v,
+ expression: "\\p{RGI_Emoji_Flag_Sequence}",
+ matchStrings: [
+ "\u{1F1E6}\u{1F1E8}",
+ "\u{1F1E6}\u{1F1E9}",
+ "\u{1F1E6}\u{1F1EA}",
+ "\u{1F1E6}\u{1F1EB}",
+ "\u{1F1E6}\u{1F1EC}",
+ "\u{1F1E6}\u{1F1EE}",
+ "\u{1F1E6}\u{1F1F1}",
+ "\u{1F1E6}\u{1F1F2}",
+ "\u{1F1E6}\u{1F1F4}",
+ "\u{1F1E6}\u{1F1F6}",
+ "\u{1F1E6}\u{1F1F7}",
+ "\u{1F1E6}\u{1F1F8}",
+ "\u{1F1E6}\u{1F1F9}",
+ "\u{1F1E6}\u{1F1FA}",
+ "\u{1F1E6}\u{1F1FC}",
+ "\u{1F1E6}\u{1F1FD}",
+ "\u{1F1E6}\u{1F1FF}",
+ "\u{1F1E7}\u{1F1E6}",
+ "\u{1F1E7}\u{1F1E7}",
+ "\u{1F1E7}\u{1F1E9}",
+ "\u{1F1E7}\u{1F1EA}",
+ "\u{1F1E7}\u{1F1EB}",
+ "\u{1F1E7}\u{1F1EC}",
+ "\u{1F1E7}\u{1F1ED}",
+ "\u{1F1E7}\u{1F1EE}",
+ "\u{1F1E7}\u{1F1EF}",
+ "\u{1F1E7}\u{1F1F1}",
+ "\u{1F1E7}\u{1F1F2}",
+ "\u{1F1E7}\u{1F1F3}",
+ "\u{1F1E7}\u{1F1F4}",
+ "\u{1F1E7}\u{1F1F6}",
+ "\u{1F1E7}\u{1F1F7}",
+ "\u{1F1E7}\u{1F1F8}",
+ "\u{1F1E7}\u{1F1F9}",
+ "\u{1F1E7}\u{1F1FB}",
+ "\u{1F1E7}\u{1F1FC}",
+ "\u{1F1E7}\u{1F1FE}",
+ "\u{1F1E7}\u{1F1FF}",
+ "\u{1F1E8}\u{1F1E6}",
+ "\u{1F1E8}\u{1F1E8}",
+ "\u{1F1E8}\u{1F1E9}",
+ "\u{1F1E8}\u{1F1EB}",
+ "\u{1F1E8}\u{1F1EC}",
+ "\u{1F1E8}\u{1F1ED}",
+ "\u{1F1E8}\u{1F1EE}",
+ "\u{1F1E8}\u{1F1F0}",
+ "\u{1F1E8}\u{1F1F1}",
+ "\u{1F1E8}\u{1F1F2}",
+ "\u{1F1E8}\u{1F1F3}",
+ "\u{1F1E8}\u{1F1F4}",
+ "\u{1F1E8}\u{1F1F5}",
+ "\u{1F1E8}\u{1F1F7}",
+ "\u{1F1E8}\u{1F1FA}",
+ "\u{1F1E8}\u{1F1FB}",
+ "\u{1F1E8}\u{1F1FC}",
+ "\u{1F1E8}\u{1F1FD}",
+ "\u{1F1E8}\u{1F1FE}",
+ "\u{1F1E8}\u{1F1FF}",
+ "\u{1F1E9}\u{1F1EA}",
+ "\u{1F1E9}\u{1F1EC}",
+ "\u{1F1E9}\u{1F1EF}",
+ "\u{1F1E9}\u{1F1F0}",
+ "\u{1F1E9}\u{1F1F2}",
+ "\u{1F1E9}\u{1F1F4}",
+ "\u{1F1E9}\u{1F1FF}",
+ "\u{1F1EA}\u{1F1E6}",
+ "\u{1F1EA}\u{1F1E8}",
+ "\u{1F1EA}\u{1F1EA}",
+ "\u{1F1EA}\u{1F1EC}",
+ "\u{1F1EA}\u{1F1ED}",
+ "\u{1F1EA}\u{1F1F7}",
+ "\u{1F1EA}\u{1F1F8}",
+ "\u{1F1EA}\u{1F1F9}",
+ "\u{1F1EA}\u{1F1FA}",
+ "\u{1F1EB}\u{1F1EE}",
+ "\u{1F1EB}\u{1F1EF}",
+ "\u{1F1EB}\u{1F1F0}",
+ "\u{1F1EB}\u{1F1F2}",
+ "\u{1F1EB}\u{1F1F4}",
+ "\u{1F1EB}\u{1F1F7}",
+ "\u{1F1EC}\u{1F1E6}",
+ "\u{1F1EC}\u{1F1E7}",
+ "\u{1F1EC}\u{1F1E9}",
+ "\u{1F1EC}\u{1F1EA}",
+ "\u{1F1EC}\u{1F1EB}",
+ "\u{1F1EC}\u{1F1EC}",
+ "\u{1F1EC}\u{1F1ED}",
+ "\u{1F1EC}\u{1F1EE}",
+ "\u{1F1EC}\u{1F1F1}",
+ "\u{1F1EC}\u{1F1F2}",
+ "\u{1F1EC}\u{1F1F3}",
+ "\u{1F1EC}\u{1F1F5}",
+ "\u{1F1EC}\u{1F1F6}",
+ "\u{1F1EC}\u{1F1F7}",
+ "\u{1F1EC}\u{1F1F8}",
+ "\u{1F1EC}\u{1F1F9}",
+ "\u{1F1EC}\u{1F1FA}",
+ "\u{1F1EC}\u{1F1FC}",
+ "\u{1F1EC}\u{1F1FE}",
+ "\u{1F1ED}\u{1F1F0}",
+ "\u{1F1ED}\u{1F1F2}",
+ "\u{1F1ED}\u{1F1F3}",
+ "\u{1F1ED}\u{1F1F7}",
+ "\u{1F1ED}\u{1F1F9}",
+ "\u{1F1ED}\u{1F1FA}",
+ "\u{1F1EE}\u{1F1E8}",
+ "\u{1F1EE}\u{1F1E9}",
+ "\u{1F1EE}\u{1F1EA}",
+ "\u{1F1EE}\u{1F1F1}",
+ "\u{1F1EE}\u{1F1F2}",
+ "\u{1F1EE}\u{1F1F3}",
+ "\u{1F1EE}\u{1F1F4}",
+ "\u{1F1EE}\u{1F1F6}",
+ "\u{1F1EE}\u{1F1F7}",
+ "\u{1F1EE}\u{1F1F8}",
+ "\u{1F1EE}\u{1F1F9}",
+ "\u{1F1EF}\u{1F1EA}",
+ "\u{1F1EF}\u{1F1F2}",
+ "\u{1F1EF}\u{1F1F4}",
+ "\u{1F1EF}\u{1F1F5}",
+ "\u{1F1F0}\u{1F1EA}",
+ "\u{1F1F0}\u{1F1EC}",
+ "\u{1F1F0}\u{1F1ED}",
+ "\u{1F1F0}\u{1F1EE}",
+ "\u{1F1F0}\u{1F1F2}",
+ "\u{1F1F0}\u{1F1F3}",
+ "\u{1F1F0}\u{1F1F5}",
+ "\u{1F1F0}\u{1F1F7}",
+ "\u{1F1F0}\u{1F1FC}",
+ "\u{1F1F0}\u{1F1FE}",
+ "\u{1F1F0}\u{1F1FF}",
+ "\u{1F1F1}\u{1F1E6}",
+ "\u{1F1F1}\u{1F1E7}",
+ "\u{1F1F1}\u{1F1E8}",
+ "\u{1F1F1}\u{1F1EE}",
+ "\u{1F1F1}\u{1F1F0}",
+ "\u{1F1F1}\u{1F1F7}",
+ "\u{1F1F1}\u{1F1F8}",
+ "\u{1F1F1}\u{1F1F9}",
+ "\u{1F1F1}\u{1F1FA}",
+ "\u{1F1F1}\u{1F1FB}",
+ "\u{1F1F1}\u{1F1FE}",
+ "\u{1F1F2}\u{1F1E6}",
+ "\u{1F1F2}\u{1F1E8}",
+ "\u{1F1F2}\u{1F1E9}",
+ "\u{1F1F2}\u{1F1EA}",
+ "\u{1F1F2}\u{1F1EB}",
+ "\u{1F1F2}\u{1F1EC}",
+ "\u{1F1F2}\u{1F1ED}",
+ "\u{1F1F2}\u{1F1F0}",
+ "\u{1F1F2}\u{1F1F1}",
+ "\u{1F1F2}\u{1F1F2}",
+ "\u{1F1F2}\u{1F1F3}",
+ "\u{1F1F2}\u{1F1F4}",
+ "\u{1F1F2}\u{1F1F5}",
+ "\u{1F1F2}\u{1F1F6}",
+ "\u{1F1F2}\u{1F1F7}",
+ "\u{1F1F2}\u{1F1F8}",
+ "\u{1F1F2}\u{1F1F9}",
+ "\u{1F1F2}\u{1F1FA}",
+ "\u{1F1F2}\u{1F1FB}",
+ "\u{1F1F2}\u{1F1FC}",
+ "\u{1F1F2}\u{1F1FD}",
+ "\u{1F1F2}\u{1F1FE}",
+ "\u{1F1F2}\u{1F1FF}",
+ "\u{1F1F3}\u{1F1E6}",
+ "\u{1F1F3}\u{1F1E8}",
+ "\u{1F1F3}\u{1F1EA}",
+ "\u{1F1F3}\u{1F1EB}",
+ "\u{1F1F3}\u{1F1EC}",
+ "\u{1F1F3}\u{1F1EE}",
+ "\u{1F1F3}\u{1F1F1}",
+ "\u{1F1F3}\u{1F1F4}",
+ "\u{1F1F3}\u{1F1F5}",
+ "\u{1F1F3}\u{1F1F7}",
+ "\u{1F1F3}\u{1F1FA}",
+ "\u{1F1F3}\u{1F1FF}",
+ "\u{1F1F4}\u{1F1F2}",
+ "\u{1F1F5}\u{1F1E6}",
+ "\u{1F1F5}\u{1F1EA}",
+ "\u{1F1F5}\u{1F1EB}",
+ "\u{1F1F5}\u{1F1EC}",
+ "\u{1F1F5}\u{1F1ED}",
+ "\u{1F1F5}\u{1F1F0}",
+ "\u{1F1F5}\u{1F1F1}",
+ "\u{1F1F5}\u{1F1F2}",
+ "\u{1F1F5}\u{1F1F3}",
+ "\u{1F1F5}\u{1F1F7}",
+ "\u{1F1F5}\u{1F1F8}",
+ "\u{1F1F5}\u{1F1F9}",
+ "\u{1F1F5}\u{1F1FC}",
+ "\u{1F1F5}\u{1F1FE}",
+ "\u{1F1F6}\u{1F1E6}",
+ "\u{1F1F7}\u{1F1EA}",
+ "\u{1F1F7}\u{1F1F4}",
+ "\u{1F1F7}\u{1F1F8}",
+ "\u{1F1F7}\u{1F1FA}",
+ "\u{1F1F7}\u{1F1FC}",
+ "\u{1F1F8}\u{1F1E6}",
+ "\u{1F1F8}\u{1F1E7}",
+ "\u{1F1F8}\u{1F1E8}",
+ "\u{1F1F8}\u{1F1E9}",
+ "\u{1F1F8}\u{1F1EA}",
+ "\u{1F1F8}\u{1F1EC}",
+ "\u{1F1F8}\u{1F1ED}",
+ "\u{1F1F8}\u{1F1EE}",
+ "\u{1F1F8}\u{1F1EF}",
+ "\u{1F1F8}\u{1F1F0}",
+ "\u{1F1F8}\u{1F1F1}",
+ "\u{1F1F8}\u{1F1F2}",
+ "\u{1F1F8}\u{1F1F3}",
+ "\u{1F1F8}\u{1F1F4}",
+ "\u{1F1F8}\u{1F1F7}",
+ "\u{1F1F8}\u{1F1F8}",
+ "\u{1F1F8}\u{1F1F9}",
+ "\u{1F1F8}\u{1F1FB}",
+ "\u{1F1F8}\u{1F1FD}",
+ "\u{1F1F8}\u{1F1FE}",
+ "\u{1F1F8}\u{1F1FF}",
+ "\u{1F1F9}\u{1F1E6}",
+ "\u{1F1F9}\u{1F1E8}",
+ "\u{1F1F9}\u{1F1E9}",
+ "\u{1F1F9}\u{1F1EB}",
+ "\u{1F1F9}\u{1F1EC}",
+ "\u{1F1F9}\u{1F1ED}",
+ "\u{1F1F9}\u{1F1EF}",
+ "\u{1F1F9}\u{1F1F0}",
+ "\u{1F1F9}\u{1F1F1}",
+ "\u{1F1F9}\u{1F1F2}",
+ "\u{1F1F9}\u{1F1F3}",
+ "\u{1F1F9}\u{1F1F4}",
+ "\u{1F1F9}\u{1F1F7}",
+ "\u{1F1F9}\u{1F1F9}",
+ "\u{1F1F9}\u{1F1FB}",
+ "\u{1F1F9}\u{1F1FC}",
+ "\u{1F1F9}\u{1F1FF}",
+ "\u{1F1FA}\u{1F1E6}",
+ "\u{1F1FA}\u{1F1EC}",
+ "\u{1F1FA}\u{1F1F2}",
+ "\u{1F1FA}\u{1F1F3}",
+ "\u{1F1FA}\u{1F1F8}",
+ "\u{1F1FA}\u{1F1FE}",
+ "\u{1F1FA}\u{1F1FF}",
+ "\u{1F1FB}\u{1F1E6}",
+ "\u{1F1FB}\u{1F1E8}",
+ "\u{1F1FB}\u{1F1EA}",
+ "\u{1F1FB}\u{1F1EC}",
+ "\u{1F1FB}\u{1F1EE}",
+ "\u{1F1FB}\u{1F1F3}",
+ "\u{1F1FB}\u{1F1FA}",
+ "\u{1F1FC}\u{1F1EB}",
+ "\u{1F1FC}\u{1F1F8}",
+ "\u{1F1FD}\u{1F1F0}",
+ "\u{1F1FE}\u{1F1EA}",
+ "\u{1F1FE}\u{1F1F9}",
+ "\u{1F1FF}\u{1F1E6}",
+ "\u{1F1FF}\u{1F1F2}",
+ "\u{1F1FF}\u{1F1FC}"
+ ],
+ nonMatchStrings: [
+ "\u{1F1E8}",
+ "\u{1F1E6}",
+ "\u{1F1E9}",
+ "\u{1F1E6}",
+ "\u{1F1EA}",
+ "\u{1F1E6}",
+ "\u{1F1EB}",
+ "\u{1F1E6}",
+ "\u{1F1EC}",
+ "\u{1F1E6}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence-negative-CharacterClass.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence-negative-CharacterClass.js
new file mode 100644
index 0000000000..2497daa7db
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence-negative-CharacterClass.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Negating Unicode property escapes for `RGI_Emoji_Modifier_Sequence` (property of strings) with `[^\p{…}]` throws an early error.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-isvalidregularexpressionliteral
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/[^\p{RGI_Emoji_Modifier_Sequence}]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence-negative-P.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence-negative-P.js
new file mode 100644
index 0000000000..dff6d97a2c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence-negative-P.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Negating Unicode property escapes for `RGI_Emoji_Modifier_Sequence` (property of strings) with `\P{…}` throws an early error.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-isvalidregularexpressionliteral
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/\P{RGI_Emoji_Modifier_Sequence}/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence-negative-u.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence-negative-u.js
new file mode 100644
index 0000000000..d62b1d7afd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence-negative-u.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `RGI_Emoji_Modifier_Sequence` (property of strings) with the `u` flag throws an early error. Properties of strings are only supported through the `v` flag.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-patterns-static-semantics-early-errors
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/\p{RGI_Emoji_Modifier_Sequence}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence.js
new file mode 100644
index 0000000000..f76417e920
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence.js
@@ -0,0 +1,690 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `RGI_Emoji_Modifier_Sequence` (property of strings)
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testPropertyOfStrings({
+ regExp: /^\p{RGI_Emoji_Modifier_Sequence}+$/v,
+ expression: "\\p{RGI_Emoji_Modifier_Sequence}",
+ matchStrings: [
+ "\u261D\u{1F3FB}",
+ "\u261D\u{1F3FC}",
+ "\u261D\u{1F3FD}",
+ "\u261D\u{1F3FE}",
+ "\u261D\u{1F3FF}",
+ "\u26F9\u{1F3FB}",
+ "\u26F9\u{1F3FC}",
+ "\u26F9\u{1F3FD}",
+ "\u26F9\u{1F3FE}",
+ "\u26F9\u{1F3FF}",
+ "\u270A\u{1F3FB}",
+ "\u270A\u{1F3FC}",
+ "\u270A\u{1F3FD}",
+ "\u270A\u{1F3FE}",
+ "\u270A\u{1F3FF}",
+ "\u270B\u{1F3FB}",
+ "\u270B\u{1F3FC}",
+ "\u270B\u{1F3FD}",
+ "\u270B\u{1F3FE}",
+ "\u270B\u{1F3FF}",
+ "\u270C\u{1F3FB}",
+ "\u270C\u{1F3FC}",
+ "\u270C\u{1F3FD}",
+ "\u270C\u{1F3FE}",
+ "\u270C\u{1F3FF}",
+ "\u270D\u{1F3FB}",
+ "\u270D\u{1F3FC}",
+ "\u270D\u{1F3FD}",
+ "\u270D\u{1F3FE}",
+ "\u270D\u{1F3FF}",
+ "\u{1F385}\u{1F3FB}",
+ "\u{1F385}\u{1F3FC}",
+ "\u{1F385}\u{1F3FD}",
+ "\u{1F385}\u{1F3FE}",
+ "\u{1F385}\u{1F3FF}",
+ "\u{1F3C2}\u{1F3FB}",
+ "\u{1F3C2}\u{1F3FC}",
+ "\u{1F3C2}\u{1F3FD}",
+ "\u{1F3C2}\u{1F3FE}",
+ "\u{1F3C2}\u{1F3FF}",
+ "\u{1F3C3}\u{1F3FB}",
+ "\u{1F3C3}\u{1F3FC}",
+ "\u{1F3C3}\u{1F3FD}",
+ "\u{1F3C3}\u{1F3FE}",
+ "\u{1F3C3}\u{1F3FF}",
+ "\u{1F3C4}\u{1F3FB}",
+ "\u{1F3C4}\u{1F3FC}",
+ "\u{1F3C4}\u{1F3FD}",
+ "\u{1F3C4}\u{1F3FE}",
+ "\u{1F3C4}\u{1F3FF}",
+ "\u{1F3C7}\u{1F3FB}",
+ "\u{1F3C7}\u{1F3FC}",
+ "\u{1F3C7}\u{1F3FD}",
+ "\u{1F3C7}\u{1F3FE}",
+ "\u{1F3C7}\u{1F3FF}",
+ "\u{1F3CA}\u{1F3FB}",
+ "\u{1F3CA}\u{1F3FC}",
+ "\u{1F3CA}\u{1F3FD}",
+ "\u{1F3CA}\u{1F3FE}",
+ "\u{1F3CA}\u{1F3FF}",
+ "\u{1F3CB}\u{1F3FB}",
+ "\u{1F3CB}\u{1F3FC}",
+ "\u{1F3CB}\u{1F3FD}",
+ "\u{1F3CB}\u{1F3FE}",
+ "\u{1F3CB}\u{1F3FF}",
+ "\u{1F3CC}\u{1F3FB}",
+ "\u{1F3CC}\u{1F3FC}",
+ "\u{1F3CC}\u{1F3FD}",
+ "\u{1F3CC}\u{1F3FE}",
+ "\u{1F3CC}\u{1F3FF}",
+ "\u{1F442}\u{1F3FB}",
+ "\u{1F442}\u{1F3FC}",
+ "\u{1F442}\u{1F3FD}",
+ "\u{1F442}\u{1F3FE}",
+ "\u{1F442}\u{1F3FF}",
+ "\u{1F443}\u{1F3FB}",
+ "\u{1F443}\u{1F3FC}",
+ "\u{1F443}\u{1F3FD}",
+ "\u{1F443}\u{1F3FE}",
+ "\u{1F443}\u{1F3FF}",
+ "\u{1F446}\u{1F3FB}",
+ "\u{1F446}\u{1F3FC}",
+ "\u{1F446}\u{1F3FD}",
+ "\u{1F446}\u{1F3FE}",
+ "\u{1F446}\u{1F3FF}",
+ "\u{1F447}\u{1F3FB}",
+ "\u{1F447}\u{1F3FC}",
+ "\u{1F447}\u{1F3FD}",
+ "\u{1F447}\u{1F3FE}",
+ "\u{1F447}\u{1F3FF}",
+ "\u{1F448}\u{1F3FB}",
+ "\u{1F448}\u{1F3FC}",
+ "\u{1F448}\u{1F3FD}",
+ "\u{1F448}\u{1F3FE}",
+ "\u{1F448}\u{1F3FF}",
+ "\u{1F449}\u{1F3FB}",
+ "\u{1F449}\u{1F3FC}",
+ "\u{1F449}\u{1F3FD}",
+ "\u{1F449}\u{1F3FE}",
+ "\u{1F449}\u{1F3FF}",
+ "\u{1F44A}\u{1F3FB}",
+ "\u{1F44A}\u{1F3FC}",
+ "\u{1F44A}\u{1F3FD}",
+ "\u{1F44A}\u{1F3FE}",
+ "\u{1F44A}\u{1F3FF}",
+ "\u{1F44B}\u{1F3FB}",
+ "\u{1F44B}\u{1F3FC}",
+ "\u{1F44B}\u{1F3FD}",
+ "\u{1F44B}\u{1F3FE}",
+ "\u{1F44B}\u{1F3FF}",
+ "\u{1F44C}\u{1F3FB}",
+ "\u{1F44C}\u{1F3FC}",
+ "\u{1F44C}\u{1F3FD}",
+ "\u{1F44C}\u{1F3FE}",
+ "\u{1F44C}\u{1F3FF}",
+ "\u{1F44D}\u{1F3FB}",
+ "\u{1F44D}\u{1F3FC}",
+ "\u{1F44D}\u{1F3FD}",
+ "\u{1F44D}\u{1F3FE}",
+ "\u{1F44D}\u{1F3FF}",
+ "\u{1F44E}\u{1F3FB}",
+ "\u{1F44E}\u{1F3FC}",
+ "\u{1F44E}\u{1F3FD}",
+ "\u{1F44E}\u{1F3FE}",
+ "\u{1F44E}\u{1F3FF}",
+ "\u{1F44F}\u{1F3FB}",
+ "\u{1F44F}\u{1F3FC}",
+ "\u{1F44F}\u{1F3FD}",
+ "\u{1F44F}\u{1F3FE}",
+ "\u{1F44F}\u{1F3FF}",
+ "\u{1F450}\u{1F3FB}",
+ "\u{1F450}\u{1F3FC}",
+ "\u{1F450}\u{1F3FD}",
+ "\u{1F450}\u{1F3FE}",
+ "\u{1F450}\u{1F3FF}",
+ "\u{1F466}\u{1F3FB}",
+ "\u{1F466}\u{1F3FC}",
+ "\u{1F466}\u{1F3FD}",
+ "\u{1F466}\u{1F3FE}",
+ "\u{1F466}\u{1F3FF}",
+ "\u{1F467}\u{1F3FB}",
+ "\u{1F467}\u{1F3FC}",
+ "\u{1F467}\u{1F3FD}",
+ "\u{1F467}\u{1F3FE}",
+ "\u{1F467}\u{1F3FF}",
+ "\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}",
+ "\u{1F46B}\u{1F3FB}",
+ "\u{1F46B}\u{1F3FC}",
+ "\u{1F46B}\u{1F3FD}",
+ "\u{1F46B}\u{1F3FE}",
+ "\u{1F46B}\u{1F3FF}",
+ "\u{1F46C}\u{1F3FB}",
+ "\u{1F46C}\u{1F3FC}",
+ "\u{1F46C}\u{1F3FD}",
+ "\u{1F46C}\u{1F3FE}",
+ "\u{1F46C}\u{1F3FF}",
+ "\u{1F46D}\u{1F3FB}",
+ "\u{1F46D}\u{1F3FC}",
+ "\u{1F46D}\u{1F3FD}",
+ "\u{1F46D}\u{1F3FE}",
+ "\u{1F46D}\u{1F3FF}",
+ "\u{1F46E}\u{1F3FB}",
+ "\u{1F46E}\u{1F3FC}",
+ "\u{1F46E}\u{1F3FD}",
+ "\u{1F46E}\u{1F3FE}",
+ "\u{1F46E}\u{1F3FF}",
+ "\u{1F470}\u{1F3FB}",
+ "\u{1F470}\u{1F3FC}",
+ "\u{1F470}\u{1F3FD}",
+ "\u{1F470}\u{1F3FE}",
+ "\u{1F470}\u{1F3FF}",
+ "\u{1F471}\u{1F3FB}",
+ "\u{1F471}\u{1F3FC}",
+ "\u{1F471}\u{1F3FD}",
+ "\u{1F471}\u{1F3FE}",
+ "\u{1F471}\u{1F3FF}",
+ "\u{1F472}\u{1F3FB}",
+ "\u{1F472}\u{1F3FC}",
+ "\u{1F472}\u{1F3FD}",
+ "\u{1F472}\u{1F3FE}",
+ "\u{1F472}\u{1F3FF}",
+ "\u{1F473}\u{1F3FB}",
+ "\u{1F473}\u{1F3FC}",
+ "\u{1F473}\u{1F3FD}",
+ "\u{1F473}\u{1F3FE}",
+ "\u{1F473}\u{1F3FF}",
+ "\u{1F474}\u{1F3FB}",
+ "\u{1F474}\u{1F3FC}",
+ "\u{1F474}\u{1F3FD}",
+ "\u{1F474}\u{1F3FE}",
+ "\u{1F474}\u{1F3FF}",
+ "\u{1F475}\u{1F3FB}",
+ "\u{1F475}\u{1F3FC}",
+ "\u{1F475}\u{1F3FD}",
+ "\u{1F475}\u{1F3FE}",
+ "\u{1F475}\u{1F3FF}",
+ "\u{1F476}\u{1F3FB}",
+ "\u{1F476}\u{1F3FC}",
+ "\u{1F476}\u{1F3FD}",
+ "\u{1F476}\u{1F3FE}",
+ "\u{1F476}\u{1F3FF}",
+ "\u{1F477}\u{1F3FB}",
+ "\u{1F477}\u{1F3FC}",
+ "\u{1F477}\u{1F3FD}",
+ "\u{1F477}\u{1F3FE}",
+ "\u{1F477}\u{1F3FF}",
+ "\u{1F478}\u{1F3FB}",
+ "\u{1F478}\u{1F3FC}",
+ "\u{1F478}\u{1F3FD}",
+ "\u{1F478}\u{1F3FE}",
+ "\u{1F478}\u{1F3FF}",
+ "\u{1F47C}\u{1F3FB}",
+ "\u{1F47C}\u{1F3FC}",
+ "\u{1F47C}\u{1F3FD}",
+ "\u{1F47C}\u{1F3FE}",
+ "\u{1F47C}\u{1F3FF}",
+ "\u{1F481}\u{1F3FB}",
+ "\u{1F481}\u{1F3FC}",
+ "\u{1F481}\u{1F3FD}",
+ "\u{1F481}\u{1F3FE}",
+ "\u{1F481}\u{1F3FF}",
+ "\u{1F482}\u{1F3FB}",
+ "\u{1F482}\u{1F3FC}",
+ "\u{1F482}\u{1F3FD}",
+ "\u{1F482}\u{1F3FE}",
+ "\u{1F482}\u{1F3FF}",
+ "\u{1F483}\u{1F3FB}",
+ "\u{1F483}\u{1F3FC}",
+ "\u{1F483}\u{1F3FD}",
+ "\u{1F483}\u{1F3FE}",
+ "\u{1F483}\u{1F3FF}",
+ "\u{1F485}\u{1F3FB}",
+ "\u{1F485}\u{1F3FC}",
+ "\u{1F485}\u{1F3FD}",
+ "\u{1F485}\u{1F3FE}",
+ "\u{1F485}\u{1F3FF}",
+ "\u{1F486}\u{1F3FB}",
+ "\u{1F486}\u{1F3FC}",
+ "\u{1F486}\u{1F3FD}",
+ "\u{1F486}\u{1F3FE}",
+ "\u{1F486}\u{1F3FF}",
+ "\u{1F487}\u{1F3FB}",
+ "\u{1F487}\u{1F3FC}",
+ "\u{1F487}\u{1F3FD}",
+ "\u{1F487}\u{1F3FE}",
+ "\u{1F487}\u{1F3FF}",
+ "\u{1F48F}\u{1F3FB}",
+ "\u{1F48F}\u{1F3FC}",
+ "\u{1F48F}\u{1F3FD}",
+ "\u{1F48F}\u{1F3FE}",
+ "\u{1F48F}\u{1F3FF}",
+ "\u{1F491}\u{1F3FB}",
+ "\u{1F491}\u{1F3FC}",
+ "\u{1F491}\u{1F3FD}",
+ "\u{1F491}\u{1F3FE}",
+ "\u{1F491}\u{1F3FF}",
+ "\u{1F4AA}\u{1F3FB}",
+ "\u{1F4AA}\u{1F3FC}",
+ "\u{1F4AA}\u{1F3FD}",
+ "\u{1F4AA}\u{1F3FE}",
+ "\u{1F4AA}\u{1F3FF}",
+ "\u{1F574}\u{1F3FB}",
+ "\u{1F574}\u{1F3FC}",
+ "\u{1F574}\u{1F3FD}",
+ "\u{1F574}\u{1F3FE}",
+ "\u{1F574}\u{1F3FF}",
+ "\u{1F575}\u{1F3FB}",
+ "\u{1F575}\u{1F3FC}",
+ "\u{1F575}\u{1F3FD}",
+ "\u{1F575}\u{1F3FE}",
+ "\u{1F575}\u{1F3FF}",
+ "\u{1F57A}\u{1F3FB}",
+ "\u{1F57A}\u{1F3FC}",
+ "\u{1F57A}\u{1F3FD}",
+ "\u{1F57A}\u{1F3FE}",
+ "\u{1F57A}\u{1F3FF}",
+ "\u{1F590}\u{1F3FB}",
+ "\u{1F590}\u{1F3FC}",
+ "\u{1F590}\u{1F3FD}",
+ "\u{1F590}\u{1F3FE}",
+ "\u{1F590}\u{1F3FF}",
+ "\u{1F595}\u{1F3FB}",
+ "\u{1F595}\u{1F3FC}",
+ "\u{1F595}\u{1F3FD}",
+ "\u{1F595}\u{1F3FE}",
+ "\u{1F595}\u{1F3FF}",
+ "\u{1F596}\u{1F3FB}",
+ "\u{1F596}\u{1F3FC}",
+ "\u{1F596}\u{1F3FD}",
+ "\u{1F596}\u{1F3FE}",
+ "\u{1F596}\u{1F3FF}",
+ "\u{1F645}\u{1F3FB}",
+ "\u{1F645}\u{1F3FC}",
+ "\u{1F645}\u{1F3FD}",
+ "\u{1F645}\u{1F3FE}",
+ "\u{1F645}\u{1F3FF}",
+ "\u{1F646}\u{1F3FB}",
+ "\u{1F646}\u{1F3FC}",
+ "\u{1F646}\u{1F3FD}",
+ "\u{1F646}\u{1F3FE}",
+ "\u{1F646}\u{1F3FF}",
+ "\u{1F647}\u{1F3FB}",
+ "\u{1F647}\u{1F3FC}",
+ "\u{1F647}\u{1F3FD}",
+ "\u{1F647}\u{1F3FE}",
+ "\u{1F647}\u{1F3FF}",
+ "\u{1F64B}\u{1F3FB}",
+ "\u{1F64B}\u{1F3FC}",
+ "\u{1F64B}\u{1F3FD}",
+ "\u{1F64B}\u{1F3FE}",
+ "\u{1F64B}\u{1F3FF}",
+ "\u{1F64C}\u{1F3FB}",
+ "\u{1F64C}\u{1F3FC}",
+ "\u{1F64C}\u{1F3FD}",
+ "\u{1F64C}\u{1F3FE}",
+ "\u{1F64C}\u{1F3FF}",
+ "\u{1F64D}\u{1F3FB}",
+ "\u{1F64D}\u{1F3FC}",
+ "\u{1F64D}\u{1F3FD}",
+ "\u{1F64D}\u{1F3FE}",
+ "\u{1F64D}\u{1F3FF}",
+ "\u{1F64E}\u{1F3FB}",
+ "\u{1F64E}\u{1F3FC}",
+ "\u{1F64E}\u{1F3FD}",
+ "\u{1F64E}\u{1F3FE}",
+ "\u{1F64E}\u{1F3FF}",
+ "\u{1F64F}\u{1F3FB}",
+ "\u{1F64F}\u{1F3FC}",
+ "\u{1F64F}\u{1F3FD}",
+ "\u{1F64F}\u{1F3FE}",
+ "\u{1F64F}\u{1F3FF}",
+ "\u{1F6A3}\u{1F3FB}",
+ "\u{1F6A3}\u{1F3FC}",
+ "\u{1F6A3}\u{1F3FD}",
+ "\u{1F6A3}\u{1F3FE}",
+ "\u{1F6A3}\u{1F3FF}",
+ "\u{1F6B4}\u{1F3FB}",
+ "\u{1F6B4}\u{1F3FC}",
+ "\u{1F6B4}\u{1F3FD}",
+ "\u{1F6B4}\u{1F3FE}",
+ "\u{1F6B4}\u{1F3FF}",
+ "\u{1F6B5}\u{1F3FB}",
+ "\u{1F6B5}\u{1F3FC}",
+ "\u{1F6B5}\u{1F3FD}",
+ "\u{1F6B5}\u{1F3FE}",
+ "\u{1F6B5}\u{1F3FF}",
+ "\u{1F6B6}\u{1F3FB}",
+ "\u{1F6B6}\u{1F3FC}",
+ "\u{1F6B6}\u{1F3FD}",
+ "\u{1F6B6}\u{1F3FE}",
+ "\u{1F6B6}\u{1F3FF}",
+ "\u{1F6C0}\u{1F3FB}",
+ "\u{1F6C0}\u{1F3FC}",
+ "\u{1F6C0}\u{1F3FD}",
+ "\u{1F6C0}\u{1F3FE}",
+ "\u{1F6C0}\u{1F3FF}",
+ "\u{1F6CC}\u{1F3FB}",
+ "\u{1F6CC}\u{1F3FC}",
+ "\u{1F6CC}\u{1F3FD}",
+ "\u{1F6CC}\u{1F3FE}",
+ "\u{1F6CC}\u{1F3FF}",
+ "\u{1F90C}\u{1F3FB}",
+ "\u{1F90C}\u{1F3FC}",
+ "\u{1F90C}\u{1F3FD}",
+ "\u{1F90C}\u{1F3FE}",
+ "\u{1F90C}\u{1F3FF}",
+ "\u{1F90F}\u{1F3FB}",
+ "\u{1F90F}\u{1F3FC}",
+ "\u{1F90F}\u{1F3FD}",
+ "\u{1F90F}\u{1F3FE}",
+ "\u{1F90F}\u{1F3FF}",
+ "\u{1F918}\u{1F3FB}",
+ "\u{1F918}\u{1F3FC}",
+ "\u{1F918}\u{1F3FD}",
+ "\u{1F918}\u{1F3FE}",
+ "\u{1F918}\u{1F3FF}",
+ "\u{1F919}\u{1F3FB}",
+ "\u{1F919}\u{1F3FC}",
+ "\u{1F919}\u{1F3FD}",
+ "\u{1F919}\u{1F3FE}",
+ "\u{1F919}\u{1F3FF}",
+ "\u{1F91A}\u{1F3FB}",
+ "\u{1F91A}\u{1F3FC}",
+ "\u{1F91A}\u{1F3FD}",
+ "\u{1F91A}\u{1F3FE}",
+ "\u{1F91A}\u{1F3FF}",
+ "\u{1F91B}\u{1F3FB}",
+ "\u{1F91B}\u{1F3FC}",
+ "\u{1F91B}\u{1F3FD}",
+ "\u{1F91B}\u{1F3FE}",
+ "\u{1F91B}\u{1F3FF}",
+ "\u{1F91C}\u{1F3FB}",
+ "\u{1F91C}\u{1F3FC}",
+ "\u{1F91C}\u{1F3FD}",
+ "\u{1F91C}\u{1F3FE}",
+ "\u{1F91C}\u{1F3FF}",
+ "\u{1F91D}\u{1F3FB}",
+ "\u{1F91D}\u{1F3FC}",
+ "\u{1F91D}\u{1F3FD}",
+ "\u{1F91D}\u{1F3FE}",
+ "\u{1F91D}\u{1F3FF}",
+ "\u{1F91E}\u{1F3FB}",
+ "\u{1F91E}\u{1F3FC}",
+ "\u{1F91E}\u{1F3FD}",
+ "\u{1F91E}\u{1F3FE}",
+ "\u{1F91E}\u{1F3FF}",
+ "\u{1F91F}\u{1F3FB}",
+ "\u{1F91F}\u{1F3FC}",
+ "\u{1F91F}\u{1F3FD}",
+ "\u{1F91F}\u{1F3FE}",
+ "\u{1F91F}\u{1F3FF}",
+ "\u{1F926}\u{1F3FB}",
+ "\u{1F926}\u{1F3FC}",
+ "\u{1F926}\u{1F3FD}",
+ "\u{1F926}\u{1F3FE}",
+ "\u{1F926}\u{1F3FF}",
+ "\u{1F930}\u{1F3FB}",
+ "\u{1F930}\u{1F3FC}",
+ "\u{1F930}\u{1F3FD}",
+ "\u{1F930}\u{1F3FE}",
+ "\u{1F930}\u{1F3FF}",
+ "\u{1F931}\u{1F3FB}",
+ "\u{1F931}\u{1F3FC}",
+ "\u{1F931}\u{1F3FD}",
+ "\u{1F931}\u{1F3FE}",
+ "\u{1F931}\u{1F3FF}",
+ "\u{1F932}\u{1F3FB}",
+ "\u{1F932}\u{1F3FC}",
+ "\u{1F932}\u{1F3FD}",
+ "\u{1F932}\u{1F3FE}",
+ "\u{1F932}\u{1F3FF}",
+ "\u{1F933}\u{1F3FB}",
+ "\u{1F933}\u{1F3FC}",
+ "\u{1F933}\u{1F3FD}",
+ "\u{1F933}\u{1F3FE}",
+ "\u{1F933}\u{1F3FF}",
+ "\u{1F934}\u{1F3FB}",
+ "\u{1F934}\u{1F3FC}",
+ "\u{1F934}\u{1F3FD}",
+ "\u{1F934}\u{1F3FE}",
+ "\u{1F934}\u{1F3FF}",
+ "\u{1F935}\u{1F3FB}",
+ "\u{1F935}\u{1F3FC}",
+ "\u{1F935}\u{1F3FD}",
+ "\u{1F935}\u{1F3FE}",
+ "\u{1F935}\u{1F3FF}",
+ "\u{1F936}\u{1F3FB}",
+ "\u{1F936}\u{1F3FC}",
+ "\u{1F936}\u{1F3FD}",
+ "\u{1F936}\u{1F3FE}",
+ "\u{1F936}\u{1F3FF}",
+ "\u{1F937}\u{1F3FB}",
+ "\u{1F937}\u{1F3FC}",
+ "\u{1F937}\u{1F3FD}",
+ "\u{1F937}\u{1F3FE}",
+ "\u{1F937}\u{1F3FF}",
+ "\u{1F938}\u{1F3FB}",
+ "\u{1F938}\u{1F3FC}",
+ "\u{1F938}\u{1F3FD}",
+ "\u{1F938}\u{1F3FE}",
+ "\u{1F938}\u{1F3FF}",
+ "\u{1F939}\u{1F3FB}",
+ "\u{1F939}\u{1F3FC}",
+ "\u{1F939}\u{1F3FD}",
+ "\u{1F939}\u{1F3FE}",
+ "\u{1F939}\u{1F3FF}",
+ "\u{1F93D}\u{1F3FB}",
+ "\u{1F93D}\u{1F3FC}",
+ "\u{1F93D}\u{1F3FD}",
+ "\u{1F93D}\u{1F3FE}",
+ "\u{1F93D}\u{1F3FF}",
+ "\u{1F93E}\u{1F3FB}",
+ "\u{1F93E}\u{1F3FC}",
+ "\u{1F93E}\u{1F3FD}",
+ "\u{1F93E}\u{1F3FE}",
+ "\u{1F93E}\u{1F3FF}",
+ "\u{1F977}\u{1F3FB}",
+ "\u{1F977}\u{1F3FC}",
+ "\u{1F977}\u{1F3FD}",
+ "\u{1F977}\u{1F3FE}",
+ "\u{1F977}\u{1F3FF}",
+ "\u{1F9B5}\u{1F3FB}",
+ "\u{1F9B5}\u{1F3FC}",
+ "\u{1F9B5}\u{1F3FD}",
+ "\u{1F9B5}\u{1F3FE}",
+ "\u{1F9B5}\u{1F3FF}",
+ "\u{1F9B6}\u{1F3FB}",
+ "\u{1F9B6}\u{1F3FC}",
+ "\u{1F9B6}\u{1F3FD}",
+ "\u{1F9B6}\u{1F3FE}",
+ "\u{1F9B6}\u{1F3FF}",
+ "\u{1F9B8}\u{1F3FB}",
+ "\u{1F9B8}\u{1F3FC}",
+ "\u{1F9B8}\u{1F3FD}",
+ "\u{1F9B8}\u{1F3FE}",
+ "\u{1F9B8}\u{1F3FF}",
+ "\u{1F9B9}\u{1F3FB}",
+ "\u{1F9B9}\u{1F3FC}",
+ "\u{1F9B9}\u{1F3FD}",
+ "\u{1F9B9}\u{1F3FE}",
+ "\u{1F9B9}\u{1F3FF}",
+ "\u{1F9BB}\u{1F3FB}",
+ "\u{1F9BB}\u{1F3FC}",
+ "\u{1F9BB}\u{1F3FD}",
+ "\u{1F9BB}\u{1F3FE}",
+ "\u{1F9BB}\u{1F3FF}",
+ "\u{1F9CD}\u{1F3FB}",
+ "\u{1F9CD}\u{1F3FC}",
+ "\u{1F9CD}\u{1F3FD}",
+ "\u{1F9CD}\u{1F3FE}",
+ "\u{1F9CD}\u{1F3FF}",
+ "\u{1F9CE}\u{1F3FB}",
+ "\u{1F9CE}\u{1F3FC}",
+ "\u{1F9CE}\u{1F3FD}",
+ "\u{1F9CE}\u{1F3FE}",
+ "\u{1F9CE}\u{1F3FF}",
+ "\u{1F9CF}\u{1F3FB}",
+ "\u{1F9CF}\u{1F3FC}",
+ "\u{1F9CF}\u{1F3FD}",
+ "\u{1F9CF}\u{1F3FE}",
+ "\u{1F9CF}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D2}\u{1F3FB}",
+ "\u{1F9D2}\u{1F3FC}",
+ "\u{1F9D2}\u{1F3FD}",
+ "\u{1F9D2}\u{1F3FE}",
+ "\u{1F9D2}\u{1F3FF}",
+ "\u{1F9D3}\u{1F3FB}",
+ "\u{1F9D3}\u{1F3FC}",
+ "\u{1F9D3}\u{1F3FD}",
+ "\u{1F9D3}\u{1F3FE}",
+ "\u{1F9D3}\u{1F3FF}",
+ "\u{1F9D4}\u{1F3FB}",
+ "\u{1F9D4}\u{1F3FC}",
+ "\u{1F9D4}\u{1F3FD}",
+ "\u{1F9D4}\u{1F3FE}",
+ "\u{1F9D4}\u{1F3FF}",
+ "\u{1F9D5}\u{1F3FB}",
+ "\u{1F9D5}\u{1F3FC}",
+ "\u{1F9D5}\u{1F3FD}",
+ "\u{1F9D5}\u{1F3FE}",
+ "\u{1F9D5}\u{1F3FF}",
+ "\u{1F9D6}\u{1F3FB}",
+ "\u{1F9D6}\u{1F3FC}",
+ "\u{1F9D6}\u{1F3FD}",
+ "\u{1F9D6}\u{1F3FE}",
+ "\u{1F9D6}\u{1F3FF}",
+ "\u{1F9D7}\u{1F3FB}",
+ "\u{1F9D7}\u{1F3FC}",
+ "\u{1F9D7}\u{1F3FD}",
+ "\u{1F9D7}\u{1F3FE}",
+ "\u{1F9D7}\u{1F3FF}",
+ "\u{1F9D8}\u{1F3FB}",
+ "\u{1F9D8}\u{1F3FC}",
+ "\u{1F9D8}\u{1F3FD}",
+ "\u{1F9D8}\u{1F3FE}",
+ "\u{1F9D8}\u{1F3FF}",
+ "\u{1F9D9}\u{1F3FB}",
+ "\u{1F9D9}\u{1F3FC}",
+ "\u{1F9D9}\u{1F3FD}",
+ "\u{1F9D9}\u{1F3FE}",
+ "\u{1F9D9}\u{1F3FF}",
+ "\u{1F9DA}\u{1F3FB}",
+ "\u{1F9DA}\u{1F3FC}",
+ "\u{1F9DA}\u{1F3FD}",
+ "\u{1F9DA}\u{1F3FE}",
+ "\u{1F9DA}\u{1F3FF}",
+ "\u{1F9DB}\u{1F3FB}",
+ "\u{1F9DB}\u{1F3FC}",
+ "\u{1F9DB}\u{1F3FD}",
+ "\u{1F9DB}\u{1F3FE}",
+ "\u{1F9DB}\u{1F3FF}",
+ "\u{1F9DC}\u{1F3FB}",
+ "\u{1F9DC}\u{1F3FC}",
+ "\u{1F9DC}\u{1F3FD}",
+ "\u{1F9DC}\u{1F3FE}",
+ "\u{1F9DC}\u{1F3FF}",
+ "\u{1F9DD}\u{1F3FB}",
+ "\u{1F9DD}\u{1F3FC}",
+ "\u{1F9DD}\u{1F3FD}",
+ "\u{1F9DD}\u{1F3FE}",
+ "\u{1F9DD}\u{1F3FF}",
+ "\u{1FAC3}\u{1F3FB}",
+ "\u{1FAC3}\u{1F3FC}",
+ "\u{1FAC3}\u{1F3FD}",
+ "\u{1FAC3}\u{1F3FE}",
+ "\u{1FAC3}\u{1F3FF}",
+ "\u{1FAC4}\u{1F3FB}",
+ "\u{1FAC4}\u{1F3FC}",
+ "\u{1FAC4}\u{1F3FD}",
+ "\u{1FAC4}\u{1F3FE}",
+ "\u{1FAC4}\u{1F3FF}",
+ "\u{1FAC5}\u{1F3FB}",
+ "\u{1FAC5}\u{1F3FC}",
+ "\u{1FAC5}\u{1F3FD}",
+ "\u{1FAC5}\u{1F3FE}",
+ "\u{1FAC5}\u{1F3FF}",
+ "\u{1FAF0}\u{1F3FB}",
+ "\u{1FAF0}\u{1F3FC}",
+ "\u{1FAF0}\u{1F3FD}",
+ "\u{1FAF0}\u{1F3FE}",
+ "\u{1FAF0}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FE}",
+ "\u{1FAF1}\u{1F3FF}",
+ "\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF3}\u{1F3FB}",
+ "\u{1FAF3}\u{1F3FC}",
+ "\u{1FAF3}\u{1F3FD}",
+ "\u{1FAF3}\u{1F3FE}",
+ "\u{1FAF3}\u{1F3FF}",
+ "\u{1FAF4}\u{1F3FB}",
+ "\u{1FAF4}\u{1F3FC}",
+ "\u{1FAF4}\u{1F3FD}",
+ "\u{1FAF4}\u{1F3FE}",
+ "\u{1FAF4}\u{1F3FF}",
+ "\u{1FAF5}\u{1F3FB}",
+ "\u{1FAF5}\u{1F3FC}",
+ "\u{1FAF5}\u{1F3FD}",
+ "\u{1FAF5}\u{1F3FE}",
+ "\u{1FAF5}\u{1F3FF}",
+ "\u{1FAF6}\u{1F3FB}",
+ "\u{1FAF6}\u{1F3FC}",
+ "\u{1FAF6}\u{1F3FD}",
+ "\u{1FAF6}\u{1F3FE}",
+ "\u{1FAF6}\u{1F3FF}",
+ "\u{1FAF7}\u{1F3FB}",
+ "\u{1FAF7}\u{1F3FC}",
+ "\u{1FAF7}\u{1F3FD}",
+ "\u{1FAF7}\u{1F3FE}",
+ "\u{1FAF7}\u{1F3FF}",
+ "\u{1FAF8}\u{1F3FB}",
+ "\u{1FAF8}\u{1F3FC}",
+ "\u{1FAF8}\u{1F3FD}",
+ "\u{1FAF8}\u{1F3FE}",
+ "\u{1FAF8}\u{1F3FF}"
+ ],
+ nonMatchStrings: [
+ "\u{1F3FB}",
+ "\u261D",
+ "\u{1F3FC}",
+ "\u261D",
+ "\u{1F3FD}",
+ "\u261D",
+ "\u{1F3FE}",
+ "\u261D",
+ "\u{1F3FF}",
+ "\u261D"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence-negative-CharacterClass.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence-negative-CharacterClass.js
new file mode 100644
index 0000000000..3b5cdb4261
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence-negative-CharacterClass.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Negating Unicode property escapes for `RGI_Emoji_Tag_Sequence` (property of strings) with `[^\p{…}]` throws an early error.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-isvalidregularexpressionliteral
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/[^\p{RGI_Emoji_Tag_Sequence}]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence-negative-P.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence-negative-P.js
new file mode 100644
index 0000000000..24036db8b6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence-negative-P.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Negating Unicode property escapes for `RGI_Emoji_Tag_Sequence` (property of strings) with `\P{…}` throws an early error.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-isvalidregularexpressionliteral
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/\P{RGI_Emoji_Tag_Sequence}/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence-negative-u.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence-negative-u.js
new file mode 100644
index 0000000000..f2cd29d623
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence-negative-u.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `RGI_Emoji_Tag_Sequence` (property of strings) with the `u` flag throws an early error. Properties of strings are only supported through the `v` flag.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-patterns-static-semantics-early-errors
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/\p{RGI_Emoji_Tag_Sequence}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence.js
new file mode 100644
index 0000000000..9f8bb40df4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence.js
@@ -0,0 +1,37 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `RGI_Emoji_Tag_Sequence` (property of strings)
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testPropertyOfStrings({
+ regExp: /^\p{RGI_Emoji_Tag_Sequence}+$/v,
+ expression: "\\p{RGI_Emoji_Tag_Sequence}",
+ matchStrings: [
+ "\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}",
+ "\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}",
+ "\u{1F3F4}\u{E0067}\u{E0062}\u{E0077}\u{E006C}\u{E0073}\u{E007F}"
+ ],
+ nonMatchStrings: [
+ "\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}",
+ "\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}",
+ "\u{1F3F4}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}",
+ "\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}",
+ "\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}",
+ "\u{1F3F4}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}",
+ "\u{E0067}\u{E0062}\u{E0077}\u{E006C}\u{E0073}\u{E007F}",
+ "\u{1F3F4}\u{E0067}\u{E0062}\u{E0077}\u{E006C}\u{E0073}",
+ "\u{1F3F4}\u{E0062}\u{E0077}\u{E006C}\u{E0073}\u{E007F}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence-negative-CharacterClass.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence-negative-CharacterClass.js
new file mode 100644
index 0000000000..fc0eed2a6c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence-negative-CharacterClass.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Negating Unicode property escapes for `RGI_Emoji_ZWJ_Sequence` (property of strings) with `[^\p{…}]` throws an early error.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-isvalidregularexpressionliteral
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/[^\p{RGI_Emoji_ZWJ_Sequence}]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence-negative-P.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence-negative-P.js
new file mode 100644
index 0000000000..cec5c0c57a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence-negative-P.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Negating Unicode property escapes for `RGI_Emoji_ZWJ_Sequence` (property of strings) with `\P{…}` throws an early error.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-isvalidregularexpressionliteral
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/\P{RGI_Emoji_ZWJ_Sequence}/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence-negative-u.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence-negative-u.js
new file mode 100644
index 0000000000..c5109d1262
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence-negative-u.js
@@ -0,0 +1,21 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `RGI_Emoji_ZWJ_Sequence` (property of strings) with the `u` flag throws an early error. Properties of strings are only supported through the `v` flag.
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-patterns-static-semantics-early-errors
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+negative:
+ phase: parse
+ type: SyntaxError
+---*/
+
+$DONOTEVALUATE();
+
+/\p{RGI_Emoji_ZWJ_Sequence}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence.js
new file mode 100644
index 0000000000..beef3e3c5c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence.js
@@ -0,0 +1,1390 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Unicode property escapes for `RGI_Emoji_ZWJ_Sequence` (property of strings)
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v15.0.0
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testPropertyOfStrings({
+ regExp: /^\p{RGI_Emoji_ZWJ_Sequence}+$/v,
+ expression: "\\p{RGI_Emoji_ZWJ_Sequence}",
+ matchStrings: [
+ "\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F468}",
+ "\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}",
+ "\u{1F468}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F466}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F467}",
+ "\u{1F468}\u200D\u{1F467}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F467}\u200D\u{1F467}",
+ "\u{1F468}\u200D\u{1F468}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F468}\u200D\u{1F466}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F468}\u200D\u{1F467}",
+ "\u{1F468}\u200D\u{1F468}\u200D\u{1F467}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F468}\u200D\u{1F467}\u200D\u{1F467}",
+ "\u{1F468}\u200D\u{1F469}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F469}\u200D\u{1F466}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F469}\u200D\u{1F467}",
+ "\u{1F468}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F466}",
+ "\u{1F468}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F467}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F468}",
+ "\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F469}",
+ "\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}",
+ "\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}",
+ "\u{1F469}\u200D\u{1F466}",
+ "\u{1F469}\u200D\u{1F466}\u200D\u{1F466}",
+ "\u{1F469}\u200D\u{1F467}",
+ "\u{1F469}\u200D\u{1F467}\u200D\u{1F466}",
+ "\u{1F469}\u200D\u{1F467}\u200D\u{1F467}",
+ "\u{1F469}\u200D\u{1F469}\u200D\u{1F466}",
+ "\u{1F469}\u200D\u{1F469}\u200D\u{1F466}\u200D\u{1F466}",
+ "\u{1F469}\u200D\u{1F469}\u200D\u{1F467}",
+ "\u{1F469}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F466}",
+ "\u{1F469}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F467}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F9D1}\u200D\u{1F91D}\u200D\u{1F9D1}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F384}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F384}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F384}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F384}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F384}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FB}\u200D\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FB}\u200D\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FB}\u200D\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF1}\u{1F3FB}\u200D\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FC}\u200D\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FC}\u200D\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FC}\u200D\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF1}\u{1F3FC}\u200D\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FD}\u200D\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FD}\u200D\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FD}\u200D\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF1}\u{1F3FD}\u200D\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FE}\u200D\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FE}\u200D\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FE}\u200D\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FE}\u200D\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FF}\u200D\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FF}\u200D\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FF}\u200D\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FF}\u200D\u{1FAF2}\u{1F3FE}",
+ "\u{1F468}\u200D\u2695\uFE0F",
+ "\u{1F468}\u200D\u2696\uFE0F",
+ "\u{1F468}\u200D\u2708\uFE0F",
+ "\u{1F468}\u200D\u{1F33E}",
+ "\u{1F468}\u200D\u{1F373}",
+ "\u{1F468}\u200D\u{1F37C}",
+ "\u{1F468}\u200D\u{1F393}",
+ "\u{1F468}\u200D\u{1F3A4}",
+ "\u{1F468}\u200D\u{1F3A8}",
+ "\u{1F468}\u200D\u{1F3EB}",
+ "\u{1F468}\u200D\u{1F3ED}",
+ "\u{1F468}\u200D\u{1F4BB}",
+ "\u{1F468}\u200D\u{1F4BC}",
+ "\u{1F468}\u200D\u{1F527}",
+ "\u{1F468}\u200D\u{1F52C}",
+ "\u{1F468}\u200D\u{1F680}",
+ "\u{1F468}\u200D\u{1F692}",
+ "\u{1F468}\u200D\u{1F9AF}",
+ "\u{1F468}\u200D\u{1F9BC}",
+ "\u{1F468}\u200D\u{1F9BD}",
+ "\u{1F468}\u{1F3FB}\u200D\u2695\uFE0F",
+ "\u{1F468}\u{1F3FB}\u200D\u2696\uFE0F",
+ "\u{1F468}\u{1F3FB}\u200D\u2708\uFE0F",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F33E}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F373}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F37C}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F393}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F3A4}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F3A8}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F3EB}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F3ED}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F4BB}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F4BC}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F527}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F52C}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F680}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F692}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9AF}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9BC}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9BD}",
+ "\u{1F468}\u{1F3FC}\u200D\u2695\uFE0F",
+ "\u{1F468}\u{1F3FC}\u200D\u2696\uFE0F",
+ "\u{1F468}\u{1F3FC}\u200D\u2708\uFE0F",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F33E}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F373}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F37C}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F393}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F3A4}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F3A8}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F3EB}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F3ED}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F4BB}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F4BC}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F527}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F52C}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F680}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F692}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9AF}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9BC}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9BD}",
+ "\u{1F468}\u{1F3FD}\u200D\u2695\uFE0F",
+ "\u{1F468}\u{1F3FD}\u200D\u2696\uFE0F",
+ "\u{1F468}\u{1F3FD}\u200D\u2708\uFE0F",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F33E}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F373}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F37C}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F393}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F3A4}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F3A8}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F3EB}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F3ED}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F4BB}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F4BC}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F527}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F52C}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F680}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F692}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9AF}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9BC}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9BD}",
+ "\u{1F468}\u{1F3FE}\u200D\u2695\uFE0F",
+ "\u{1F468}\u{1F3FE}\u200D\u2696\uFE0F",
+ "\u{1F468}\u{1F3FE}\u200D\u2708\uFE0F",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F33E}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F373}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F37C}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F393}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F3A4}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F3A8}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F3EB}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F3ED}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F4BB}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F4BC}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F527}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F52C}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F680}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F692}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9AF}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9BC}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9BD}",
+ "\u{1F468}\u{1F3FF}\u200D\u2695\uFE0F",
+ "\u{1F468}\u{1F3FF}\u200D\u2696\uFE0F",
+ "\u{1F468}\u{1F3FF}\u200D\u2708\uFE0F",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F33E}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F373}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F37C}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F393}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F3A4}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F3A8}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F3EB}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F3ED}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F4BB}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F4BC}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F527}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F52C}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F680}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F692}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9AF}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9BC}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9BD}",
+ "\u{1F469}\u200D\u2695\uFE0F",
+ "\u{1F469}\u200D\u2696\uFE0F",
+ "\u{1F469}\u200D\u2708\uFE0F",
+ "\u{1F469}\u200D\u{1F33E}",
+ "\u{1F469}\u200D\u{1F373}",
+ "\u{1F469}\u200D\u{1F37C}",
+ "\u{1F469}\u200D\u{1F393}",
+ "\u{1F469}\u200D\u{1F3A4}",
+ "\u{1F469}\u200D\u{1F3A8}",
+ "\u{1F469}\u200D\u{1F3EB}",
+ "\u{1F469}\u200D\u{1F3ED}",
+ "\u{1F469}\u200D\u{1F4BB}",
+ "\u{1F469}\u200D\u{1F4BC}",
+ "\u{1F469}\u200D\u{1F527}",
+ "\u{1F469}\u200D\u{1F52C}",
+ "\u{1F469}\u200D\u{1F680}",
+ "\u{1F469}\u200D\u{1F692}",
+ "\u{1F469}\u200D\u{1F9AF}",
+ "\u{1F469}\u200D\u{1F9BC}",
+ "\u{1F469}\u200D\u{1F9BD}",
+ "\u{1F469}\u{1F3FB}\u200D\u2695\uFE0F",
+ "\u{1F469}\u{1F3FB}\u200D\u2696\uFE0F",
+ "\u{1F469}\u{1F3FB}\u200D\u2708\uFE0F",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F33E}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F373}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F37C}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F393}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F3A4}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F3A8}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F3EB}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F3ED}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F4BB}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F4BC}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F527}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F52C}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F680}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F692}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9AF}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9BC}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9BD}",
+ "\u{1F469}\u{1F3FC}\u200D\u2695\uFE0F",
+ "\u{1F469}\u{1F3FC}\u200D\u2696\uFE0F",
+ "\u{1F469}\u{1F3FC}\u200D\u2708\uFE0F",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F33E}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F373}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F37C}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F393}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F3A4}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F3A8}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F3EB}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F3ED}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F4BB}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F4BC}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F527}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F52C}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F680}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F692}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9AF}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9BC}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9BD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2695\uFE0F",
+ "\u{1F469}\u{1F3FD}\u200D\u2696\uFE0F",
+ "\u{1F469}\u{1F3FD}\u200D\u2708\uFE0F",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F33E}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F373}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F37C}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F393}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F3A4}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F3A8}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F3EB}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F3ED}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F4BB}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F4BC}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F527}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F52C}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F680}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F692}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9AF}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9BC}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9BD}",
+ "\u{1F469}\u{1F3FE}\u200D\u2695\uFE0F",
+ "\u{1F469}\u{1F3FE}\u200D\u2696\uFE0F",
+ "\u{1F469}\u{1F3FE}\u200D\u2708\uFE0F",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F33E}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F373}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F37C}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F393}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F3A4}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F3A8}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F3EB}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F3ED}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F4BB}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F4BC}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F527}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F52C}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F680}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F692}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9AF}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9BC}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9BD}",
+ "\u{1F469}\u{1F3FF}\u200D\u2695\uFE0F",
+ "\u{1F469}\u{1F3FF}\u200D\u2696\uFE0F",
+ "\u{1F469}\u{1F3FF}\u200D\u2708\uFE0F",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F33E}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F373}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F37C}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F393}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F3A4}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F3A8}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F3EB}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F3ED}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F4BB}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F4BC}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F527}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F52C}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F680}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F692}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9AF}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9BC}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9BD}",
+ "\u{1F9D1}\u200D\u2695\uFE0F",
+ "\u{1F9D1}\u200D\u2696\uFE0F",
+ "\u{1F9D1}\u200D\u2708\uFE0F",
+ "\u{1F9D1}\u200D\u{1F33E}",
+ "\u{1F9D1}\u200D\u{1F373}",
+ "\u{1F9D1}\u200D\u{1F37C}",
+ "\u{1F9D1}\u200D\u{1F393}",
+ "\u{1F9D1}\u200D\u{1F3A4}",
+ "\u{1F9D1}\u200D\u{1F3A8}",
+ "\u{1F9D1}\u200D\u{1F3EB}",
+ "\u{1F9D1}\u200D\u{1F3ED}",
+ "\u{1F9D1}\u200D\u{1F4BB}",
+ "\u{1F9D1}\u200D\u{1F4BC}",
+ "\u{1F9D1}\u200D\u{1F527}",
+ "\u{1F9D1}\u200D\u{1F52C}",
+ "\u{1F9D1}\u200D\u{1F680}",
+ "\u{1F9D1}\u200D\u{1F692}",
+ "\u{1F9D1}\u200D\u{1F9AF}",
+ "\u{1F9D1}\u200D\u{1F9BC}",
+ "\u{1F9D1}\u200D\u{1F9BD}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2695\uFE0F",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2696\uFE0F",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2708\uFE0F",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F33E}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F373}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F37C}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F393}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F3A4}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F3A8}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F3EB}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F3ED}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F4BB}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F4BC}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F527}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F52C}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F680}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F692}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9AF}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9BC}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9BD}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2695\uFE0F",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2696\uFE0F",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2708\uFE0F",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F33E}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F373}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F37C}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F393}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F3A4}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F3A8}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F3EB}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F3ED}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F4BB}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F4BC}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F527}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F52C}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F680}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F692}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9AF}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9BC}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9BD}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2695\uFE0F",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2696\uFE0F",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2708\uFE0F",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F33E}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F373}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F37C}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F393}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F3A4}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F3A8}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F3EB}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F3ED}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F4BB}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F4BC}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F527}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F52C}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F680}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F692}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9AF}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9BC}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9BD}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2695\uFE0F",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2696\uFE0F",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2708\uFE0F",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F33E}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F373}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F37C}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F393}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F3A4}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F3A8}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F3EB}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F3ED}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F4BB}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F4BC}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F527}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F52C}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F680}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F692}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9AF}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9BC}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9BD}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2695\uFE0F",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2696\uFE0F",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2708\uFE0F",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F33E}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F373}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F37C}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F393}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F3A4}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F3A8}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F3EB}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F3ED}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F4BB}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F4BC}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F527}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F52C}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F680}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F692}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9AF}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9BC}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9BD}",
+ "\u26F9\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u26F9\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u26F9\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u26F9\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u26F9\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u26F9\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u26F9\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u26F9\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u26F9\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u26F9\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u26F9\uFE0F\u200D\u2640\uFE0F",
+ "\u26F9\uFE0F\u200D\u2642\uFE0F",
+ "\u{1F3C3}\u200D\u2640\uFE0F",
+ "\u{1F3C3}\u200D\u2642\uFE0F",
+ "\u{1F3C3}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F3C3}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F3C3}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F3C3}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F3C3}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F3C3}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F3C3}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F3C3}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F3C3}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F3C3}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F3C4}\u200D\u2640\uFE0F",
+ "\u{1F3C4}\u200D\u2642\uFE0F",
+ "\u{1F3C4}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F3C4}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F3C4}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F3C4}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F3C4}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F3C4}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F3C4}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F3C4}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F3C4}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F3C4}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F3CA}\u200D\u2640\uFE0F",
+ "\u{1F3CA}\u200D\u2642\uFE0F",
+ "\u{1F3CA}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F3CA}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F3CA}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F3CA}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F3CA}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F3CA}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F3CA}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F3CA}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F3CA}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F3CA}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F3CB}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F3CB}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F3CB}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F3CB}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F3CB}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F3CB}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F3CB}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F3CB}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F3CB}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F3CB}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F3CB}\uFE0F\u200D\u2640\uFE0F",
+ "\u{1F3CB}\uFE0F\u200D\u2642\uFE0F",
+ "\u{1F3CC}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F3CC}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F3CC}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F3CC}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F3CC}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F3CC}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F3CC}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F3CC}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F3CC}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F3CC}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F3CC}\uFE0F\u200D\u2640\uFE0F",
+ "\u{1F3CC}\uFE0F\u200D\u2642\uFE0F",
+ "\u{1F46E}\u200D\u2640\uFE0F",
+ "\u{1F46E}\u200D\u2642\uFE0F",
+ "\u{1F46E}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F46E}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F46E}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F46E}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F46E}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F46E}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F46E}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F46E}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F46E}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F46E}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F46F}\u200D\u2640\uFE0F",
+ "\u{1F46F}\u200D\u2642\uFE0F",
+ "\u{1F470}\u200D\u2640\uFE0F",
+ "\u{1F470}\u200D\u2642\uFE0F",
+ "\u{1F470}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F470}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F470}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F470}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F470}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F470}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F470}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F470}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F470}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F470}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F471}\u200D\u2640\uFE0F",
+ "\u{1F471}\u200D\u2642\uFE0F",
+ "\u{1F471}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F471}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F471}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F471}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F471}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F471}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F471}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F471}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F471}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F471}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F473}\u200D\u2640\uFE0F",
+ "\u{1F473}\u200D\u2642\uFE0F",
+ "\u{1F473}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F473}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F473}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F473}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F473}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F473}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F473}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F473}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F473}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F473}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F477}\u200D\u2640\uFE0F",
+ "\u{1F477}\u200D\u2642\uFE0F",
+ "\u{1F477}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F477}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F477}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F477}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F477}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F477}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F477}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F477}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F477}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F477}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F481}\u200D\u2640\uFE0F",
+ "\u{1F481}\u200D\u2642\uFE0F",
+ "\u{1F481}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F481}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F481}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F481}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F481}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F481}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F481}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F481}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F481}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F481}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F482}\u200D\u2640\uFE0F",
+ "\u{1F482}\u200D\u2642\uFE0F",
+ "\u{1F482}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F482}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F482}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F482}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F482}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F482}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F482}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F482}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F482}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F482}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F486}\u200D\u2640\uFE0F",
+ "\u{1F486}\u200D\u2642\uFE0F",
+ "\u{1F486}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F486}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F486}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F486}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F486}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F486}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F486}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F486}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F486}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F486}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F487}\u200D\u2640\uFE0F",
+ "\u{1F487}\u200D\u2642\uFE0F",
+ "\u{1F487}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F487}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F487}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F487}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F487}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F487}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F487}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F487}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F487}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F487}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F575}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F575}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F575}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F575}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F575}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F575}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F575}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F575}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F575}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F575}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F575}\uFE0F\u200D\u2640\uFE0F",
+ "\u{1F575}\uFE0F\u200D\u2642\uFE0F",
+ "\u{1F645}\u200D\u2640\uFE0F",
+ "\u{1F645}\u200D\u2642\uFE0F",
+ "\u{1F645}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F645}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F645}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F645}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F645}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F645}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F645}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F645}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F645}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F645}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F646}\u200D\u2640\uFE0F",
+ "\u{1F646}\u200D\u2642\uFE0F",
+ "\u{1F646}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F646}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F646}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F646}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F646}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F646}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F646}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F646}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F646}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F646}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F647}\u200D\u2640\uFE0F",
+ "\u{1F647}\u200D\u2642\uFE0F",
+ "\u{1F647}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F647}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F647}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F647}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F647}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F647}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F647}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F647}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F647}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F647}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F64B}\u200D\u2640\uFE0F",
+ "\u{1F64B}\u200D\u2642\uFE0F",
+ "\u{1F64B}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F64B}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F64B}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F64B}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F64B}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F64B}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F64B}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F64B}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F64B}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F64B}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F64D}\u200D\u2640\uFE0F",
+ "\u{1F64D}\u200D\u2642\uFE0F",
+ "\u{1F64D}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F64D}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F64D}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F64D}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F64D}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F64D}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F64D}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F64D}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F64D}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F64D}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F64E}\u200D\u2640\uFE0F",
+ "\u{1F64E}\u200D\u2642\uFE0F",
+ "\u{1F64E}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F64E}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F64E}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F64E}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F64E}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F64E}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F64E}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F64E}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F64E}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F64E}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F6A3}\u200D\u2640\uFE0F",
+ "\u{1F6A3}\u200D\u2642\uFE0F",
+ "\u{1F6A3}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F6A3}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F6A3}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F6A3}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F6A3}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F6A3}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F6A3}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F6A3}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F6A3}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F6A3}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F6B4}\u200D\u2640\uFE0F",
+ "\u{1F6B4}\u200D\u2642\uFE0F",
+ "\u{1F6B4}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F6B4}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F6B4}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F6B4}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F6B4}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F6B4}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F6B4}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F6B4}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F6B4}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F6B4}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F6B5}\u200D\u2640\uFE0F",
+ "\u{1F6B5}\u200D\u2642\uFE0F",
+ "\u{1F6B5}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F6B5}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F6B5}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F6B5}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F6B5}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F6B5}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F6B5}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F6B5}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F6B5}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F6B5}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F6B6}\u200D\u2640\uFE0F",
+ "\u{1F6B6}\u200D\u2642\uFE0F",
+ "\u{1F6B6}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F6B6}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F6B6}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F6B6}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F6B6}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F6B6}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F6B6}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F6B6}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F6B6}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F6B6}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F926}\u200D\u2640\uFE0F",
+ "\u{1F926}\u200D\u2642\uFE0F",
+ "\u{1F926}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F926}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F926}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F926}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F926}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F926}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F926}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F926}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F926}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F926}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F935}\u200D\u2640\uFE0F",
+ "\u{1F935}\u200D\u2642\uFE0F",
+ "\u{1F935}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F935}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F935}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F935}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F935}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F935}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F935}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F935}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F935}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F935}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F937}\u200D\u2640\uFE0F",
+ "\u{1F937}\u200D\u2642\uFE0F",
+ "\u{1F937}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F937}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F937}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F937}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F937}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F937}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F937}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F937}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F937}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F937}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F938}\u200D\u2640\uFE0F",
+ "\u{1F938}\u200D\u2642\uFE0F",
+ "\u{1F938}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F938}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F938}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F938}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F938}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F938}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F938}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F938}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F938}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F938}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F939}\u200D\u2640\uFE0F",
+ "\u{1F939}\u200D\u2642\uFE0F",
+ "\u{1F939}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F939}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F939}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F939}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F939}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F939}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F939}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F939}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F939}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F939}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F93C}\u200D\u2640\uFE0F",
+ "\u{1F93C}\u200D\u2642\uFE0F",
+ "\u{1F93D}\u200D\u2640\uFE0F",
+ "\u{1F93D}\u200D\u2642\uFE0F",
+ "\u{1F93D}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F93D}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F93D}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F93D}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F93D}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F93D}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F93D}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F93D}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F93D}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F93D}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F93E}\u200D\u2640\uFE0F",
+ "\u{1F93E}\u200D\u2642\uFE0F",
+ "\u{1F93E}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F93E}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F93E}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F93E}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F93E}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F93E}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F93E}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F93E}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F93E}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F93E}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9B8}\u200D\u2640\uFE0F",
+ "\u{1F9B8}\u200D\u2642\uFE0F",
+ "\u{1F9B8}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9B8}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9B8}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9B8}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9B8}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9B8}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9B8}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9B8}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9B8}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9B8}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9B9}\u200D\u2640\uFE0F",
+ "\u{1F9B9}\u200D\u2642\uFE0F",
+ "\u{1F9B9}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9B9}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9B9}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9B9}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9B9}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9B9}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9B9}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9B9}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9B9}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9B9}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9CD}\u200D\u2640\uFE0F",
+ "\u{1F9CD}\u200D\u2642\uFE0F",
+ "\u{1F9CD}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9CD}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9CD}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9CD}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9CD}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9CD}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9CD}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9CD}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9CD}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9CD}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9CE}\u200D\u2640\uFE0F",
+ "\u{1F9CE}\u200D\u2642\uFE0F",
+ "\u{1F9CE}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9CE}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9CE}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9CE}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9CE}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9CE}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9CE}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9CE}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9CE}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9CE}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9CF}\u200D\u2640\uFE0F",
+ "\u{1F9CF}\u200D\u2642\uFE0F",
+ "\u{1F9CF}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9CF}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9CF}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9CF}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9CF}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9CF}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9CF}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9CF}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9CF}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9CF}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9D6}\u200D\u2640\uFE0F",
+ "\u{1F9D6}\u200D\u2642\uFE0F",
+ "\u{1F9D6}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9D6}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9D6}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9D6}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9D6}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9D6}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9D6}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9D6}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9D6}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9D6}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9D7}\u200D\u2640\uFE0F",
+ "\u{1F9D7}\u200D\u2642\uFE0F",
+ "\u{1F9D7}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9D7}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9D7}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9D7}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9D7}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9D7}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9D7}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9D7}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9D7}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9D7}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9D8}\u200D\u2640\uFE0F",
+ "\u{1F9D8}\u200D\u2642\uFE0F",
+ "\u{1F9D8}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9D8}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9D8}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9D8}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9D8}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9D8}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9D8}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9D8}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9D8}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9D8}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9D9}\u200D\u2640\uFE0F",
+ "\u{1F9D9}\u200D\u2642\uFE0F",
+ "\u{1F9D9}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9D9}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9D9}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9D9}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9D9}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9D9}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9D9}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9D9}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9D9}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9D9}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9DA}\u200D\u2640\uFE0F",
+ "\u{1F9DA}\u200D\u2642\uFE0F",
+ "\u{1F9DA}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9DA}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9DA}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9DA}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9DA}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9DA}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9DA}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9DA}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9DA}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9DA}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9DB}\u200D\u2640\uFE0F",
+ "\u{1F9DB}\u200D\u2642\uFE0F",
+ "\u{1F9DB}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9DB}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9DB}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9DB}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9DB}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9DB}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9DB}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9DB}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9DB}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9DB}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9DC}\u200D\u2640\uFE0F",
+ "\u{1F9DC}\u200D\u2642\uFE0F",
+ "\u{1F9DC}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9DC}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9DC}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9DC}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9DC}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9DC}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9DC}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9DC}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9DC}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9DC}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9DD}\u200D\u2640\uFE0F",
+ "\u{1F9DD}\u200D\u2642\uFE0F",
+ "\u{1F9DD}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9DD}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9DD}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9DD}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9DD}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9DD}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9DD}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9DD}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9DD}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9DD}\u{1F3FF}\u200D\u2642\uFE0F",
+ "\u{1F9DE}\u200D\u2640\uFE0F",
+ "\u{1F9DE}\u200D\u2642\uFE0F",
+ "\u{1F9DF}\u200D\u2640\uFE0F",
+ "\u{1F9DF}\u200D\u2642\uFE0F",
+ "\u{1F468}\u200D\u{1F9B0}",
+ "\u{1F468}\u200D\u{1F9B1}",
+ "\u{1F468}\u200D\u{1F9B2}",
+ "\u{1F468}\u200D\u{1F9B3}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9B0}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9B1}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9B2}",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9B3}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9B0}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9B1}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9B2}",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9B3}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9B0}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9B1}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9B2}",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9B3}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9B0}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9B1}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9B2}",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9B3}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9B0}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9B1}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9B2}",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9B3}",
+ "\u{1F469}\u200D\u{1F9B0}",
+ "\u{1F469}\u200D\u{1F9B1}",
+ "\u{1F469}\u200D\u{1F9B2}",
+ "\u{1F469}\u200D\u{1F9B3}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9B0}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9B1}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9B2}",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9B3}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9B0}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9B1}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9B2}",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9B3}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9B0}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9B1}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9B2}",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9B3}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9B0}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9B1}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9B2}",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9B3}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9B0}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9B1}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9B2}",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9B3}",
+ "\u{1F9D1}\u200D\u{1F9B0}",
+ "\u{1F9D1}\u200D\u{1F9B1}",
+ "\u{1F9D1}\u200D\u{1F9B2}",
+ "\u{1F9D1}\u200D\u{1F9B3}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9B0}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9B1}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9B2}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9B3}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9B0}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9B1}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9B2}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9B3}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9B0}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9B1}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9B2}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9B3}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9B0}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9B1}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9B2}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9B3}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9B0}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9B1}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9B2}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9B3}",
+ "\u2764\uFE0F\u200D\u{1F525}",
+ "\u2764\uFE0F\u200D\u{1FA79}",
+ "\u{1F3F3}\uFE0F\u200D\u26A7\uFE0F",
+ "\u{1F3F3}\uFE0F\u200D\u{1F308}",
+ "\u{1F3F4}\u200D\u2620\uFE0F",
+ "\u{1F408}\u200D\u2B1B",
+ "\u{1F415}\u200D\u{1F9BA}",
+ "\u{1F426}\u200D\u2B1B",
+ "\u{1F43B}\u200D\u2744\uFE0F",
+ "\u{1F441}\uFE0F\u200D\u{1F5E8}\uFE0F",
+ "\u{1F62E}\u200D\u{1F4A8}",
+ "\u{1F635}\u200D\u{1F4AB}",
+ "\u{1F636}\u200D\u{1F32B}\uFE0F",
+ "\u{1F9D1}\u200D\u{1F384}"
+ ],
+ nonMatchStrings: [
+ "\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}",
+ "\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}",
+ "\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}",
+ "\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}",
+ "\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}",
+ "\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/browser.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/shell.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/generated/strings/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Block-implicit-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Block-implicit-negated.js
new file mode 100644
index 0000000000..8ab448df23
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Block-implicit-negated.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{InAdlam}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Block-implicit.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Block-implicit.js
new file mode 100644
index 0000000000..b139524bc5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Block-implicit.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{InAdlam}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-implicit-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-implicit-negated.js
new file mode 100644
index 0000000000..8ab448df23
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-implicit-negated.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{InAdlam}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-implicit.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-implicit.js
new file mode 100644
index 0000000000..b139524bc5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-implicit.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{InAdlam}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-negated.js
new file mode 100644
index 0000000000..6b31a3c0df
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-negated.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{InScript=Adlam}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script.js
new file mode 100644
index 0000000000..dcf2113476
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{InScript=Adlam}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-Is-prefix-Script-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-Is-prefix-Script-negated.js
new file mode 100644
index 0000000000..cc3ccecaed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-Is-prefix-Script-negated.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{IsScript=Adlam}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-Is-prefix-Script.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-Is-prefix-Script.js
new file mode 100644
index 0000000000..008b8bd4ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-Is-prefix-Script.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{IsScript=Adlam}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-circumflex-negation-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-circumflex-negation-negated.js
new file mode 100644
index 0000000000..28967cae69
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-circumflex-negation-negated.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{^General_Category=Letter}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-circumflex-negation.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-circumflex-negation.js
new file mode 100644
index 0000000000..ed8e89df8c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-circumflex-negation.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{^General_Category=Letter}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-empty-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-empty-negated.js
new file mode 100644
index 0000000000..0909592d23
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-empty-negated.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/[\p{}]/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-empty.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-empty.js
new file mode 100644
index 0000000000..3120c8940e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-empty.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/[\P{}]/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-invalid-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-invalid-negated.js
new file mode 100644
index 0000000000..9f4ccd404f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-invalid-negated.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/[\P{invalid}]/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-invalid.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-invalid.js
new file mode 100644
index 0000000000..f531b70649
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-invalid.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/[\p{invalid}]/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-no-braces-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-no-braces-negated.js
new file mode 100644
index 0000000000..5e089d4761
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-no-braces-negated.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-no-braces-value-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-no-braces-value-negated.js
new file mode 100644
index 0000000000..6c650ab77c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-no-braces-value-negated.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\PL/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-no-braces-value.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-no-braces-value.js
new file mode 100644
index 0000000000..5d037c8628
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-no-braces-value.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\pL/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-no-braces.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-no-braces.js
new file mode 100644
index 0000000000..561b9f7e1b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-no-braces.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-and-value-only-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-and-value-only-negated.js
new file mode 100644
index 0000000000..3b1fee83e0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-and-value-only-negated.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{=Letter}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-and-value-only.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-and-value-only.js
new file mode 100644
index 0000000000..88c9c3aec2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-and-value-only.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{=Letter}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-negated.js
new file mode 100644
index 0000000000..4d5e6a666f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-negated.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{General_Category:Letter}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-only-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-only-negated.js
new file mode 100644
index 0000000000..065dd2941a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-only-negated.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{=}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-only.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-only.js
new file mode 100644
index 0000000000..e23fd43900
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator-only.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{=}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator.js
new file mode 100644
index 0000000000..8f56f2542c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-separator.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{General_Category:Letter}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-unclosed-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-unclosed-negated.js
new file mode 100644
index 0000000000..e6fc977f8e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-unclosed-negated.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-unclosed.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-unclosed.js
new file mode 100644
index 0000000000..cacdb6c7bf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-unclosed.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-unopened-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-unopened-negated.js
new file mode 100644
index 0000000000..33b071dbe8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-unopened-negated.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-unopened.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-unopened.js
new file mode 100644
index 0000000000..a7a2afb492
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/grammar-extension-unopened.js
@@ -0,0 +1,22 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ This tests violations of the grammar starting here:
+
+ CharacterClassEscape[U]::
+ [+U] p{ UnicodePropertyValueExpression }
+ [+U] P{ UnicodePropertyValueExpression }
+esid: prod-CharacterClassEscape
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-01-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-01-negated.js
new file mode 100644
index 0000000000..0fd0bb3770
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-01-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{ General_Category=Uppercase_Letter }/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-01.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-01.js
new file mode 100644
index 0000000000..5962132504
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-01.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{ General_Category=Uppercase_Letter }/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-02-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-02-negated.js
new file mode 100644
index 0000000000..4bc3ad10bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-02-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{ Lowercase }/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-02.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-02.js
new file mode 100644
index 0000000000..d7979fe1a5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-02.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{ Lowercase }/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-03-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-03-negated.js
new file mode 100644
index 0000000000..6981de9cb1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-03-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{ANY}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-03.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-03.js
new file mode 100644
index 0000000000..55d551e70f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-03.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{ANY}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-04-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-04-negated.js
new file mode 100644
index 0000000000..bcb22bc1d2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-04-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{ASSIGNED}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-04.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-04.js
new file mode 100644
index 0000000000..a217494e04
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-04.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{ASSIGNED}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-05-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-05-negated.js
new file mode 100644
index 0000000000..c13df11cfa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-05-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Ascii}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-05.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-05.js
new file mode 100644
index 0000000000..55ff24397e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-05.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Ascii}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-06-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-06-negated.js
new file mode 100644
index 0000000000..bb30a870d6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-06-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{General_Category = Uppercase_Letter}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-06.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-06.js
new file mode 100644
index 0000000000..baf7361a6d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-06.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{General_Category = Uppercase_Letter}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-07-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-07-negated.js
new file mode 100644
index 0000000000..2f3ac150de
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-07-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{_-_lOwEr_C-A_S-E_-_}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-07.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-07.js
new file mode 100644
index 0000000000..f149cdefd7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-07.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{_-_lOwEr_C-A_S-E_-_}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-08-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-08-negated.js
new file mode 100644
index 0000000000..571558b88f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-08-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{any}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-08.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-08.js
new file mode 100644
index 0000000000..c799535a8a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-08.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{any}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-09-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-09-negated.js
new file mode 100644
index 0000000000..72829c262b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-09-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{ascii}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-09.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-09.js
new file mode 100644
index 0000000000..a3403243ea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-09.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{ascii}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-10-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-10-negated.js
new file mode 100644
index 0000000000..6d0451789b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-10-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{assigned}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-10.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-10.js
new file mode 100644
index 0000000000..0789f4f774
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-10.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{assigned}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-11-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-11-negated.js
new file mode 100644
index 0000000000..5ca93c9627
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-11-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{gC=uppercase_letter}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-11.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-11.js
new file mode 100644
index 0000000000..dd8db3de99
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-11.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{gC=uppercase_letter}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-12-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-12-negated.js
new file mode 100644
index 0000000000..800f90a70f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-12-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{gc=uppercaseletter}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-12.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-12.js
new file mode 100644
index 0000000000..45ca136b9d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-12.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{gc=uppercaseletter}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-13-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-13-negated.js
new file mode 100644
index 0000000000..e2e2ddcad2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-13-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{lowercase}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-13.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-13.js
new file mode 100644
index 0000000000..ffec23980b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-13.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{lowercase}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-14-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-14-negated.js
new file mode 100644
index 0000000000..e2e2ddcad2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-14-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{lowercase}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-14.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-14.js
new file mode 100644
index 0000000000..ffec23980b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/loose-matching-14.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Loose matching must not be applied when matching properties and values in
+ Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{lowercase}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-equals-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-equals-negated.js
new file mode 100644
index 0000000000..71d88e250f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-equals-negated.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-binary properties without a value must throw in Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{General_Category=}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-equals.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-equals.js
new file mode 100644
index 0000000000..5fc26a981a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-equals.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-binary properties without a value must throw in Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{General_Category=}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-negated.js
new file mode 100644
index 0000000000..acf816c2c6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-negated.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-binary properties without a value must throw in Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{General_Category}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category.js
new file mode 100644
index 0000000000..fb5143ecd9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-binary properties without a value must throw in Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{General_Category}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-equals-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-equals-negated.js
new file mode 100644
index 0000000000..0f52ab07b8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-equals-negated.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-binary properties without a value must throw in Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Script=}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-equals.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-equals.js
new file mode 100644
index 0000000000..9614a7f5e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-equals.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-binary properties without a value must throw in Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Script=}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-negated.js
new file mode 100644
index 0000000000..9888ae8f99
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-negated.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-binary properties without a value must throw in Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Script}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script.js
new file mode 100644
index 0000000000..a68249040a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-binary properties without a value must throw in Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Script}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-equals-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-equals-negated.js
new file mode 100644
index 0000000000..06a9bdc448
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-equals-negated.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-binary properties without a value must throw in Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Script_Extensions=}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-equals.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-equals.js
new file mode 100644
index 0000000000..6456cc6af4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-equals.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-binary properties without a value must throw in Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Script_Extensions=}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-negated.js
new file mode 100644
index 0000000000..68d76f139c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-negated.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-binary properties without a value must throw in Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Script_Extensions}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions.js
new file mode 100644
index 0000000000..994aa6d308
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-binary properties without a value must throw in Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Script_Extensions}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-binary-property-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-binary-property-negated.js
new file mode 100644
index 0000000000..eafa369663
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-binary-property-negated.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-existent properties must not be supported in Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{UnknownBinaryProperty}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-binary-property.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-binary-property.js
new file mode 100644
index 0000000000..da1e017aa0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-binary-property.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-existent properties must not be supported in Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{UnknownBinaryProperty}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-and-value-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-and-value-negated.js
new file mode 100644
index 0000000000..828fbcd236
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-and-value-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-existent property values must not be supported in Unicode property
+ escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Line_Breakz=WAT}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-and-value.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-and-value.js
new file mode 100644
index 0000000000..299186715c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-and-value.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-existent property values must not be supported in Unicode property
+ escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Line_Breakz=WAT}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-existing-value-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-existing-value-negated.js
new file mode 100644
index 0000000000..ad5a450868
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-existing-value-negated.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-existent properties must not be supported in Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Line_Breakz=Alphabetic}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-existing-value.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-existing-value.js
new file mode 100644
index 0000000000..3c15bb1002
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-existing-value.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-existent properties must not be supported in Unicode property escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Line_Breakz=Alphabetic}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-General_Category-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-General_Category-negated.js
new file mode 100644
index 0000000000..a04bb578f2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-General_Category-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-existent property values must not be supported in Unicode property
+ escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\\P{General_Category=WAT}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-Script-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-Script-negated.js
new file mode 100644
index 0000000000..d5b5fcd371
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-Script-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-existent property values must not be supported in Unicode property
+ escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\\P{Script=FooBarBazInvalid}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-Script.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-Script.js
new file mode 100644
index 0000000000..7e84a9d711
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-Script.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-existent property values must not be supported in Unicode property
+ escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\\p{Script=FooBarBazInvalid}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-Script_Extensions-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-Script_Extensions-negated.js
new file mode 100644
index 0000000000..af3d4e6439
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-Script_Extensions-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-existent property values must not be supported in Unicode property
+ escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\\P{Script_Extensions=H_e_h}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-Script_Extensions.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-Script_Extensions.js
new file mode 100644
index 0000000000..a1e1a5d8d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-Script_Extensions.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-existent property values must not be supported in Unicode property
+ escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\\p{Script_Extensions=H_e_h}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-general-category.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-general-category.js
new file mode 100644
index 0000000000..bf78af52f5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/non-existent-property-value-general-category.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Non-existent property values must not be supported in Unicode property
+ escapes.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\\p{General_Category=WAT}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/shell.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Composition_Exclusion-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Composition_Exclusion-negated.js
new file mode 100644
index 0000000000..a774724470
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Composition_Exclusion-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Composition_Exclusion}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Composition_Exclusion.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Composition_Exclusion.js
new file mode 100644
index 0000000000..ed01765fd3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Composition_Exclusion.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Composition_Exclusion}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFC-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFC-negated.js
new file mode 100644
index 0000000000..103fbd35de
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFC-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Expands_On_NFC}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFC.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFC.js
new file mode 100644
index 0000000000..3f4f1f0bce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFC.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Expands_On_NFC}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFD-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFD-negated.js
new file mode 100644
index 0000000000..6b6c5c6285
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFD-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Expands_On_NFD}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFD.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFD.js
new file mode 100644
index 0000000000..a5b0c12895
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFD.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Expands_On_NFD}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKC-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKC-negated.js
new file mode 100644
index 0000000000..5b09ad7ed4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKC-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Expands_On_NFKC}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKC.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKC.js
new file mode 100644
index 0000000000..1bb2b25b23
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKC.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Expands_On_NFKC}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKD-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKD-negated.js
new file mode 100644
index 0000000000..51222095c4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKD-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Expands_On_NFKD}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKD.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKD.js
new file mode 100644
index 0000000000..57bcc73f79
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKD.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Expands_On_NFKD}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-FC_NFKC_Closure-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-FC_NFKC_Closure-negated.js
new file mode 100644
index 0000000000..9bf81d7cee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-FC_NFKC_Closure-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{FC_NFKC_Closure}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-FC_NFKC_Closure.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-FC_NFKC_Closure.js
new file mode 100644
index 0000000000..4bca8d9ba5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-FC_NFKC_Closure.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{FC_NFKC_Closure}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Full_Composition_Exclusion-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Full_Composition_Exclusion-negated.js
new file mode 100644
index 0000000000..8a07b645f3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Full_Composition_Exclusion-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Full_Composition_Exclusion}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Full_Composition_Exclusion.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Full_Composition_Exclusion.js
new file mode 100644
index 0000000000..6f609a5bff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Full_Composition_Exclusion.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Full_Composition_Exclusion}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Grapheme_Link-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Grapheme_Link-negated.js
new file mode 100644
index 0000000000..6b64ce8ced
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Grapheme_Link-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Grapheme_Link}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Grapheme_Link.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Grapheme_Link.js
new file mode 100644
index 0000000000..338961643e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Grapheme_Link.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Grapheme_Link}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Hyphen-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Hyphen-negated.js
new file mode 100644
index 0000000000..0f5976b2c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Hyphen-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Hyphen}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Hyphen.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Hyphen.js
new file mode 100644
index 0000000000..b2e4e1e1e8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Hyphen.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Hyphen}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Alphabetic-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Alphabetic-negated.js
new file mode 100644
index 0000000000..e5d8507899
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Alphabetic-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Other_Alphabetic}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Alphabetic.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Alphabetic.js
new file mode 100644
index 0000000000..4f9eaed6e8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Alphabetic.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Other_Alphabetic}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Default_Ignorable_Code_Point-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Default_Ignorable_Code_Point-negated.js
new file mode 100644
index 0000000000..2dccaf3785
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Default_Ignorable_Code_Point-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Other_Default_Ignorable_Code_Point}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Default_Ignorable_Code_Point.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Default_Ignorable_Code_Point.js
new file mode 100644
index 0000000000..86897448f1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Default_Ignorable_Code_Point.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Other_Default_Ignorable_Code_Point}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Grapheme_Extend-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Grapheme_Extend-negated.js
new file mode 100644
index 0000000000..70a1b13be3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Grapheme_Extend-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Other_Grapheme_Extend}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Grapheme_Extend.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Grapheme_Extend.js
new file mode 100644
index 0000000000..d1e95b7ef7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Grapheme_Extend.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Other_Grapheme_Extend}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Continue-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Continue-negated.js
new file mode 100644
index 0000000000..842fdbd71b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Continue-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Other_ID_Continue}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Continue.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Continue.js
new file mode 100644
index 0000000000..60aadfa0d7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Continue.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Other_ID_Continue}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Start-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Start-negated.js
new file mode 100644
index 0000000000..5ed7b1de63
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Start-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Other_ID_Start}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Start.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Start.js
new file mode 100644
index 0000000000..735e931eb5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Start.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Other_ID_Start}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Lowercase-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Lowercase-negated.js
new file mode 100644
index 0000000000..894a3a1712
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Lowercase-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Other_Lowercase}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Lowercase.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Lowercase.js
new file mode 100644
index 0000000000..612026b404
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Lowercase.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Other_Lowercase}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Math-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Math-negated.js
new file mode 100644
index 0000000000..a5d8abf5a2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Math-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Other_Math}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Math.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Math.js
new file mode 100644
index 0000000000..ae05560fd9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Math.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Other_Math}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Uppercase-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Uppercase-negated.js
new file mode 100644
index 0000000000..e201bcdb18
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Uppercase-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Other_Uppercase}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Uppercase.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Uppercase.js
new file mode 100644
index 0000000000..fd0d742924
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Uppercase.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Other_Uppercase}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Prepended_Concatenation_Mark-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Prepended_Concatenation_Mark-negated.js
new file mode 100644
index 0000000000..fcabc64b75
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Prepended_Concatenation_Mark-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Prepended_Concatenation_Mark}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Prepended_Concatenation_Mark.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Prepended_Concatenation_Mark.js
new file mode 100644
index 0000000000..42282d6854
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-binary-property-Prepended_Concatenation_Mark.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some binary properties used to be part of the Unicode property escapes
+ proposal but were later removed. They must not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Prepended_Concatenation_Mark}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Block-with-value-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Block-with-value-negated.js
new file mode 100644
index 0000000000..fbd2eaf307
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Block-with-value-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Properties not explicitly listed in the Unicode property escapes spec must
+ not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Block=Adlam}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Block-with-value.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Block-with-value.js
new file mode 100644
index 0000000000..60d924a8e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Block-with-value.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Properties not explicitly listed in the Unicode property escapes spec must
+ not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Block=Adlam}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-FC_NFKC_Closure-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-FC_NFKC_Closure-negated.js
new file mode 100644
index 0000000000..aea0c316d0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-FC_NFKC_Closure-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Properties not explicitly listed in the Unicode property escapes spec must
+ not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{FC_NFKC_Closure}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-FC_NFKC_Closure.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-FC_NFKC_Closure.js
new file mode 100644
index 0000000000..e09437ed21
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-FC_NFKC_Closure.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Properties not explicitly listed in the Unicode property escapes spec must
+ not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{FC_NFKC_Closure}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Line_Break-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Line_Break-negated.js
new file mode 100644
index 0000000000..f28b28f567
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Line_Break-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Properties not explicitly listed in the Unicode property escapes spec must
+ not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Line_Break=Alphabetic}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Line_Break-with-value-negated.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Line_Break-with-value-negated.js
new file mode 100644
index 0000000000..f28b28f567
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Line_Break-with-value-negated.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Properties not explicitly listed in the Unicode property escapes spec must
+ not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\P{Line_Break=Alphabetic}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Line_Break-with-value.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Line_Break-with-value.js
new file mode 100644
index 0000000000..39a9c89535
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Line_Break-with-value.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Properties not explicitly listed in the Unicode property escapes spec must
+ not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Line_Break=Alphabetic}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Line_Break.js b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Line_Break.js
new file mode 100644
index 0000000000..16879d8ad0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/property-escapes/unsupported-property-Line_Break.js
@@ -0,0 +1,19 @@
+// |reftest| error:SyntaxError
+// Copyright 2018 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Properties not explicitly listed in the Unicode property escapes spec must
+ not be supported.
+esid: sec-static-semantics-unicodematchproperty-p
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-unicode-property-escapes]
+---*/
+
+$DONOTEVALUATE();
+
+/\p{Line_Break}/u;
diff --git a/js/src/tests/test262/built-ins/RegExp/proto-from-ctor-realm.js b/js/src/tests/test262/built-ins/RegExp/proto-from-ctor-realm.js
new file mode 100644
index 0000000000..2b38b40f95
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/proto-from-ctor-realm.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-boolean-constructor-boolean-value
+description: Default [[Prototype]] value derived from realm of the newTarget
+info: |
+ [...]
+ 2. If NewTarget is not undefined, let newTarget be NewTarget.
+ [...]
+ 7. Let O be ? RegExpAlloc(newTarget).
+ [...]
+
+ 9.1.14 GetPrototypeFromConstructor
+
+ [...]
+ 3. Let proto be ? Get(constructor, "prototype").
+ 4. If Type(proto) is not Object, then
+ a. Let realm be ? GetFunctionRealm(constructor).
+ b. Let proto be realm's intrinsic object named intrinsicDefaultProto.
+ [...]
+features: [cross-realm, Reflect]
+---*/
+
+var other = $262.createRealm().global;
+var C = new other.Function();
+C.prototype = null;
+
+var o = Reflect.construct(RegExp, [], C);
+
+assert.sameValue(Object.getPrototypeOf(o), other.RegExp.prototype);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/15.10.6.js b/js/src/tests/test262/built-ins/RegExp/prototype/15.10.6.js
new file mode 100644
index 0000000000..80dbe9887a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/15.10.6.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.10.6
+description: RegExp.prototype is itself a not RegExp
+---*/
+
+ var s = Object.prototype.toString.call(RegExp.prototype);
+
+assert.sameValue(s, '[object Object]', 's');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.5.1_A1.js b/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.5.1_A1.js
new file mode 100644
index 0000000000..04d04f3210
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.5.1_A1.js
@@ -0,0 +1,11 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The RegExp has property prototype
+es5id: 15.10.5.1_A1
+description: Checking RegExp.prototype property
+---*/
+assert.sameValue(RegExp.hasOwnProperty('prototype'), true, 'RegExp.hasOwnProperty(\'prototype\') must return true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.5.1_A2.js b/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.5.1_A2.js
new file mode 100644
index 0000000000..3ae4b9d1bd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.5.1_A2.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The RegExp.prototype property has the attribute DontEnum
+es5id: 15.10.5.1_A2
+description: Checking if enumerating the RegExp.prototype property fails
+---*/
+assert.sameValue(RegExp.hasOwnProperty('prototype'), true, 'RegExp.hasOwnProperty(\'prototype\') must return true');
+
+assert.sameValue(
+ RegExp.propertyIsEnumerable('prototype'),
+ false,
+ 'RegExp.propertyIsEnumerable(\'prototype\') must return false'
+);
+
+var count=0;
+for (var p in RegExp){
+ if (p==="prototype") {
+ count++;
+ }
+}
+
+assert.sameValue(count, 0, 'The value of count is expected to be 0');
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.5.1_A3.js b/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.5.1_A3.js
new file mode 100644
index 0000000000..d88e80882e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.5.1_A3.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The RegExp.prototype property has the attribute DontDelete
+es5id: 15.10.5.1_A3
+description: Checking if deleting the RegExp.prototype property fails
+includes: [propertyHelper.js]
+---*/
+assert.sameValue(RegExp.hasOwnProperty('prototype'), true);
+
+verifyNotConfigurable(RegExp, "prototype");
+
+try {
+ assert.sameValue(delete RegExp.prototype, false);
+} catch (e) {
+ if (e instanceof Test262Error) {
+ throw e;
+ }
+ assert(e instanceof TypeError);
+}
+
+if (RegExp.hasOwnProperty('prototype') !== true) {
+ throw new Test262Error('#2: delete RegExp.prototype; RegExp.hasOwnProperty(\'prototype\') === true');
+}
+
+// TODO: Convert to verifyProperty() format.
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.5.1_A4.js b/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.5.1_A4.js
new file mode 100644
index 0000000000..f55d12ffb5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.5.1_A4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The RegExp.prototype property has the attribute ReadOnly
+es5id: 15.10.5.1_A4
+description: Checking if varying the RegExp.prototype property fails
+includes: [propertyHelper.js]
+---*/
+assert.sameValue(RegExp.hasOwnProperty('prototype'), true, 'RegExp.hasOwnProperty(\'prototype\') must return true');
+
+var __obj = RegExp.prototype;
+
+verifyNotWritable(RegExp, "prototype", null, function(){return "shifted";});
+
+assert.sameValue(RegExp.prototype, __obj, 'The value of RegExp.prototype is expected to equal the value of __obj');
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.6.1_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.6.1_A1_T1.js
new file mode 100644
index 0000000000..00da30eab9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.6.1_A1_T1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The initial value of RegExp.prototype.constructor is the built-in RegExp
+ constructor
+es5id: 15.10.6.1_A1_T1
+description: Compare RegExp.prototype.constructor with RegExp
+---*/
+assert.sameValue(
+ RegExp.prototype.constructor,
+ RegExp,
+ 'The value of RegExp.prototype.constructor is expected to equal the value of RegExp'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.6.1_A1_T2.js b/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.6.1_A1_T2.js
new file mode 100644
index 0000000000..01dada3d9e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.6.1_A1_T2.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The initial value of RegExp.prototype.constructor is the built-in RegExp
+ constructor
+es5id: 15.10.6.1_A1_T2
+description: >
+ Compare instance.constructor !== RegExp, where instance is new
+ RegExp.prototype.constructor
+---*/
+
+var __FACTORY = RegExp.prototype.constructor;
+
+var __instance = new __FACTORY;
+
+assert.sameValue(
+ __instance instanceof RegExp,
+ true,
+ 'The result of evaluating (__instance instanceof RegExp) is expected to be true'
+);
+
+assert.sameValue(
+ __instance.constructor,
+ RegExp,
+ 'The value of __instance.constructor is expected to equal the value of RegExp'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.6_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.6_A1_T1.js
new file mode 100644
index 0000000000..c7c472c997
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.6_A1_T1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The value of the internal [[Prototype]] property of the RegExp prototype
+ object is the Object prototype
+es5id: 15.10.6_A1_T1
+description: Checking Object.prototype.isPrototypeOf(RegExp.prototype)
+---*/
+assert.sameValue(
+ Object.prototype.isPrototypeOf(RegExp.prototype),
+ true,
+ 'Object.prototype.isPrototypeOf(RegExp.prototype) must return true'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.6_A1_T2.js b/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.6_A1_T2.js
new file mode 100644
index 0000000000..9de66ca246
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/S15.10.6_A1_T2.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The value of the internal [[Prototype]] property of the RegExp prototype
+ object is the Object prototype
+es5id: 15.10.6_A1_T2
+description: >
+ Add new property to Object.prototype and check it of
+ RegExp.prototype
+---*/
+
+Object.prototype.indicator = 1;
+
+assert.sameValue(RegExp.prototype.indicator, 1, 'The value of RegExp.prototype.indicator is expected to be 1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-coerce-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-coerce-lastindex.js
new file mode 100644
index 0000000000..1de99223f4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-coerce-lastindex.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Type coercion of `lastIndex` property value
+es6id: 21.2.5.6
+info: |
+ [...]
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 7. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 8. Else, let lastIndex be ? ToLength(? Get(R, "lastIndex")).
+features: [Symbol.match]
+---*/
+
+var r = /./y;
+var result;
+
+r.lastIndex = '1.9';
+
+result = r[Symbol.match]('abc');
+
+assert.notSameValue(result, null);
+assert.sameValue(result.length, 1);
+assert.sameValue(result[0], 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-g-set-lastindex-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-g-set-lastindex-err.js
new file mode 100644
index 0000000000..d4954c4915
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-g-set-lastindex-err.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error thrown while setting `lastIndex` after a match failure
+es6id: 21.2.5.6
+info: |
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 7. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 3. Let length be the number of code units in S.
+ [...]
+ 11. Let matchSucceeded be false.
+ 12. Repeat, while matchSucceeded is false
+ a. If lastIndex > length, then
+ i. If global is true or sticky is true, then
+ 1. Perform ? Set(R, "lastIndex", 0, true).
+ ii. Return null.
+features: [Symbol.match]
+---*/
+
+var r = /a/g;
+Object.defineProperty(r, 'lastIndex', { writable: false });
+
+assert.throws(TypeError, function() {
+ r[Symbol.match]('b');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-g-set-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-g-set-lastindex.js
new file mode 100644
index 0000000000..efdcc6c304
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-g-set-lastindex.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Setting `lastIndex` to `0` after a match failure
+es6id: 21.2.5.6
+info: |
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 7. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 3. Let length be the number of code units in S.
+ [...]
+ 11. Let matchSucceeded be false.
+ 12. Repeat, while matchSucceeded is false
+ a. If lastIndex > length, then
+ i. If global is true or sticky is true, then
+ 1. Perform ? Set(R, "lastIndex", 0, true).
+ ii. Return null.
+features: [Symbol.match]
+---*/
+
+var r = /a/g;
+r.lastIndex = 3;
+
+r[Symbol.match]('b');
+
+assert.sameValue(r.lastIndex, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-return-val.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-return-val.js
new file mode 100644
index 0000000000..4271bcb800
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-return-val.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Return value after a match failure
+es6id: 21.2.5.6
+info: |
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 7. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 3. Let length be the number of code units in S.
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 14. Let matchSucceeded be false.
+ 15. Repeat, while matchSucceeded is false
+ a. If lastIndex > length, then
+ i. Let setStatus be Set(R, "lastIndex", 0, true).
+ ii. ReturnIfAbrupt(setStatus).
+ iii. Return null.
+features: [Symbol.match]
+---*/
+
+var r = /a/;
+
+assert.sameValue(r[Symbol.match]('b'), null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-y-return-val.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-y-return-val.js
new file mode 100644
index 0000000000..09a52e14bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-y-return-val.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Return value after a "sticky" match failure
+es6id: 21.2.5.6
+info: |
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 7. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 14. Let matchSucceeded be false.
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ c. If r is failure, then
+ i. If sticky is true, then
+ 1. Let setStatus be Set(R, "lastIndex", 0, true).
+ 2. ReturnIfAbrupt(setStatus).
+ 3. Return null.
+features: [Symbol.match]
+---*/
+
+assert.sameValue(/a/y[Symbol.match]('ba'), null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-y-set-lastindex-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-y-set-lastindex-err.js
new file mode 100644
index 0000000000..5942f5a220
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-y-set-lastindex-err.js
@@ -0,0 +1,44 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error thrown while setting `lastIndex` after a "sticky" match
+ failure
+es6id: 21.2.5.6
+info: |
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 7. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 14. Let matchSucceeded be false.
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ c. If r is failure, then
+ i. If sticky is true, then
+ 1. Let setStatus be Set(R, "lastIndex", 0, true).
+ 2. ReturnIfAbrupt(setStatus).
+features: [Symbol.match]
+---*/
+
+var r = /a/y;
+
+Object.defineProperty(r, 'lastIndex', { writable: false });
+
+assert.throws(TypeError, function() {
+ r[Symbol.match]('ba');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-y-set-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-y-set-lastindex.js
new file mode 100644
index 0000000000..dae445fba7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-failure-y-set-lastindex.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Setting `lastIndex` to `0` after a "sticky" match failure
+es6id: 21.2.5.6
+info: |
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 7. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 14. Let matchSucceeded be false.
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ c. If r is failure, then
+ i. If sticky is true, then
+ 1. Let setStatus be Set(R, "lastIndex", 0, true).
+features: [Symbol.match]
+---*/
+
+var r = /a/y;
+r.lastIndex = 1;
+
+r[Symbol.match]('aba');
+
+assert.sameValue(r.lastIndex, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-infer-unicode.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-infer-unicode.js
new file mode 100644
index 0000000000..4b54342f63
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-infer-unicode.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Extended unicode support is determined by internal slot (not `unicode`
+ property)
+es6id: 21.2.5.6
+info: |
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 7. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 12. Let flags be the value of R’s [[OriginalFlags]] internal slot.
+ 13. If flags contains "u", let fullUnicode be true, else let fullUnicode be
+ false.
+features: [Symbol.match]
+---*/
+
+var r;
+
+r = /\udf06/;
+Object.defineProperty(r, 'unicode', { value: true });
+assert.notSameValue(r[Symbol.match]('\ud834\udf06'), null);
+
+r = /\udf06/u;
+Object.defineProperty(r, 'unicode', { value: false });
+assert.sameValue(r[Symbol.match]('\ud834\udf06'), null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-g-set-lastindex-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-g-set-lastindex-err.js
new file mode 100644
index 0000000000..69a5517173
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-g-set-lastindex-err.js
@@ -0,0 +1,54 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error thrown while setting `lastIndex` after a "global" match
+ success
+es6id: 21.2.5.6
+info: |
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 7. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 18. If global is true or sticky is true,
+ a. Let setStatus be Set(R, "lastIndex", e, true).
+ b. ReturnIfAbrupt(setStatus).
+features: [Symbol.match]
+---*/
+
+var r = /b/g;
+var callCount = 0;
+
+// Because this test speicifically concerns the behavior when setting
+// "lastIndex" following a match, care must be taken to avoid triggering a
+// similar error when `lastIndex` is initially set to `0` earlier in the
+// algorithm.
+//
+// Because the `lastIndex` property is non-configurable, this cannot be
+// accomplished with a simple "set" accessor function.
+//
+// Defer disabling modification of `lastIndex` until after the "this" value's
+// `exec` property has been accessed, ensuring that the resultant abrupt
+// completion originates from the second property modification.
+Object.defineProperty(r, 'exec', {
+ get: function() {
+ Object.defineProperty(r, 'lastIndex', { writable: false });
+ }
+});
+
+assert.throws(TypeError, function() {
+ r[Symbol.match]('abc');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-g-set-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-g-set-lastindex.js
new file mode 100644
index 0000000000..dc8548afdf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-g-set-lastindex.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Setting `lastIndex` after a "global" match success
+esid: sec-regexp.prototype-@@match
+info: |
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 7. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 5. Let flags be the value of R's [[OriginalFlags]] internal slot.
+ 6. If flags contains "g", let global be true, else let global be false.
+ [...]
+ 16. Let e be r's endIndex value.
+ [...]
+ 18. If global is true or sticky is true,
+ a. Let setStatus be Set(R, "lastIndex", e, true).
+features: [Symbol.match]
+---*/
+
+// The conflicting values for the "global" flag are necessary to observe the
+// final modification of `lastIndex` in RegExpBuiltinExec
+var r = /b/g;
+Object.defineProperty(r, 'global', { value: false });
+
+r[Symbol.match]('abc');
+
+assert.sameValue(r.lastIndex, 2);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-return-val-groups.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-return-val-groups.js
new file mode 100644
index 0000000000..86d8aaa53f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-return-val-groups.js
@@ -0,0 +1,51 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Return value after successful match with capturing groups
+es6id: 21.2.5.6
+info: |
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 7. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 20. Let A be ArrayCreate(n + 1).
+ [...]
+ 24. Perform CreateDataProperty(A, "index", matchIndex).
+ 25. Perform CreateDataProperty(A, "input", S).
+ 26. Let matchedSubstr be the matched substring (i.e. the portion of S
+ between offset lastIndex inclusive and offset e exclusive).
+ 27. Perform CreateDataProperty(A, "0", matchedSubstr).
+ 28. For each integer i such that i > 0 and i ≤ n
+ [...]
+ d. Else, fullUnicode is false,
+ i. Assert: captureI is a List of code units.
+ ii. Let capturedValue be a string consisting of the code units of
+ captureI.
+ e. Perform CreateDataProperty(A, ToString(i) , capturedValue).
+ [...]
+ 29. Return A.
+features: [Symbol.match]
+---*/
+
+var result = /b(.).(.)./[Symbol.match]('abcdefg');
+
+assert(Array.isArray(result));
+assert.sameValue(result.index, 1);
+assert.sameValue(result.input, 'abcdefg');
+assert.sameValue(result.length, 3);
+assert.sameValue(result[0], 'bcdef');
+assert.sameValue(result[1], 'c');
+assert.sameValue(result[2], 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-return-val.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-return-val.js
new file mode 100644
index 0000000000..cf833f4fab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-return-val.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Return value after successful match
+es6id: 21.2.5.6
+info: |
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 7. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 20. Let A be ArrayCreate(n + 1).
+ [...]
+ 24. Perform CreateDataProperty(A, "index", matchIndex).
+ 25. Perform CreateDataProperty(A, "input", S).
+ 26. Let matchedSubstr be the matched substring (i.e. the portion of S
+ between offset lastIndex inclusive and offset e exclusive).
+ 27. Perform CreateDataProperty(A, "0", matchedSubstr).
+ [...]
+ 29. Return A.
+features: [Symbol.match]
+---*/
+
+var result = /b./[Symbol.match]('abcd');
+
+assert(Array.isArray(result));
+assert.sameValue(result.index, 1);
+assert.sameValue(result.input, 'abcd');
+assert.sameValue(result.length, 1);
+assert.sameValue(result[0], 'bc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-u-return-val-groups.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-u-return-val-groups.js
new file mode 100644
index 0000000000..e324b49846
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-u-return-val-groups.js
@@ -0,0 +1,53 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Return value after successful match with extended unicode capturing groups
+es6id: 21.2.5.6
+info: |
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 7. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 20. Let A be ArrayCreate(n + 1).
+ [...]
+ 24. Perform CreateDataProperty(A, "index", matchIndex).
+ 25. Perform CreateDataProperty(A, "input", S).
+ 26. Let matchedSubstr be the matched substring (i.e. the portion of S
+ between offset lastIndex inclusive and offset e exclusive).
+ 27. Perform CreateDataProperty(A, "0", matchedSubstr).
+ 28. For each integer i such that i > 0 and i ≤ n
+ [...]
+ c. Else if fullUnicode is true,
+ i. Assert: captureI is a List of code points.
+ ii. Let capturedValue be a string whose code units are the
+ UTF16Encoding (10.1.1) of the code points of captureI.
+ [...]
+ e. Perform CreateDataProperty(A, ToString(i) , capturedValue).
+ [...]
+ 29. Return A.
+features: [Symbol.match]
+---*/
+
+var result = /b(.).(.)./u[Symbol.match]('ab\ud834\udf06defg');
+
+assert(Array.isArray(result));
+assert.sameValue(result.index, 1);
+assert.sameValue(result.input, 'ab\ud834\udf06defg');
+assert.sameValue(result.length, 3);
+assert.sameValue(result[0], 'b\ud834\udf06def');
+assert.sameValue(result[1], '\ud834\udf06');
+assert.sameValue(result[2], 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-y-set-lastindex-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-y-set-lastindex-err.js
new file mode 100644
index 0000000000..d48ba62333
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-y-set-lastindex-err.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error thrown while setting `lastIndex` after a "sticky" match
+ success
+es6id: 21.2.5.6
+info: |
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 7. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 18. If global is true or sticky is true,
+ a. Let setStatus be Set(R, "lastIndex", e, true).
+ b. ReturnIfAbrupt(setStatus).
+features: [Symbol.match]
+---*/
+
+var r = /a/y;
+
+Object.defineProperty(r, 'lastIndex', { writable: false });
+
+assert.throws(TypeError, function() {
+ r[Symbol.match]('a');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-y-set-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-y-set-lastindex.js
new file mode 100644
index 0000000000..a2eff7604e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-success-y-set-lastindex.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Setting `lastIndex` after a "sticky" match success
+es6id: 21.2.5.6
+info: |
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 7. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 16. Let e be r's endIndex value.
+ [...]
+ 18. If global is true or sticky is true,
+ a. Let setStatus be Set(R, "lastIndex", e, true).
+features: [Symbol.match]
+---*/
+
+var r = /a/y;
+
+r[Symbol.match]('a');
+
+assert.sameValue(r.lastIndex, 1);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-y-coerce-lastindex-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-y-coerce-lastindex-err.js
new file mode 100644
index 0000000000..9ef965f7d2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/builtin-y-coerce-lastindex-err.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Behavior when coercion of `lastIndex` attribute throws an error
+es6id: 21.2.5.6
+info: |
+ [...]
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 7. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 7. If global is false and sticky is false, let lastIndex be 0.
+ 8. Else, let lastIndex be ? ToLength(? Get(R, "lastIndex")).
+features: [Symbol.match]
+---*/
+
+var r = /./y;
+r.lastIndex = {
+ valueOf: function() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ r[Symbol.match]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/coerce-arg-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/coerce-arg-err.js
new file mode 100644
index 0000000000..6c7ede9f51
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/coerce-arg-err.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error thrown during string coercion of first parameter
+es6id: 21.2.5.6
+info: |
+ 21.2.5.6 RegExp.prototype [ @@match ] ( string )
+
+ [...]
+ 3. Let S be ToString(string)
+ 4. ReturnIfAbrupt(S).
+features: [Symbol.match]
+---*/
+
+var str = {
+ toString: function() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ /./[Symbol.match](str);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/coerce-arg.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/coerce-arg.js
new file mode 100644
index 0000000000..5b3ef902b2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/coerce-arg.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: String coercion of first parameter
+es6id: 21.2.5.6
+info: |
+ 21.2.5.6 RegExp.prototype [ @@match ] ( string )
+
+ [...]
+ 3. Let S be ToString(string)
+ [...]
+features: [Symbol.match]
+---*/
+
+var obj = {
+ valueOf: function() {
+ throw new Test262Error('This method should not be invoked.');
+ },
+ toString: function() {
+ return 'toString value';
+ }
+};
+
+assert.notSameValue(/toString value/[Symbol.match](obj), null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/coerce-global.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/coerce-global.js
new file mode 100644
index 0000000000..82750300d6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/coerce-global.js
@@ -0,0 +1,87 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Boolean coercion of `global` property
+esid: sec-regexp.prototype-@@match
+info: |
+ 21.2.5.6 RegExp.prototype [ @@match ] ( string )
+
+ [...]
+ 4. Let global be ToBoolean(? Get(rx, "global")).
+ 5. If global is false, then
+ a. Return ? RegExpExec(rx, S).
+ 6. Else global is true,
+ a. Let fullUnicode be ToBoolean(? Get(rx, "unicode")).
+ [...]
+features: [Symbol.match]
+---*/
+
+var exec = function() {
+ execCount += 1;
+ if (execCount === 1) {
+ return [''];
+ }
+ return null;
+};
+var r, result, execCount;
+
+r = /a/g;
+r.exec = exec;
+Object.defineProperty(r, 'global', { writable: true });
+
+execCount = 0;
+r.global = undefined;
+r[Symbol.match]('aa');
+assert.sameValue(execCount, 1, 'value: undefined');
+
+execCount = 0;
+r.global = null;
+r[Symbol.match]('aa');
+assert.sameValue(execCount, 1, 'value: null');
+
+execCount = 0;
+r.global = false;
+r[Symbol.match]('aa');
+assert.sameValue(execCount, 1, 'value: false');
+
+execCount = 0;
+r.global = NaN;
+r[Symbol.match]('aa');
+assert.sameValue(execCount, 1, 'value: NaN');
+
+execCount = 0;
+r.global = 0;
+r[Symbol.match]('aa');
+assert.sameValue(execCount, 1, 'value: 0');
+
+execCount = 0;
+r.global = '';
+r[Symbol.match]('aa');
+assert.sameValue(execCount, 1, 'value: ""');
+
+r = /a/;
+r.exec = exec;
+Object.defineProperty(r, 'global', { writable: true });
+
+r.global = true;
+execCount = 0;
+r[Symbol.match]('aa');
+assert.sameValue(execCount, 2, 'value: true');
+
+r.global = 86;
+execCount = 0;
+r[Symbol.match]('aa');
+assert.sameValue(execCount, 2, 'value: 86');
+
+r.global = Symbol.match;
+execCount = 0;
+r[Symbol.match]('aa');
+assert.sameValue(execCount, 2, 'value: Symbol.match');
+
+r.global = {};
+execCount = 0;
+r[Symbol.match]('aa');
+assert.sameValue(execCount, 2, 'value: {}');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/exec-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/exec-err.js
new file mode 100644
index 0000000000..9d6ba24730
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/exec-err.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Behavior when error is thrown by `exec` method
+es6id: 21.2.5.6
+info: |
+ [...]
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 5. If IsCallable(exec) is true, then
+ a. Let result be Call(exec, R, «S»).
+ b. ReturnIfAbrupt(result).
+features: [Symbol.match]
+---*/
+
+var r = /./;
+
+r.exec = function() {
+ throw new Test262Error();
+};
+
+assert.throws(Test262Error, function() {
+ r[Symbol.match]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/exec-invocation.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/exec-invocation.js
new file mode 100644
index 0000000000..9322ef4d81
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/exec-invocation.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Invocation of `exec` method
+es6id: 21.2.5.6
+info: |
+ [...]
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 5. If IsCallable(exec) is true, then
+ a. Let result be Call(exec, R, «S»).
+features: [Symbol.match]
+---*/
+
+var r = /./;
+var callCount = 0;
+var arg = {
+ toString: function() {
+ return 'string form';
+ }
+};
+var thisValue, args;
+
+r.exec = function() {
+ thisValue = this;
+ args = arguments;
+ callCount += 1;
+ return null;
+};
+
+r[Symbol.match](arg);
+
+assert.sameValue(callCount, 1);
+assert.sameValue(thisValue, r);
+assert.sameValue(args.length, 1);
+assert.sameValue(args[0], 'string form');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/exec-return-type-invalid.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/exec-return-type-invalid.js
new file mode 100644
index 0000000000..b173aee5d7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/exec-return-type-invalid.js
@@ -0,0 +1,58 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Behavior when `exec` method returns value of invalid type
+es6id: 21.2.5.6
+info: |
+ [...]
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 5. If IsCallable(exec) is true, then
+ a. Let result be Call(exec, R, «S»).
+ b. ReturnIfAbrupt(result).
+ c. If Type(result) is neither Object or Null, throw a TypeError
+ exception.
+features: [Symbol.match]
+---*/
+
+var r = /./;
+var retValue;
+r.exec = function() {
+ return retValue;
+};
+
+// Explicitly assert the method's presence to avoid false positives (i.e.
+// TypeErrors thrown by invoking an undefined reference).
+assert.sameValue(typeof r[Symbol.match], 'function');
+
+retValue = undefined;
+assert.throws(TypeError, function() {
+ r[Symbol.match]('');
+});
+
+retValue = true;
+assert.throws(TypeError, function() {
+ r[Symbol.match]('');
+});
+
+retValue = 'string';
+assert.throws(TypeError, function() {
+ r[Symbol.match]('');
+});
+
+retValue = Symbol.match;
+assert.throws(TypeError, function() {
+ r[Symbol.match]('');
+});
+
+retValue = 86;
+assert.throws(TypeError, function() {
+ r[Symbol.match]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/exec-return-type-valid.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/exec-return-type-valid.js
new file mode 100644
index 0000000000..9a73b01290
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/exec-return-type-valid.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Behavior when `exec` method returns value of valid type
+es6id: 21.2.5.6
+info: |
+ [...]
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 5. If IsCallable(exec) is true, then
+ a. Let result be Call(exec, R, «S»).
+ b. ReturnIfAbrupt(result).
+ c. If Type(result) is neither Object or Null, throw a TypeError
+ exception.
+ d. Return result.
+features: [Symbol.match]
+---*/
+
+var r = /./;
+var retValue;
+r.exec = function() {
+ return retValue;
+};
+
+retValue = null;
+assert.sameValue(r[Symbol.match](''), retValue);
+
+retValue = {};
+assert.sameValue(r[Symbol.match](''), retValue);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/flags-tostring-error.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/flags-tostring-error.js
new file mode 100644
index 0000000000..57faa2b888
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/flags-tostring-error.js
@@ -0,0 +1,45 @@
+// Copyright (C) 2022 Richard Gibson. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Errors thrown by converting `flags` to string are forwarded to the runtime
+esid: sec-regexp.prototype-@@match
+info: |
+ 1. Let _rx_ be the *this* value.
+ 2. If Type(_rx_) is not Object, throw a *TypeError* exception.
+ 3. Let _S_ be ? ToString(_string_).
+ 4. Let _flags_ be ? ToString(? Get(_rx_, *"flags"*)).
+features: [Symbol.match]
+---*/
+
+function CustomError() {}
+var toStringThrows = {
+ [Symbol.toPrimitive](hint) {
+ if (hint === 'string') {
+ throw new CustomError();
+ }
+ throw new Test262Error('@@toPrimitive should be called with hint "string"');
+ },
+ get toString() { throw new Test262Error('toString property should not be read'); },
+ get valueOf() { throw new Test262Error('valueOf property should not be read'); }
+};
+
+var re = /./;
+Object.defineProperties(re, {
+ flags: {
+ get() { return toStringThrows; }
+ },
+ global: {
+ get() { throw new Test262Error('global property should not be read'); }
+ },
+ unicode: {
+ get() { throw new Test262Error('unicode property should not be read'); }
+ }
+});
+
+assert.throws(CustomError, function() {
+ re[Symbol.match]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-coerce-result-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-coerce-result-err.js
new file mode 100644
index 0000000000..72b4033d09
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-coerce-result-err.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error is thrown while coercing `0` property of match result
+es6id: 21.2.5.6
+info: |
+ 7. If global is false, then
+ [...]
+ 8. Else global is true,
+ [...]
+ g. Repeat,
+ i. Let result be RegExpExec(rx, S).
+ [...]
+ iv. Else result is not null,
+ 1. Let matchStr be ToString(Get(result, "0")).
+ 2. ReturnIfAbrupt(matchStr).
+features: [Symbol.match]
+---*/
+
+var r = /./g;
+r.exec = function() {
+ return {
+ 0: {
+ toString: function() {
+ throw new Test262Error();
+ }
+ }
+ };
+};
+
+assert.throws(Test262Error, function() {
+ r[Symbol.match]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-get-exec-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-get-exec-err.js
new file mode 100644
index 0000000000..da260f89ca
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-get-exec-err.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when there is an error thrown while accessing the `exec` method of
+ "global" instances
+es6id: 21.2.5.6
+info: |
+ 7. If global is false, then
+ [...]
+ 8. Else global is true,
+ [...]
+ g. Repeat,
+ i. Let result be RegExpExec(rx, S).
+ ii. ReturnIfAbrupt(result).
+
+ ES6 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 3. Let exec be Get(R, "exec").
+ 4. ReturnIfAbrupt(exec).
+features: [Symbol.match]
+---*/
+
+var r = { flags: 'g', global: true };
+Object.defineProperty(r, 'exec', {
+ get: function() {
+ throw new Test262Error();
+ }
+});
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.match].call(r, '');
+});
+
+assert.sameValue(r.lastIndex, 0, 'Error thrown after setting `lastIndex`');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-get-result-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-get-result-err.js
new file mode 100644
index 0000000000..00e26c5aec
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-get-result-err.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error is thrown while accessing `0` property of match result
+es6id: 21.2.5.6
+info: |
+ 7. If global is false, then
+ [...]
+ 8. Else global is true,
+ [...]
+ g. Repeat,
+ i. Let result be RegExpExec(rx, S).
+ [...]
+ iv. Else result is not null,
+ 1. Let matchStr be ToString(Get(result, "0")).
+ 2. ReturnIfAbrupt(matchStr).
+features: [Symbol.match]
+---*/
+
+var r = /./g;
+var poisonedZero = {
+ get 0() {
+ throw new Test262Error();
+ }
+};
+
+r.exec = function() {
+ return poisonedZero;
+};
+
+assert.throws(Test262Error, function() {
+ r[Symbol.match]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-init-lastindex-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-init-lastindex-err.js
new file mode 100644
index 0000000000..cd214c8d58
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-init-lastindex-err.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Behavior when `lastIndex` cannot be set on "global" instances
+es6id: 21.2.5.6
+info: |
+ 7. If global is false, then
+ [...]
+ 8. Else global is true,
+ [...]
+ c. Let setStatus be Set(rx, "lastIndex", 0, true).
+ d. ReturnIfAbrupt(setStatus).
+features: [Symbol.match]
+---*/
+
+var r = /./g;
+Object.defineProperty(r, 'lastIndex', { writable: false });
+
+assert.throws(TypeError, function() {
+ r[Symbol.match]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-init-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-init-lastindex.js
new file mode 100644
index 0000000000..f407004ff4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-init-lastindex.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Initializing the value of `lastIndex` on "global" instances
+es6id: 21.2.5.6
+info: |
+ 7. If global is false, then
+ [...]
+ 8. Else global is true,
+ [...]
+ c. Let setStatus be Set(rx, "lastIndex", 0, true).
+features: [Symbol.match]
+---*/
+
+var r = /./g;
+
+r.lastIndex = 1;
+
+assert.notSameValue(r[Symbol.match]('a'), null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-empty-advance-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-empty-advance-lastindex.js
new file mode 100644
index 0000000000..40787a069e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-empty-advance-lastindex.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ lastIndex is explicitly advanced for zero-length matches for "global"
+ instances
+es6id: 21.2.5.6
+info: |
+ 7. If global is false, then
+ [...]
+ 8. Else global is true,
+ [...]
+ g. Repeat,
+ i. Let result be RegExpExec(rx, S).
+ [...]
+ iv. Else result is not null,
+ [...]
+ 5. If matchStr is the empty String, then
+ [...]
+ c. Let nextIndex be AdvanceStringIndex(S, thisIndex,
+ fullUnicode).
+ d. Let setStatus be Set(rx, "lastIndex", nextIndex, true).
+ e. ReturnIfAbrupt(setStatus).
+ 6. Increment n.
+features: [Symbol.match]
+---*/
+
+var result = /(?:)/g[Symbol.match]('abc');
+
+assert.notSameValue(result, null);
+assert.sameValue(result.length, 4);
+assert.sameValue(result[0], '');
+assert.sameValue(result[1], '');
+assert.sameValue(result[2], '');
+assert.sameValue(result[3], '');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-empty-coerce-lastindex-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-empty-coerce-lastindex-err.js
new file mode 100644
index 0000000000..8b11e37cc9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-empty-coerce-lastindex-err.js
@@ -0,0 +1,52 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error is thrown while type coercing `lastIndex` of zero-width
+ match
+es6id: 21.2.5.6
+info: |
+ 7. If global is false, then
+ [...]
+ 8. Else global is true,
+ [...]
+ g. Repeat,
+ i. Let result be RegExpExec(rx, S).
+ [...]
+ iv. Else result is not null,
+ 1. Let matchStr be ToString(Get(result, "0")).
+ [...]
+ 5. If matchStr is the empty String, then
+ a. Let thisIndex be ToLength(Get(rx, "lastIndex")).
+ b. ReturnIfAbrupt(thisIndex).
+features: [Symbol.match]
+---*/
+
+var r = /./g;
+var nextMatch;
+
+r.exec = function() {
+ var thisMatch = nextMatch;
+ if (thisMatch === null) {
+ return null;
+ }
+ nextMatch = null;
+ return {
+ get 0() {
+ r.lastIndex = {
+ valueOf: function() {
+ throw new Test262Error();
+ }
+ };
+ return thisMatch;
+ }
+ };
+};
+
+nextMatch = '';
+assert.throws(Test262Error, function() {
+ r[Symbol.match]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-empty-set-lastindex-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-empty-set-lastindex-err.js
new file mode 100644
index 0000000000..f767a612c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-empty-set-lastindex-err.js
@@ -0,0 +1,49 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error is thrown while setting `lastIndex` after a zero-width
+ match
+es6id: 21.2.5.6
+info: |
+ 7. If global is false, then
+ [...]
+ 8. Else global is true,
+ [...]
+ g. Repeat,
+ i. Let result be RegExpExec(rx, S).
+ [...]
+ iv. Else result is not null,
+ 1. Let matchStr be ToString(Get(result, "0")).
+ [...]
+ 5. If matchStr is the empty String, then
+ [...]
+ d. Let setStatus be Set(rx, "lastIndex", nextIndex, true).
+ e. ReturnIfAbrupt(setStatus).
+features: [Symbol.match]
+---*/
+
+var exec = function() {
+ var thisMatch = nextMatch;
+ if (thisMatch === null) {
+ return null;
+ }
+ nextMatch = null;
+ return {
+ get 0() {
+ Object.defineProperty(r, 'lastIndex', { writable: false });
+ return thisMatch;
+ }
+ };
+};
+var r, nextMatch;
+
+r = /./g;
+r.exec = exec;
+nextMatch = '';
+assert.throws(TypeError, function() {
+ r[Symbol.match]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-no-coerce-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-no-coerce-lastindex.js
new file mode 100644
index 0000000000..3417f6cb3b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-no-coerce-lastindex.js
@@ -0,0 +1,49 @@
+// Copyright (C) 2015 Mike Pennisi. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ The `lastIndex` property is not coerced for a non-empty string match
+es6id: 21.2.5.6
+info: |
+ 7. If global is false, then
+ [...]
+ 8. Else global is true,
+ [...]
+ g. Repeat,
+ i. Let result be RegExpExec(rx, S).
+ [...]
+ iv. Else result is not null,
+ 1. Let matchStr be ToString(Get(result, "0")).
+ [...]
+ 5. If matchStr is the empty String, then
+ a. Let thisIndex be ToLength(Get(rx, "lastIndex")).
+ b. ReturnIfAbrupt(thisIndex).
+features: [Symbol.match]
+---*/
+
+var r = /./g;
+var nextMatch;
+
+r.exec = function() {
+ var thisMatch = nextMatch;
+ if (thisMatch === null) {
+ return null;
+ }
+ nextMatch = null;
+ return {
+ get 0() {
+ r.lastIndex = {
+ valueOf: function() {
+ throw new Test262Error('This function should not be invoked.');
+ }
+ };
+ return thisMatch;
+ }
+ };
+};
+
+nextMatch = 'a non-empty string';
+r[Symbol.match]('');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-no-set-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-no-set-lastindex.js
new file mode 100644
index 0000000000..7ca7374884
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-match-no-set-lastindex.js
@@ -0,0 +1,45 @@
+// Copyright (C) 2015 Mike Pennisi. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: The `lastIndex` is not set after a non-zero-width match
+es6id: 21.2.5.6
+info: |
+ 7. If global is false, then
+ [...]
+ 8. Else global is true,
+ [...]
+ g. Repeat,
+ i. Let result be RegExpExec(rx, S).
+ [...]
+ iv. Else result is not null,
+ 1. Let matchStr be ToString(Get(result, "0")).
+ [...]
+ 5. If matchStr is the empty String, then
+ [...]
+ d. Let setStatus be Set(rx, "lastIndex", nextIndex, true).
+ e. ReturnIfAbrupt(setStatus).
+features: [Symbol.match]
+---*/
+
+var exec = function() {
+ var thisMatch = nextMatch;
+ if (thisMatch === null) {
+ return null;
+ }
+ nextMatch = null;
+ return {
+ get 0() {
+ Object.defineProperty(r, 'lastIndex', { writable: false });
+ return thisMatch;
+ }
+ };
+};
+var r, nextMatch;
+
+r = /./g;
+r.exec = exec;
+nextMatch = 'a non-empty string';
+r[Symbol.match]('');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-success-return-val.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-success-return-val.js
new file mode 100644
index 0000000000..b5b50c7b9e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-success-return-val.js
@@ -0,0 +1,48 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Return value when matches occur with the `global` flag
+es6id: 21.2.5.6
+info: |
+ [...]
+ 7. If global is false, then
+ [...]
+ 8. Else global is true,
+ [...]
+ e. Let A be ArrayCreate(0).
+ [...]
+ g. Repeat,
+ i. Let result be RegExpExec(rx, S).
+ ii. ReturnIfAbrupt(result).
+ iii. If result is null, then
+ 1. If n=0, return null.
+ 2. Else, return A.
+features: [Symbol.match]
+---*/
+
+var result = /.(.)./g[Symbol.match]('abcdefghi');
+
+assert(Array.isArray(result));
+
+assert(
+ !Object.prototype.hasOwnProperty.call(result, 'index'),
+ 'Does not define an `index` "own" property'
+);
+assert.sameValue(
+ result.index, undefined, 'Does not define an `index` property'
+);
+assert(
+ !Object.prototype.hasOwnProperty.call(result, 'input'),
+ 'Does not define an `input` "own" property'
+);
+assert.sameValue(
+ result.input, undefined, 'Does not define an `input` property'
+);
+
+assert.sameValue(result.length, 3);
+assert.sameValue(result[0], 'abc');
+assert.sameValue(result[1], 'def');
+assert.sameValue(result[2], 'ghi');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-zero-matches.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-zero-matches.js
new file mode 100644
index 0000000000..2c60e877f2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/g-zero-matches.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Return value when no matches occur with the `global` flag
+es6id: 21.2.5.6
+info: |
+ [...]
+ 7. If global is false, then
+ [...]
+ 8. Else global is true,
+ [...]
+ g. Repeat,
+ i. Let result be RegExpExec(rx, S).
+ ii. ReturnIfAbrupt(result).
+ iii. If result is null, then
+ 1. If n=0, return null.
+features: [Symbol.match]
+---*/
+
+assert.sameValue(/a/g[Symbol.match]('b'), null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/get-exec-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/get-exec-err.js
new file mode 100644
index 0000000000..aabcd9a3e4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/get-exec-err.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Behavior when error is thrown while accessing `exec` property
+es6id: 21.2.5.6
+info: |
+ [...]
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 3. Let exec be Get(R, "exec").
+ 4. ReturnIfAbrupt(exec).
+features: [Symbol.match]
+---*/
+
+var r = /./;
+
+Object.defineProperty(r, 'exec', {
+ get: function() {
+ throw new Test262Error();
+ }
+});
+
+assert.throws(Test262Error, function() {
+ r[Symbol.match]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/get-flags-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/get-flags-err.js
new file mode 100644
index 0000000000..e45a8d0789
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/get-flags-err.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2022 Richard Gibson. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Errors thrown by `flags` accessor are forwarded to the runtime
+esid: sec-regexp.prototype-@@match
+info: |
+ 1. Let _rx_ be the *this* value.
+ 2. If Type(_rx_) is not Object, throw a *TypeError* exception.
+ 3. Let _S_ be ? ToString(_string_).
+ 4. Let _flags_ be ? ToString(? Get(_rx_, *"flags"*)).
+features: [Symbol.match]
+---*/
+
+function CustomError() {}
+
+var obj = {
+ get flags() {
+ throw new CustomError();
+ },
+ get global() {
+ throw new Test262Error('global property should not be read');
+ },
+ get unicode() {
+ throw new Test262Error('unicode property should not be read');
+ }
+};
+
+assert.throws(CustomError, function() {
+ RegExp.prototype[Symbol.match].call(obj);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/get-global-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/get-global-err.js
new file mode 100644
index 0000000000..22690b007f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/get-global-err.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error is thrown during retrieval of `global` property
+esid: sec-regexp.prototype-@@match
+info: |
+ 1. Let _rx_ be the *this* value.
+ 2. If Type(_rx_) is not Object, throw a *TypeError* exception.
+ 3. Let _S_ be ? ToString(_string_).
+ 4. Let _flags_ be ? ToString(? Get(_rx_, *"flags"*)).
+
+ sec-get-regexp.prototype.flags get RegExp.prototype.flags
+ 6. Let _global_ be ToBoolean(? Get(_R_, *"global"*)).
+features: [Symbol.match]
+---*/
+
+var re = /./;
+Object.defineProperty(re, 'global', {
+ get() {
+ throw new Test262Error();
+ }
+});
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.match].call(re);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/get-unicode-error.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/get-unicode-error.js
new file mode 100644
index 0000000000..496d101d4b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/get-unicode-error.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Errors thrown by `unicode` accessor are forwarded to the runtime
+esid: sec-regexp.prototype-@@match
+info: |
+ 1. Let _rx_ be the *this* value.
+ 2. If Type(_rx_) is not Object, throw a *TypeError* exception.
+ 3. Let _S_ be ? ToString(_string_).
+ 4. Let _flags_ be ? ToString(? Get(_rx_, *"flags"*)).
+
+ sec-get-regexp.prototype.flags get RegExp.prototype.flags
+ 14. Let _unicode_ be ToBoolean(? Get(_R_, *"unicode"*)).
+features: [Symbol.match]
+---*/
+
+var nonGlobalRe = /./;
+var globalRe = /./g;
+var accessor = function() {
+ throw new Test262Error();
+};
+Object.defineProperty(nonGlobalRe, 'unicode', {
+ get: accessor
+});
+Object.defineProperty(globalRe, 'unicode', {
+ get: accessor
+});
+
+assert.throws(Test262Error, function() {
+ nonGlobalRe[Symbol.match]('');
+});
+
+assert.throws(Test262Error, function() {
+ globalRe[Symbol.match]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/length.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/length.js
new file mode 100644
index 0000000000..ea84d3ce40
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/length.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 21.2.5.6
+description: RegExp.prototype[Symbol.match] `length` property
+info: |
+ ES6 Section 17:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this value
+ is equal to the largest number of named arguments shown in the subclause
+ headings for the function description, including optional parameters.
+
+ [...]
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [Symbol.match]
+---*/
+
+assert.sameValue(RegExp.prototype[Symbol.match].length, 1);
+
+verifyNotEnumerable(RegExp.prototype[Symbol.match], 'length');
+verifyNotWritable(RegExp.prototype[Symbol.match], 'length');
+verifyConfigurable(RegExp.prototype[Symbol.match], 'length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/name.js
new file mode 100644
index 0000000000..2c676dba2f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/name.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 21.2.5.6
+description: RegExp.prototype[Symbol.match] `name` property
+info: |
+ The value of the name property of this function is "[Symbol.match]".
+
+ ES6 Section 17:
+
+ [...]
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [Symbol.match]
+---*/
+
+assert.sameValue(RegExp.prototype[Symbol.match].name, '[Symbol.match]');
+
+verifyNotEnumerable(RegExp.prototype[Symbol.match], 'name');
+verifyNotWritable(RegExp.prototype[Symbol.match], 'name');
+verifyConfigurable(RegExp.prototype[Symbol.match], 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/not-a-constructor.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/not-a-constructor.js
new file mode 100644
index 0000000000..f56be3391f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ RegExp.prototype[Symbol.match] does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, Symbol, Symbol.match, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(RegExp.prototype[Symbol.match]),
+ false,
+ 'isConstructor(RegExp.prototype[Symbol.match]) must return false'
+);
+
+assert.throws(TypeError, () => {
+ let re = new RegExp(''); new re[Symbol.match]();
+}, '`let re = new RegExp(\'\'); new re[Symbol.match]()` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/prop-desc.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/prop-desc.js
new file mode 100644
index 0000000000..bfc4b1b68f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/prop-desc.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.6
+description: RegExp.prototype[Symbol.match] property descriptor
+info: |
+ ES6 Section 17
+
+ Every other data property described in clauses 18 through 26 and in Annex
+ B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+ [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [Symbol.match]
+---*/
+
+verifyNotEnumerable(RegExp.prototype, Symbol.match);
+verifyWritable(RegExp.prototype, Symbol.match);
+verifyConfigurable(RegExp.prototype, Symbol.match);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/this-val-non-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/this-val-non-obj.js
new file mode 100644
index 0000000000..2c48f0ceeb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/this-val-non-obj.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: The `this` value must be an object
+es6id: 21.2.5.6
+info: |
+ 1. Let rx be the this value.
+ 2. If Type(rx) is not Object, throw a TypeError exception.
+features: [Symbol.match]
+---*/
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.match].call(undefined);
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.match].call(null);
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.match].call(true);
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.match].call('string');
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.match].call(Symbol.match);
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.match].call(86);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/this-val-non-regexp.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/this-val-non-regexp.js
new file mode 100644
index 0000000000..ec0f62d4ea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/this-val-non-regexp.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when invoked on an object without a a [[RegExpMatcher]] internal
+ slot
+es6id: 21.2.5.6
+info: |
+ [...]
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 5. If IsCallable(exec) is true, then
+ [...]
+ d. Return result.
+ 6. If R does not have a [[RegExpMatcher]] internal slot, throw a TypeError
+ exception.
+features: [Symbol.match]
+---*/
+
+var objWithExec = {
+ exec: function() {
+ return null;
+ }
+};
+var objWithoutExec = {};
+
+RegExp.prototype[Symbol.match].call(objWithExec);
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.match].call(objWithoutExec);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/u-advance-after-empty.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/u-advance-after-empty.js
new file mode 100644
index 0000000000..0b37aa2184
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/u-advance-after-empty.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: lastIndex is advanced according to width of astral symbols
+es6id: 21.2.5.6
+info: |
+ 21.2.5.6 RegExp.prototype [ @@match ] ( string )
+
+ [...]
+ 8. Else global is true,
+ a. Let fullUnicode be ToBoolean(Get(rx, "unicode")).
+ [...]
+ g. Repeat,
+ [...]
+ iv. Else result is not null,
+ [...]
+ 5. If matchStr is the empty String, then
+ [...]
+ c. Let nextIndex be AdvanceStringIndex(S, thisIndex,
+ fullUnicode).
+ d. Let setStatus be Set(rx, "lastIndex", nextIndex, true).
+features: [Symbol.match]
+---*/
+
+var match = /^|\udf06/ug[Symbol.match]('\ud834\udf06');
+
+assert(match !== null);
+assert.sameValue(match.length, 1);
+assert.sameValue(match[0], '');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-fail-global-return.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-fail-global-return.js
new file mode 100644
index 0000000000..2feead0fe2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-fail-global-return.js
@@ -0,0 +1,49 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Accumulates consecutive matches when `g` flag is present
+es6id: 21.2.5.6
+info: |
+ 21.2.5.6 RegExp.prototype [ @@match ] ( string )
+
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ [...]
+ 8. Else global is true,
+ [...]
+ g. Repeat,
+ i. Let result be RegExpExec(rx, S).
+ ii. ReturnIfAbrupt(result).
+ iii. If result is null, then
+ 1. If n=0, return null.
+ 2. Else, return A.
+ [...]
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ b. Let r be matcher(S, lastIndex).
+ c. If r is failure, then
+ i. If sticky is true, then
+ [...]
+ 3. Return null.
+features: [Symbol.match]
+---*/
+
+var result = /a/yg[Symbol.match]('aaba');
+
+assert.notSameValue(result, null);
+assert.sameValue(result.length, 2);
+assert.sameValue(result[0], 'a');
+assert.sameValue(result[1], 'a');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-fail-lastindex-no-write.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-fail-lastindex-no-write.js
new file mode 100644
index 0000000000..174a13fccf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-fail-lastindex-no-write.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Match failure with non-writable `lastIndex` property
+es6id: 21.2.5.6
+info: |
+ 21.2.5.6 RegExp.prototype [ @@match ] ( string )
+
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ b. Let r be matcher(S, lastIndex).
+ c. If r is failure, then
+ i. If sticky is true, then
+ 1. Let setStatus be Set(R, "lastIndex", 0, true).
+ 2. ReturnIfAbrupt(setStatus).
+features: [Symbol.match]
+---*/
+
+var r = /c/y;
+Object.defineProperty(r, 'lastIndex', {
+ writable: false
+});
+
+assert.throws(TypeError, function() {
+ r[Symbol.match]('abc');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-fail-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-fail-lastindex.js
new file mode 100644
index 0000000000..be4f4d0fd0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-fail-lastindex.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Resets the `lastIndex` property to zero after a match failure
+es6id: 21.2.5.6
+info: |
+ 21.2.5.6 RegExp.prototype [ @@match ] ( string )
+
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ b. Let r be matcher(S, lastIndex).
+ c. If r is failure, then
+ i. If sticky is true, then
+ 1. Let setStatus be Set(R, "lastIndex", 0, true).
+features: [Symbol.match]
+---*/
+
+var r = /c/y;
+r.lastIndex = 1;
+
+r[Symbol.match]('abc');
+
+assert.sameValue(r.lastIndex, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-fail-return.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-fail-return.js
new file mode 100644
index 0000000000..eab1193a87
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-fail-return.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Stops match execution after first match failure
+es6id: 21.2.5.6
+info: |
+ 21.2.5.6 RegExp.prototype [ @@match ] ( string )
+
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ b. Let r be matcher(S, lastIndex).
+ c. If r is failure, then
+ i. If sticky is true, then
+ [...]
+ 3. Return null.
+features: [Symbol.match]
+---*/
+
+assert.sameValue(/b/y[Symbol.match]('ab'), null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-init-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-init-lastindex.js
new file mode 100644
index 0000000000..2570ac501a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-init-lastindex.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Honors initial value of the `lastIndex` property
+es6id: 21.2.5.6
+info: |
+ 21.2.5.6 RegExp.prototype [ @@match ] ( string )
+
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ 9. ReturnIfAbrupt(sticky).
+ 10. If global is false and sticky is false, let lastIndex be 0.
+features: [Symbol.match]
+---*/
+
+var r = /./y;
+var match;
+r.lastIndex = 1;
+
+match = r[Symbol.match]('abc');
+
+assert.notSameValue(match, null);
+assert.sameValue(match.length, 1);
+assert.sameValue(match[0], 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-set-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-set-lastindex.js
new file mode 100644
index 0000000000..a2e70777b0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.match/y-set-lastindex.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Sets the `lastIndex` property to the end index of the first match
+es6id: 21.2.5.6
+info: |
+ 21.2.5.6 RegExp.prototype [ @@match ] ( string )
+
+ [...]
+ 5. Let global be ToBoolean(Get(rx, "global")).
+ 6. ReturnIfAbrupt(global).
+ 7. If global is false, then
+ a. Return RegExpExec(rx, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 18. If global is true or sticky is true,
+ a. Let setStatus be Set(R, "lastIndex", e, true).
+features: [Symbol.match]
+---*/
+
+var r = /abc/y;
+r[Symbol.match]('abc');
+
+assert.sameValue(r.lastIndex, 3);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/isregexp-called-once.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/isregexp-called-once.js
new file mode 100644
index 0000000000..4d0888f201
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/isregexp-called-once.js
@@ -0,0 +1,59 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: IsRegExp should only be called once
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ 1. Let R be the this value.
+ [...]
+ 4. Let C be ? SpeciesConstructor(R, %RegExp%).
+ 5. Let flags be ? ToString(? Get(R, "flags")).
+ 6. Let matcher be ? Construct(C, « R, flags »).
+
+ 21.2.3.1 RegExp ( pattern, flags )
+ 1. Let patternIsRegExp be ? IsRegExp(pattern).
+ [...]
+features: [Symbol.match, Symbol.matchAll]
+---*/
+
+var internalCount = 0;
+Object.defineProperty(RegExp.prototype, Symbol.match, {
+ get: function() {
+ ++internalCount;
+ return true;
+ }
+});
+
+var calls = [];
+var o = {
+ get [Symbol.match]() {
+ calls.push('get @@match');
+ return false;
+ },
+ get flags() {
+ calls.push('get flags');
+ return {
+ toString() {
+ calls.push('flags toString');
+ return "";
+ }
+ };
+ },
+};
+
+RegExp.prototype[Symbol.matchAll].call(o, {
+ toString() {
+ calls.push('arg toString')
+ }
+});
+
+assert.sameValue(0, internalCount);
+
+assert.sameValue(calls.length, 4);
+assert.sameValue(calls[0], 'arg toString');
+assert.sameValue(calls[1], 'get flags');
+assert.sameValue(calls[2], 'flags toString');
+assert.sameValue(calls[3], 'get @@match');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/isregexp-this-throws.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/isregexp-this-throws.js
new file mode 100644
index 0000000000..528c0cd5ad
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/isregexp-this-throws.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: Re-throws errors thrown while accessing RegExp's @@match property
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 3. Return ? MatchAllIterator(R, string).
+
+ MatchAllIterator ( R, O )
+ [...]
+ 2. If ? IsRegExp(R) is true, then
+ [...]
+features: [Symbol.match, Symbol.matchAll]
+---*/
+
+var obj = {
+ get [Symbol.match]() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.matchAll].call(obj, '');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/length.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/length.js
new file mode 100644
index 0000000000..ec522ab2f5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/length.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2018 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: RegExp.prototype[Symbol.matchAll] `length` property
+info: |
+ 17 ECMAScript Standard Built-in Objects:
+
+ [...]
+
+ Every built-in function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this
+ value is equal to the largest number of named arguments shown in the
+ subclause headings for the function description. Optional parameters
+ (which are indicated with brackets: [ ]) or rest parameters (which
+ are shown using the form «...name») are not included in the default
+ argument count.
+
+ Unless otherwise specified, the length property of a built-in function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [Symbol.matchAll]
+---*/
+
+assert.sameValue(RegExp.prototype[Symbol.matchAll].length, 1);
+
+verifyNotEnumerable(RegExp.prototype[Symbol.matchAll], 'length');
+verifyNotWritable(RegExp.prototype[Symbol.matchAll], 'length');
+verifyConfigurable(RegExp.prototype[Symbol.matchAll], 'length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/name.js
new file mode 100644
index 0000000000..f9a1e9bf87
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/name.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2018 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: RegExp.prototype[Symbol.matchAll] `name` property
+info: |
+ 17 ECMAScript Standard Built-in Objects:
+
+ [...]
+
+ Every built-in function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ [...]
+
+ Unless otherwise specified, the name property of a built-in function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [Symbol.matchAll]
+---*/
+
+assert.sameValue(RegExp.prototype[Symbol.matchAll].name, '[Symbol.matchAll]');
+
+verifyNotEnumerable(RegExp.prototype[Symbol.matchAll], 'name');
+verifyNotWritable(RegExp.prototype[Symbol.matchAll], 'name');
+verifyConfigurable(RegExp.prototype[Symbol.matchAll], 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/not-a-constructor.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/not-a-constructor.js
new file mode 100644
index 0000000000..03009bf3de
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ RegExp.prototype[Symbol.matchAll] does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, Symbol, Symbol.match, Symbol.matchAll, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(RegExp.prototype[Symbol.matchAll]),
+ false,
+ 'isConstructor(RegExp.prototype[Symbol.matchAll]) must return false'
+);
+
+assert.throws(TypeError, () => {
+ let re = new RegExp(''); new re[Symbol.matchAll]();
+}, '`let re = new RegExp(\'\'); new re[Symbol.matchAll]()` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/prop-desc.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/prop-desc.js
new file mode 100644
index 0000000000..5fc20a0f9c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/prop-desc.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2018 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: RegExp.prototype[Symbol.matchAll] property descriptor
+info: |
+ 17 ECMAScript Standard Built-in Objects:
+
+ [...]
+
+ Every other data property described in clauses 18 through 26 and in Annex
+ B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+ [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [Symbol.matchAll]
+---*/
+
+assert.sameValue(typeof RegExp.prototype[Symbol.matchAll], 'function');
+
+verifyNotEnumerable(RegExp.prototype, Symbol.matchAll);
+verifyWritable(RegExp.prototype, Symbol.matchAll);
+verifyConfigurable(RegExp.prototype, Symbol.matchAll);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/regexpcreate-this-throws.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/regexpcreate-this-throws.js
new file mode 100644
index 0000000000..edb02b3b8c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/regexpcreate-this-throws.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: Re-throws errors while creating an internal RegExp
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 3. Return ? MatchAllIterator(R, string).
+
+ MatchAllIterator ( R, O )
+ [...]
+ 2. If ? IsRegExp(R) is true, then
+ [...]
+ 3. Else,
+ a. Let flags be "g".
+ b. Let matcher be ? RegExpCreate(R, flags).
+features: [Symbol.matchAll]
+---*/
+
+var obj = {
+ toString() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.matchAll].call(obj, '');
+});
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/shell.js
new file mode 100644
index 0000000000..0ba29600b8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/shell.js
@@ -0,0 +1,152 @@
+// GENERATED, DO NOT EDIT
+// file: compareIterator.js
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Compare the values of an iterator with an array of expected values
+defines: [assert.compareIterator]
+---*/
+
+// Example:
+//
+// function* numbers() {
+// yield 1;
+// yield 2;
+// yield 3;
+// }
+//
+// assert.compareIterator(numbers(), [
+// v => assert.sameValue(v, 1),
+// v => assert.sameValue(v, 2),
+// v => assert.sameValue(v, 3),
+// ]);
+//
+assert.compareIterator = function(iter, validators, message) {
+ message = message || '';
+
+ var i, result;
+ for (i = 0; i < validators.length; i++) {
+ result = iter.next();
+ assert(!result.done, 'Expected ' + i + ' values(s). Instead iterator only produced ' + (i - 1) + ' value(s). ' + message);
+ validators[i](result.value);
+ }
+
+ result = iter.next();
+ assert(result.done, 'Expected only ' + i + ' values(s). Instead iterator produced more. ' + message);
+ assert.sameValue(result.value, undefined, 'Expected value of `undefined` when iterator completes. ' + message);
+}
+
+// file: regExpUtils.js
+// Copyright (C) 2017 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+ Collection of functions used to assert the correctness of RegExp objects.
+defines: [buildString, testPropertyEscapes, testPropertyOfStrings, testExtendedCharacterClass, matchValidator]
+---*/
+
+function buildString(args) {
+ // Use member expressions rather than destructuring `args` for improved
+ // compatibility with engines that only implement assignment patterns
+ // partially or not at all.
+ const loneCodePoints = args.loneCodePoints;
+ const ranges = args.ranges;
+ const CHUNK_SIZE = 10000;
+ let result = Reflect.apply(String.fromCodePoint, null, loneCodePoints);
+ for (let i = 0; i < ranges.length; i++) {
+ const range = ranges[i];
+ const start = range[0];
+ const end = range[1];
+ const codePoints = [];
+ for (let length = 0, codePoint = start; codePoint <= end; codePoint++) {
+ codePoints[length++] = codePoint;
+ if (length === CHUNK_SIZE) {
+ result += Reflect.apply(String.fromCodePoint, null, codePoints);
+ codePoints.length = length = 0;
+ }
+ }
+ result += Reflect.apply(String.fromCodePoint, null, codePoints);
+ }
+ return result;
+}
+
+function printCodePoint(codePoint) {
+ const hex = codePoint
+ .toString(16)
+ .toUpperCase()
+ .padStart(6, "0");
+ return `U+${hex}`;
+}
+
+function printStringCodePoints(string) {
+ const buf = [];
+ for (const symbol of string) {
+ const formatted = printCodePoint(symbol.codePointAt(0));
+ buf.push(formatted);
+ }
+ return buf.join(' ');
+}
+
+function testPropertyEscapes(regExp, string, expression) {
+ if (!regExp.test(string)) {
+ for (const symbol of string) {
+ const formatted = printCodePoint(symbol.codePointAt(0));
+ assert(
+ regExp.test(symbol),
+ `\`${ expression }\` should match ${ formatted } (\`${ symbol }\`)`
+ );
+ }
+ }
+}
+
+function testPropertyOfStrings(args) {
+ // Use member expressions rather than destructuring `args` for improved
+ // compatibility with engines that only implement assignment patterns
+ // partially or not at all.
+ const regExp = args.regExp;
+ const expression = args.expression;
+ const matchStrings = args.matchStrings;
+ const nonMatchStrings = args.nonMatchStrings;
+ const allStrings = matchStrings.join('');
+ if (!regExp.test(allStrings)) {
+ for (const string of matchStrings) {
+ assert(
+ regExp.test(string),
+ `\`${ expression }\` should match ${ string } (${ printStringCodePoints(string) })`
+ );
+ }
+ }
+
+ if (!nonMatchStrings) return;
+
+ const allNonMatchStrings = nonMatchStrings.join('');
+ if (regExp.test(allNonMatchStrings)) {
+ for (const string of nonMatchStrings) {
+ assert(
+ !regExp.test(string),
+ `\`${ expression }\` should not match ${ string } (${ printStringCodePoints(string) })`
+ );
+ }
+ }
+}
+
+// The exact same logic can be used to test extended character classes
+// as enabled through the RegExp `v` flag. This is useful to test not
+// just standalone properties of strings, but also string literals, and
+// set operations.
+const testExtendedCharacterClass = testPropertyOfStrings;
+
+// Returns a function that validates a RegExp match result.
+//
+// Example:
+//
+// var validate = matchValidator(['b'], 1, 'abc');
+// validate(/b/.exec('abc'));
+//
+function matchValidator(expectedEntries, expectedIndex, expectedInput) {
+ return function(match) {
+ assert.compareArray(match, expectedEntries, 'Match entries');
+ assert.sameValue(match.index, expectedIndex, 'Match index');
+ assert.sameValue(match.input, expectedInput, 'Match input');
+ }
+}
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-get-constructor-throws.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-get-constructor-throws.js
new file mode 100644
index 0000000000..73baa39d78
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-get-constructor-throws.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: |
+ Re-throws errors thrown while accessing RegExp's constructor property
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 3. Return ? MatchAllIterator(R, string).
+
+ MatchAllIterator ( R, O )
+ [...]
+ 2. If ? IsRegExp(R) is true, then
+ a. Let C be ? SpeciesConstructor(R, RegExp).
+
+ SpeciesConstructor ( O, defaultConstructor )
+ [...]
+ 2. Let C be ? Get(O, "constructor").
+features: [Symbol.matchAll]
+---*/
+
+var regexp = /./;
+Object.defineProperty(regexp, 'constructor', {
+ get(){
+ throw new Test262Error();
+ }
+});
+
+assert.throws(Test262Error, function() {
+ regexp[Symbol.matchAll]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-get-species-throws.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-get-species-throws.js
new file mode 100644
index 0000000000..4f3ebb94b4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-get-species-throws.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: Re-throws errors thrown while accessing of @@species property
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 3. Return ? MatchAllIterator(R, string).
+
+ MatchAllIterator ( R, O )
+ [...]
+ 2. If ? IsRegExp(R) is true, then
+ a. Let C be ? SpeciesConstructor(R, RegExp).
+
+ SpeciesConstructor ( O, defaultConstructor )
+ [...]
+ 2. Let C be ? Get(O, "constructor").
+features: [Symbol.matchAll, Symbol.species]
+---*/
+
+var regexp = /./;
+regexp.constructor = {
+ get [Symbol.species]() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ regexp[Symbol.matchAll]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-is-not-object-throws.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-is-not-object-throws.js
new file mode 100644
index 0000000000..12a96e9dc6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-is-not-object-throws.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: Throws TypeError if `constructor` property is not an object
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 3. Return ? MatchAllIterator(R, string).
+
+ MatchAllIterator ( R, O )
+ [...]
+ 2. If ? IsRegExp(R) is true, then
+ a. Let C be ? SpeciesConstructor(R, RegExp).
+
+ SpeciesConstructor ( O, defaultConstructor )
+ [...]
+ 2. Let C be ? Get(O, "constructor").
+ 3. If C is undefined, return defaultConstructor.
+ 4. If Type(C) is not Object, throw a TypeError exception.
+features: [Symbol.matchAll]
+---*/
+
+var regexp = /./;
+
+function callMatchAll() { regexp[Symbol.matchAll](''); }
+
+regexp.constructor = null;
+assert.throws(TypeError, callMatchAll, "`constructor` value is null");
+
+regexp.constructor = true;
+assert.throws(TypeError, callMatchAll, "`constructor` value is Boolean");
+
+regexp.constructor = "";
+assert.throws(TypeError, callMatchAll, "`constructor` value is String");
+
+regexp.constructor = Symbol();
+assert.throws(TypeError, callMatchAll, "`constructor` value is Symbol");
+
+regexp.constructor = 1;
+assert.throws(TypeError, callMatchAll, "`constructor` value is Number");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-is-undefined.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-is-undefined.js
new file mode 100644
index 0000000000..6b1fe894da
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-is-undefined.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: Throws TypeError if `constructor` property is not an object
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 3. Return ? MatchAllIterator(R, string).
+
+ MatchAllIterator ( R, O )
+ [...]
+ 2. If ? IsRegExp(R) is true, then
+ a. Let C be ? SpeciesConstructor(R, RegExp).
+
+ SpeciesConstructor ( O, defaultConstructor )
+ [...]
+ 2. Let C be ? Get(O, "constructor").
+ 3. If C is undefined, return defaultConstructor.
+features: [Symbol.matchAll]
+includes: [compareArray.js, compareIterator.js, regExpUtils.js]
+---*/
+
+var regexp = /\w/g;
+regexp.constructor = undefined;
+var str = 'a*b';
+
+assert.compareIterator(regexp[Symbol.matchAll](str), [
+ matchValidator(['a'], 0, str),
+ matchValidator(['b'], 2, str)
+]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-species-is-not-constructor.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-species-is-not-constructor.js
new file mode 100644
index 0000000000..6499c3b06a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-species-is-not-constructor.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: TypeError is thrown when species constructor is not a constructor
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 2. Return ? [MatchAllIterator](#matchalliterator)(R, string).
+
+ MatchAllIterator ( R, O )
+ [...]
+ 3. Let C be ? [SpeciesConstructor][species-constructor](R, RegExp).
+
+ SpeciesConstructor ( O, defaultConstructor )
+ [...]
+ 2. Let C be ? Get(O, "constructor").
+ 3. If C is undefined, return defaultConstructor.
+ 4. If Type(C) is not Object, throw a TypeError exception.
+ 5. Let S be ? Get(C, @@species).
+ 6. If S is either undefined or null, return defaultConstructor.
+ 7. If IsConstructor(S) is true, return S.
+ 8. Throw a TypeError exception.
+features: [Symbol.matchAll, Symbol.species]
+---*/
+
+var regexp = /./;
+var speciesConstructor = {};
+regexp.constructor = speciesConstructor;
+
+var callMatchAll = function() {
+ regexp[Symbol.matchAll]('');
+}
+
+speciesConstructor[Symbol.species] = true;
+assert.throws(TypeError, callMatchAll, "`constructor[Symbol.species]` value is Boolean");
+
+speciesConstructor[Symbol.species] = 1;
+assert.throws(TypeError, callMatchAll, "`constructor[Symbol.species]` value is Number");
+
+speciesConstructor[Symbol.species] = Symbol();
+assert.throws(TypeError, callMatchAll, "`constructor[Symbol.species]` value is Symbol");
+
+speciesConstructor[Symbol.species] = true;
+assert.throws(TypeError, callMatchAll, "`constructor[Symbol.species]` value is Boolean");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-species-is-null-or-undefined.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-species-is-null-or-undefined.js
new file mode 100644
index 0000000000..fbc5affa42
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-species-is-null-or-undefined.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: |
+ Default constructor is used when species constructor is null or undefined
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 2. Return ? [MatchAllIterator](#matchalliterator)(R, string).
+
+ MatchAllIterator ( R, O )
+ [...]
+ 3. Let C be ? [SpeciesConstructor][species-constructor](R, RegExp).
+
+ SpeciesConstructor ( O, defaultConstructor )
+ [...]
+ 2. Let C be ? Get(O, "constructor").
+ 3. If C is undefined, return defaultConstructor.
+ 4. If Type(C) is not Object, throw a TypeError exception.
+ 5. Let S be ? Get(C, @@species).
+ 6. If S is either undefined or null, return defaultConstructor.
+features: [Symbol.matchAll, Symbol.species]
+includes: [compareArray.js, compareIterator.js, regExpUtils.js]
+---*/
+
+function TestWithConstructor(ctor) {
+ var regexp = /\w/g;
+ regexp.constructor = {
+ [Symbol.species]: ctor
+ };
+ var str = 'a*b';
+
+ assert.compareIterator(regexp[Symbol.matchAll](str), [
+ matchValidator(['a'], 0, str),
+ matchValidator(['b'], 2, str)
+ ]);
+}
+
+TestWithConstructor(undefined);
+TestWithConstructor(null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-species-throws.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-species-throws.js
new file mode 100644
index 0000000000..9ba712e86a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor-species-throws.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: Re-throws errors when calling constructor's @@species
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 3. Return ? MatchAllIterator(R, string).
+
+ MatchAllIterator ( R, O )
+ [...]
+ 2. If ? IsRegExp(R) is true, then
+ a. Let C be ? SpeciesConstructor(R, RegExp).
+ b. Let flags be ? ToString(? Get(R, "flags"))
+ c. Let matcher be ? Construct(C, R, flags).
+features: [Symbol.matchAll, Symbol.species]
+---*/
+
+var regexp = /./;
+regexp.constructor = {
+ [Symbol.species]: function() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ regexp[Symbol.matchAll]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor.js
new file mode 100644
index 0000000000..521301b381
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-constructor.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: Custom species constructor is called when creating internal RegExp
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 4. Let C be ? SpeciesConstructor(R, %RegExp%).
+ 5. Let flags be ? ToString(? Get(R, "flags")).
+ 6. Let matcher be ? Construct(C, « R, flags »).
+ [...]
+ 9. If flags contains "g", let global be true.
+ 10. Else, let global be false.
+ [...]
+features: [Symbol.matchAll, Symbol.species]
+includes: [compareArray.js, compareIterator.js, regExpUtils.js]
+---*/
+
+var callCount = 0;
+var callArgs;
+var regexp = /\d/u;
+regexp.constructor = {
+ [Symbol.species]: function(){
+ callCount++;
+ callArgs = arguments;
+ return /\w/g;
+ }
+};
+var str = 'a*b';
+var iter = regexp[Symbol.matchAll](str);
+
+assert.sameValue(callCount, 1);
+assert.sameValue(callArgs.length, 2);
+assert.sameValue(callArgs[0], regexp);
+assert.sameValue(callArgs[1], 'u');
+
+assert.compareIterator(iter, [
+ matchValidator(['a'], 0, str),
+]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-regexp-get-global-throws.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-regexp-get-global-throws.js
new file mode 100644
index 0000000000..dacf9b4249
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-regexp-get-global-throws.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: |
+ Doesn't access the "global" property of the constructed RegExp
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 4. Let C be ? SpeciesConstructor(R, %RegExp%).
+ 5. Let flags be ? ToString(? Get(R, "flags")).
+ 6. Let matcher be ? Construct(C, « R, flags »).
+ [...]
+ 9. If flags contains "g", let global be true.
+ 10. Else, let global be false.
+ [...]
+features: [Symbol.matchAll, Symbol.species]
+---*/
+
+var regexp = /./;
+regexp.constructor = {
+ [Symbol.species]: function() {
+ return Object.defineProperty(/./, 'global', {
+ get() {
+ throw new Test262Error();
+ }
+ });
+ }
+};
+
+regexp[Symbol.matchAll]('');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-regexp-get-unicode-throws.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-regexp-get-unicode-throws.js
new file mode 100644
index 0000000000..f58fe1169b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/species-regexp-get-unicode-throws.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: |
+ Doesn't access the "unicode" property of the constructed RegExp
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 4. Let C be ? SpeciesConstructor(R, %RegExp%).
+ 5. Let flags be ? ToString(? Get(R, "flags")).
+ 6. Let matcher be ? Construct(C, « R, flags »).
+ [...]
+ 11. If flags contains "u", let fullUnicode be true.
+ 12. Else, let fullUnicode be false.
+ [...]
+features: [Symbol.matchAll, Symbol.species]
+---*/
+
+var regexp = /./;
+regexp.constructor = {
+ [Symbol.species]: function() {
+ return Object.defineProperty(/./, 'unicode', {
+ get() {
+ throw new Test262Error();
+ }
+ });
+ }
+};
+
+regexp[Symbol.matchAll]('');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/string-tostring-throws.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/string-tostring-throws.js
new file mode 100644
index 0000000000..6592addd96
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/string-tostring-throws.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2018 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: String coercion of string parameter
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 3. Return ? MatchAllIterator(R, string).
+
+ MatchAllIterator ( R, O )
+ 1. Let S be ? ToString(O).
+features: [Symbol.matchAll]
+---*/
+
+var obj = {
+ valueOf() {
+ throw new Test262Error('This method should not be invoked.');
+ },
+ toString() {
+ throw new Test262Error('toString invoked');
+ }
+};
+
+assert.throws(Test262Error, function() {
+ /toString value/[Symbol.matchAll](obj);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/string-tostring.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/string-tostring.js
new file mode 100644
index 0000000000..f7a03a6c56
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/string-tostring.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: String coercion of `string` argument
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 3. Return ? MatchAllIterator(R, string).
+
+ MatchAllIterator ( R, O )
+ 1. Let S be ? ToString(O).
+features: [Symbol.matchAll]
+includes: [compareArray.js, compareIterator.js, regExpUtils.js]
+---*/
+
+var str = 'a*b';
+var obj = {
+ toString() {
+ return str;
+ }
+};
+var regexp = /\w/g;
+
+assert.compareIterator(regexp[Symbol.matchAll](obj), [
+ matchValidator(['a'], 0, str),
+ matchValidator(['b'], 2, str)
+]);
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-get-flags-throws.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-get-flags-throws.js
new file mode 100644
index 0000000000..7612c19e3e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-get-flags-throws.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: Re-throws errors thrown while accessing RegExp's flags property
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 3. Return ? MatchAllIterator(R, string).
+
+ MatchAllIterator ( R, O )
+ [...]
+ 2. If ? IsRegExp(R) is true, then
+ [...]
+ b. Let flags be ? ToString(? Get(R, "flags"))
+features: [Symbol.matchAll]
+---*/
+
+var regexp = /./;
+Object.defineProperty(regexp, 'flags', {
+ get() {
+ throw new Test262Error();
+ }
+});
+
+assert.throws(Test262Error, function() {
+ regexp[Symbol.matchAll]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-get-flags.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-get-flags.js
new file mode 100644
index 0000000000..083f7e4e50
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-get-flags.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: Regexp's flags
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 3. Return ? MatchAllIterator(R, string).
+
+ MatchAllIterator ( R, O )
+ [...]
+ 2. If ? IsRegExp(R) is true, then
+ [...]
+ b. Let flags be ? ToString(? Get(R, "flags"))
+features: [Symbol.matchAll]
+includes: [compareArray.js, compareIterator.js, regExpUtils.js]
+---*/
+
+var regexp = /\w/;
+Object.defineProperty(regexp, 'flags', {
+ value: 'g'
+});
+var str = 'a*b';
+
+assert.compareIterator(regexp[Symbol.matchAll](str), [
+ matchValidator(['a'], 0, str),
+ matchValidator(['b'], 2, str)
+]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-lastindex-cached.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-lastindex-cached.js
new file mode 100644
index 0000000000..0c669c3594
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-lastindex-cached.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: Verify regexp's lastIndex is cached
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 3. Return ? MatchAllIterator(R, string).
+
+ MatchAllIterator ( R, O )
+ [...]
+ 2. If ? IsRegExp(R) is true, then
+ [...]
+ f. Let lastIndex be ? ToLength(? Get(R, "lastIndex")).
+ g. Perform ? Set(matcher, "lastIndex", lastIndex, true).
+features: [Symbol.matchAll]
+includes: [compareArray.js, compareIterator.js, regExpUtils.js]
+---*/
+
+var regexp = /./g;
+regexp.lastIndex = {
+ valueOf() {
+ return 2;
+ }
+};
+var str = 'abcd';
+var iter = regexp[Symbol.matchAll](str);
+
+// Verify lastIndex is cached at the time of calling @@matchAll
+regexp.lastIndex = 0;
+
+assert.compareIterator(iter, [
+ matchValidator(['c'], 2, str),
+ matchValidator(['d'], 3, str)
+]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-not-object-throws.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-not-object-throws.js
new file mode 100644
index 0000000000..83cf79f929
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-not-object-throws.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2018 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: Throws TypeError when `this` is not an Object
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+features: [Symbol.matchAll]
+---*/
+
+var thisValue;
+var callMatchAll = function() {
+ RegExp.prototype[Symbol.matchAll].call(thisValue, '');
+};
+
+thisValue = null;
+assert.throws(TypeError, callMatchAll, 'this value is null');
+
+thisValue = true;
+assert.throws(TypeError, callMatchAll, 'this value is Boolean');
+
+thisValue = '';
+assert.throws(TypeError, callMatchAll, 'this value is String');
+
+thisValue = Symbol();
+assert.throws(TypeError, callMatchAll, 'this value is Symbol');
+
+thisValue = 1;
+assert.throws(TypeError, callMatchAll, 'this value is Number');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-tolength-lastindex-throws.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-tolength-lastindex-throws.js
new file mode 100644
index 0000000000..a3fd259a40
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-tolength-lastindex-throws.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: Re-throws errors while coercing RegExp's lastIndex
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 3. Return ? MatchAllIterator(R, string).
+
+ MatchAllIterator ( R, O )
+ [...]
+ 2. If ? IsRegExp(R) is true, then
+ [...]
+ f. Let lastIndex be ? ToLength(? Get(R, "lastIndex")).
+features: [Symbol.matchAll]
+---*/
+
+var regexp = /./;
+regexp.lastIndex = {
+ valueOf() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ regexp[Symbol.matchAll]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-tostring-flags-throws.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-tostring-flags-throws.js
new file mode 100644
index 0000000000..3dc84b9a0c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-tostring-flags-throws.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: Re-throws errors while coercing RegExp's flags to a string
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 3. Return ? MatchAllIterator(R, string).
+
+ MatchAllIterator ( R, O )
+ [...]
+ 2. If ? IsRegExp(R) is true, then
+ [...]
+ b. Let flags be ? ToString(? Get(R, "flags"))
+features: [Symbol.matchAll]
+---*/
+
+var regexp = /\w/;
+Object.defineProperty(regexp, 'flags', {
+ value: {
+ valueOf() {
+ ERROR('valueOf Should not be called');
+ },
+ toString() {
+ throw new Test262Error();
+ }
+ }
+});
+
+assert.throws(Test262Error, function() {
+ regexp[Symbol.matchAll]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-tostring-flags.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-tostring-flags.js
new file mode 100644
index 0000000000..a2b69cfd1b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.matchAll/this-tostring-flags.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2018 Peter Wong. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: pending
+description: Corercing regexp's flags
+info: |
+ RegExp.prototype [ @@matchAll ] ( string )
+ [...]
+ 3. Return ? MatchAllIterator(R, string).
+
+ MatchAllIterator ( R, O )
+ [...]
+ 2. If ? IsRegExp(R) is true, then
+ [...]
+ b. Let flags be ? ToString(? Get(R, "flags"))
+features: [Symbol.matchAll]
+includes: [compareArray.js, compareIterator.js, regExpUtils.js]
+---*/
+
+var regexp = /\w/;
+Object.defineProperty(regexp, 'flags', {
+ value: {
+ toString() {
+ return 'g';
+ }
+ }
+});
+var str = 'a*b';
+
+assert.compareIterator(regexp[Symbol.matchAll](str), [
+ matchValidator(['a'], 0, str),
+ matchValidator(['b'], 2, str)
+]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/arg-1-coerce-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/arg-1-coerce-err.js
new file mode 100644
index 0000000000..c9146920f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/arg-1-coerce-err.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Behavior when error thrown while type coercing first argument
+es6id: 21.2.5.8
+info: |
+ 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 3. Let S be ToString(string).
+ 4. ReturnIfAbrupt(S).
+features: [Symbol.replace]
+---*/
+
+var arg = {
+ toString: function() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ /./[Symbol.replace](arg);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/arg-1-coerce.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/arg-1-coerce.js
new file mode 100644
index 0000000000..a471e4ef1e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/arg-1-coerce.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Type coercion of first argument
+es6id: 21.2.5.8
+info: |
+ 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 3. Let S be ToString(string).
+ [...]
+features: [Symbol.replace]
+---*/
+
+var arg = {
+ valueOf: function() {
+ throw new Test262Error('This method should not be invoked.');
+ },
+ toString: function() {
+ return 'toString value';
+ }
+};
+
+assert.sameValue(/./[Symbol.replace](arg, 'x'), 'xoString value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/arg-2-coerce-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/arg-2-coerce-err.js
new file mode 100644
index 0000000000..3fe9cb57f5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/arg-2-coerce-err.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Behavior when error thrown while type coercing second argument
+es6id: 21.2.5.8
+info: |
+ 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 6. Let functionalReplace be IsCallable(replaceValue).
+ 7. If functionalReplace is false, then
+ a. Let replaceValue be ToString(replaceValue).
+ b. ReturnIfAbrupt(replaceValue).
+features: [Symbol.replace]
+---*/
+
+var arg = {
+ toString: function() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ /./[Symbol.replace]('', arg);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/arg-2-coerce.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/arg-2-coerce.js
new file mode 100644
index 0000000000..16c659a095
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/arg-2-coerce.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Type coercion of second argument
+es6id: 21.2.5.8
+info: |
+ 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 6. Let functionalReplace be IsCallable(replaceValue).
+ 7. If functionalReplace is false, then
+ a. Let replaceValue be ToString(replaceValue).
+ [...]
+features: [Symbol.replace]
+---*/
+
+var arg = {
+ valueOf: function() {
+ throw new Test262Error('This method should not be invoked.');
+ },
+ toString: function() {
+ return 'toString value';
+ }
+};
+
+assert.sameValue(/./[Symbol.replace]('string', arg), 'toString valuetring');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/coerce-global.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/coerce-global.js
new file mode 100644
index 0000000000..4b87e84024
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/coerce-global.js
@@ -0,0 +1,75 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Boolean coercion of `global` property
+es6id: 21.2.5.8
+info: |
+ 21.2.5.6 RegExp.prototype [ @@replace ] ( string )
+
+ [...]
+ 8. Let global be ToBoolean(Get(rx, "global")).
+ [...]
+features: [Symbol.replace]
+---*/
+
+Array.print = print;
+var r = /a/g;
+Object.defineProperty(r, 'global', { writable: true });
+
+r.lastIndex = 0;
+r.global = undefined;
+assert.sameValue(r[Symbol.replace]('aa', 'b'), 'ba', 'value: undefined');
+
+r.lastIndex = 0;
+r.global = null;
+assert.sameValue(r[Symbol.replace]('aa', 'b'), 'ba', 'value: null');
+
+r.lastIndex = 0;
+r.global = false;
+assert.sameValue(r[Symbol.replace]('aa', 'b'), 'ba', 'value: false');
+
+r.lastIndex = 0;
+r.global = NaN;
+assert.sameValue(r[Symbol.replace]('aa', 'b'), 'ba', 'value: NaN');
+
+r.lastIndex = 0;
+r.global = 0;
+assert.sameValue(r[Symbol.replace]('aa', 'b'), 'ba', 'value: global');
+
+r.lastIndex = 0;
+r.global = '';
+assert.sameValue(r[Symbol.replace]('aa', 'b'), 'ba', 'value: ""');
+
+var execCount = 0;
+r = /a/;
+Object.defineProperty(r, 'global', { writable: true });
+r.exec = function() {
+ execCount += 1;
+ if (execCount === 1) {
+ return ['a'];
+ }
+ return null;
+};
+
+execCount = 0;
+r.global = true;
+r[Symbol.replace]('aa', 'b');
+assert.sameValue(execCount, 2, 'value: true');
+
+execCount = 0;
+r.global = 86;
+r[Symbol.replace]('aa', 'b');
+assert.sameValue(execCount, 2, 'value: 86');
+
+execCount = 0;
+r.global = Symbol.replace;
+r[Symbol.replace]('aa', 'b');
+assert.sameValue(execCount, 2, 'value: Symbol.replace');
+
+execCount = 0;
+r.global = {};
+r[Symbol.replace]('aa', 'b');
+assert.sameValue(execCount, 2, 'value: {}');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/coerce-lastindex-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/coerce-lastindex-err.js
new file mode 100644
index 0000000000..767644672b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/coerce-lastindex-err.js
@@ -0,0 +1,53 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ Abrupt completion during coercion of "lastIndex" property of `this` value.
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 11. Repeat, while done is false
+ a. Let result be ? RegExpExec(rx, S).
+ b. If result is null, set done to true.
+ c. Else,
+ i. Append result to the end of results.
+ ii. If global is false, set done to true.
+ iii. Else,
+ 1. Let matchStr be ? ToString(? Get(result, "0")).
+ 2. If matchStr is the empty String, then
+ a. Let thisIndex be ? ToLength(? Get(rx, "lastIndex")).
+features: [Symbol.replace]
+---*/
+
+var r = /./g;
+var execWasCalled = false;
+var coercibleIndex = {
+ valueOf: function() {
+ throw new Test262Error();
+ },
+};
+
+var result = {
+ length: 1,
+ 0: '',
+ index: 0,
+};
+
+r.exec = function() {
+ if (execWasCalled) {
+ return null;
+ }
+
+ r.lastIndex = coercibleIndex;
+ execWasCalled = true;
+ return result;
+};
+
+assert.throws(Test262Error, function() {
+ r[Symbol.replace]('', '');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/coerce-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/coerce-lastindex.js
new file mode 100644
index 0000000000..23297ddfbd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/coerce-lastindex.js
@@ -0,0 +1,54 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ Length coercion of "lastIndex" property of `this` value.
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 11. Repeat, while done is false
+ a. Let result be ? RegExpExec(rx, S).
+ b. If result is null, set done to true.
+ c. Else,
+ i. Append result to the end of results.
+ ii. If global is false, set done to true.
+ iii. Else,
+ 1. Let matchStr be ? ToString(? Get(result, "0")).
+ 2. If matchStr is the empty String, then
+ a. Let thisIndex be ? ToLength(? Get(rx, "lastIndex")).
+ b. Let nextIndex be AdvanceStringIndex(S, thisIndex, fullUnicode).
+ c. Perform ? Set(rx, "lastIndex", nextIndex, true).
+features: [Symbol.replace]
+---*/
+
+var r = /./g;
+var execWasCalled = false;
+var coercibleIndex = {
+ valueOf: function() {
+ return Math.pow(2, 54);
+ },
+};
+
+var result = {
+ length: 1,
+ 0: '',
+ index: 0,
+};
+
+r.exec = function() {
+ if (execWasCalled) {
+ return null;
+ }
+
+ r.lastIndex = coercibleIndex;
+ execWasCalled = true;
+ return result;
+};
+
+assert.sameValue(r[Symbol.replace]('', ''), '');
+assert.sameValue(r.lastIndex, Math.pow(2, 53));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/coerce-unicode.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/coerce-unicode.js
new file mode 100644
index 0000000000..abe4a3727a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/coerce-unicode.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Boolean coercion of `unicode` property
+es6id: 21.2.5.8
+info: |
+ 21.2.5.6 RegExp.prototype [ @@replace ] ( string )
+
+ [...]
+ 10. If global is true, then
+ a. Let fullUnicode be ToBoolean(Get(rx, "unicode")).
+ [...]
+features: [Symbol.replace]
+---*/
+
+var r = /^|\udf06/g;
+Object.defineProperty(r, 'unicode', { writable: true });
+
+r.unicode = undefined;
+assert.sameValue(r[Symbol.replace]('\ud834\udf06', 'XXX'), 'XXX\ud834XXX');
+
+r.unicode = null;
+assert.sameValue(r[Symbol.replace]('\ud834\udf06', 'XXX'), 'XXX\ud834XXX');
+
+r.unicode = false;
+assert.sameValue(r[Symbol.replace]('\ud834\udf06', 'XXX'), 'XXX\ud834XXX');
+
+r.unicode = NaN;
+assert.sameValue(r[Symbol.replace]('\ud834\udf06', 'XXX'), 'XXX\ud834XXX');
+
+r.unicode = 0;
+assert.sameValue(r[Symbol.replace]('\ud834\udf06', 'XXX'), 'XXX\ud834XXX');
+
+r.unicode = '';
+assert.sameValue(r[Symbol.replace]('\ud834\udf06', 'XXX'), 'XXX\ud834XXX');
+
+r.unicode = true;
+assert.sameValue(r[Symbol.replace]('\ud834\udf06', 'XXX'), 'XXX\ud834\udf06');
+
+r.unicode = 86;
+assert.sameValue(r[Symbol.replace]('\ud834\udf06', 'XXX'), 'XXX\ud834\udf06');
+
+r.unicode = Symbol.replace;
+assert.sameValue(r[Symbol.replace]('\ud834\udf06', 'XXX'), 'XXX\ud834\udf06');
+
+r.unicode = {};
+assert.sameValue(r[Symbol.replace]('\ud834\udf06', 'XXX'), 'XXX\ud834\udf06');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/exec-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/exec-err.js
new file mode 100644
index 0000000000..20be01fa3c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/exec-err.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Behavior when error is thrown by `exec` method
+es6id: 21.2.5.8
+info: |
+ 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+ b. ReturnIfAbrupt(result).
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 3. Let exec be Get(R, "exec").
+ 4. ReturnIfAbrupt(exec).
+ 5. If IsCallable(exec) is true, then
+ a. Let result be Call(exec, R, «S»).
+ b. ReturnIfAbrupt(result).
+features: [Symbol.replace]
+---*/
+
+var r = /./;
+r.exec = function() {
+ throw new Test262Error();
+};
+
+assert.throws(Test262Error, function() {
+ r[Symbol.replace]('', '');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/exec-invocation.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/exec-invocation.js
new file mode 100644
index 0000000000..54f4b7b59e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/exec-invocation.js
@@ -0,0 +1,46 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Invocation of `exec` method
+es6id: 21.2.5.8
+info: |
+ [...]
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+ [...]
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 3. Let exec be Get(R, "exec").
+ 4. ReturnIfAbrupt(exec).
+ 5. If IsCallable(exec) is true, then
+ a. Let result be Call(exec, R, «S»).
+features: [Symbol.replace]
+---*/
+
+var r = /./;
+var callCount = 0;
+var arg = {
+ toString: function() {
+ return 'string form';
+ }
+};
+var thisValue, args;
+
+r.exec = function() {
+ thisValue = this;
+ args = arguments;
+ callCount += 1;
+ return null;
+};
+
+r[Symbol.replace](arg, '');
+
+assert.sameValue(callCount, 1);
+assert.sameValue(thisValue, r);
+assert.sameValue(args.length, 1);
+assert.sameValue(args[0], 'string form');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/flags-tostring-error.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/flags-tostring-error.js
new file mode 100644
index 0000000000..f66a3e4053
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/flags-tostring-error.js
@@ -0,0 +1,49 @@
+// Copyright (C) 2022 Richard Gibson. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Errors thrown by converting `flags` to string are forwarded to the runtime
+esid: sec-regexp.prototype-@@replace
+info: |
+ 1. Let _rx_ be the *this* value.
+ 2. If Type(_rx_) is not Object, throw a *TypeError* exception.
+ 3. Let _S_ be ? ToString(_string_).
+ 4. Let _lengthS_ be the number of code unit elements in _S_.
+ 5. Let _functionalReplace_ be IsCallable(_replaceValue_).
+ 6. If _functionalReplace_ is *false*, then
+ a. Set _replaceValue_ to ? ToString(_replaceValue_).
+ i. Let _flags_ be ? ToString(? Get(_rx_, *"flags"*)).
+features: [Symbol.replace]
+---*/
+
+function CustomError() {}
+var toStringThrows = {
+ [Symbol.toPrimitive](hint) {
+ if (hint === 'string') {
+ throw new CustomError();
+ }
+ throw new Test262Error('@@toPrimitive should be called with hint "string"');
+ },
+ get toString() { throw new Test262Error('toString property should not be read'); },
+ get valueOf() { throw new Test262Error('valueOf property should not be read'); }
+};
+
+var re = /./g;
+Object.defineProperties(re, {
+ flags: {
+ get() { return toStringThrows; }
+ },
+ global: {
+ get() { throw new Test262Error('global property should not be read'); }
+ },
+ unicode: {
+ get() { throw new Test262Error('unicode property should not be read'); }
+ }
+});
+
+assert.throws(CustomError, function() {
+ re[Symbol.replace]('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-coerce-replacement-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-coerce-replacement-err.js
new file mode 100644
index 0000000000..76362ce99d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-coerce-replacement-err.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error is thrown during string coercion of the value returned
+ by functional replaceValue
+es6id: 21.2.5.8
+info: |
+ 16. Repeat, for each result in results,
+ [...]
+ m. If functionalReplace is true, then
+ i. Let replacerArgs be «matched».
+ ii. Append in list order the elements of captures to the end of the
+ List replacerArgs.
+ iii. Append position and S as the last two elements of replacerArgs.
+ iv. Let replValue be Call(replaceValue, undefined, replacerArgs).
+ v. Let replacement be ToString(replValue).
+ [...]
+ o. ReturnIfAbrupt(replacement).
+features: [Symbol.replace]
+---*/
+
+var replacer = function() {
+ return {
+ toString: function() {
+ throw new Test262Error();
+ }
+ };
+};
+
+assert.throws(Test262Error, function() {
+ /x/[Symbol.replace]('[x]', replacer);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-coerce-replacement.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-coerce-replacement.js
new file mode 100644
index 0000000000..6b09118351
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-coerce-replacement.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ String coercion of the value returned by functional replaceValue.
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 14. For each result in results, do
+ [...]
+ k. If functionalReplace is true, then
+ [...]
+ v. Let replValue be ? Call(replaceValue, undefined, replacerArgs).
+ vi. Let replacement be ? ToString(replValue).
+features: [Symbol.replace]
+---*/
+
+var replacer = function() {
+ return {
+ toString: function() {
+ return 'toString value';
+ },
+ valueOf: function() {
+ throw new Test262Error('This method should not be invoked.');
+ },
+ };
+};
+
+assert.sameValue(/x/[Symbol.replace]('[x]', replacer), '[toString value]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-err.js
new file mode 100644
index 0000000000..32e0ccd115
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-err.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error is thrown by functional replaceValue.
+es6id: 21.2.5.8
+info: |
+ 16. Repeat, for each result in results,
+ [...]
+ m. If functionalReplace is true, then
+ i. Let replacerArgs be «matched».
+ ii. Append in list order the elements of captures to the end of the
+ List replacerArgs.
+ iii. Append position and S as the last two elements of replacerArgs.
+ iv. Let replValue be Call(replaceValue, undefined, replacerArgs).
+ v. Let replacement be ToString(replValue).
+ [...]
+ o. ReturnIfAbrupt(replacement).
+features: [Symbol.replace]
+---*/
+
+var replacer = function() {
+ throw new Test262Error();
+};
+
+assert.throws(Test262Error, function() {
+ /./[Symbol.replace]('a', replacer);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-invoke-args-empty-result.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-invoke-args-empty-result.js
new file mode 100644
index 0000000000..712d046f6e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-invoke-args-empty-result.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ Arguments of functional replaceValue (`exec` result is empty array).
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 14. For each result in results, do
+ [...]
+ e. Let position be ? ToInteger(? Get(result, "index")).
+ [...]
+ k. If functionalReplace is true, then
+ i. Let replacerArgs be « matched ».
+ ii. Append in list order the elements of captures to the end of the List replacerArgs.
+ iii. Append position and S to replacerArgs.
+ [...]
+ v. Let replValue be ? Call(replaceValue, undefined, replacerArgs).
+features: [Symbol.replace]
+---*/
+
+var args;
+var replacer = function() {
+ args = arguments;
+};
+
+var r = /./;
+r.exec = function() {
+ return [];
+};
+
+r[Symbol.replace]('foo', replacer);
+
+assert.notSameValue(args, undefined);
+assert.sameValue(args.length, 3);
+assert.sameValue(args[0], 'undefined');
+assert.sameValue(args[1], 0);
+assert.sameValue(args[2], 'foo');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-invoke-args.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-invoke-args.js
new file mode 100644
index 0000000000..b48f9aff71
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-invoke-args.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Arguments of functional replaceValue
+es6id: 21.2.5.8
+info: |
+ 16. Repeat, for each result in results,
+ [...]
+ m. If functionalReplace is true, then
+ i. Let replacerArgs be «matched».
+ ii. Append in list order the elements of captures to the end of the
+ List replacerArgs.
+ iii. Append position and S as the last two elements of replacerArgs.
+ iv. Let replValue be Call(replaceValue, undefined, replacerArgs).
+ [...]
+features: [Symbol.replace]
+---*/
+
+var args;
+var replacer = function() {
+ args = arguments;
+};
+
+/b(.).(.)/[Symbol.replace]('abcdef', replacer);
+
+assert.notSameValue(args, undefined);
+assert.sameValue(args.length, 5);
+assert.sameValue(args[0], 'bcde');
+assert.sameValue(args[1], 'c');
+assert.sameValue(args[2], 'e');
+assert.sameValue(args[3], 1);
+assert.sameValue(args[4], 'abcdef');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-invoke-this-no-strict.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-invoke-this-no-strict.js
new file mode 100644
index 0000000000..217a7768a6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-invoke-this-no-strict.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ `this` value of functional replaceValue (outside of strict mode)
+es6id: 21.2.5.8
+info: |
+ 16. Repeat, for each result in results,
+ [...]
+ m. If functionalReplace is true, then
+ i. Let replacerArgs be «matched».
+ ii. Append in list order the elements of captures to the end of the
+ List replacerArgs.
+ iii. Append position and S as the last two elements of replacerArgs.
+ iv. Let replValue be Call(replaceValue, undefined, replacerArgs).
+ [...]
+flags: [noStrict]
+features: [Symbol.replace]
+---*/
+
+var thisVal;
+var replacer = function() {
+ thisVal = this;
+};
+
+/./[Symbol.replace]('x', replacer);
+
+assert.sameValue(thisVal, this);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-invoke-this-strict-strict.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-invoke-this-strict-strict.js
new file mode 100644
index 0000000000..906210b6bf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/fn-invoke-this-strict-strict.js
@@ -0,0 +1,32 @@
+'use strict';
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ `this` value of functional replaceValue (within strict mode)
+es6id: 21.2.5.8
+info: |
+ 16. Repeat, for each result in results,
+ [...]
+ m. If functionalReplace is true, then
+ i. Let replacerArgs be «matched».
+ ii. Append in list order the elements of captures to the end of the
+ List replacerArgs.
+ iii. Append position and S as the last two elements of replacerArgs.
+ iv. Let replValue be Call(replaceValue, undefined, replacerArgs).
+ [...]
+flags: [onlyStrict]
+features: [Symbol.replace]
+---*/
+
+var thisVal = null;
+var replacer = function() {
+ thisVal = this;
+};
+
+/./[Symbol.replace]('x', replacer);
+
+assert.sameValue(thisVal, undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/g-init-lastindex-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/g-init-lastindex-err.js
new file mode 100644
index 0000000000..df97b72216
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/g-init-lastindex-err.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error is thrown while initializing `lastIndex` property for
+ "global" instances
+es6id: 21.2.5.8
+info: |
+ 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 10. If global is true, then
+ [...]
+ c. Let setStatus be Set(rx, "lastIndex", 0, true).
+ d. ReturnIfAbrupt(setStatus).
+features: [Symbol.replace]
+---*/
+
+var r = /./g;
+
+// Avoid false positives from unrelated TypeErrors
+r[Symbol.replace]('x', 'x');
+
+Object.defineProperty(r, 'lastIndex', { writable: false });
+
+assert.throws(TypeError, function() {
+ r[Symbol.replace]('x', 'x');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/g-init-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/g-init-lastindex.js
new file mode 100644
index 0000000000..ea824178e8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/g-init-lastindex.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Initialization of `lastIndex` property for "global" instances
+es6id: 21.2.5.8
+info: |
+ 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 10. If global is true, then
+ [...]
+ c. Let setStatus be Set(rx, "lastIndex", 0, true).
+ [...]
+features: [Symbol.replace]
+---*/
+
+var r = /./g;
+
+r.lastIndex = 1;
+
+assert.sameValue(r[Symbol.replace]('aa', 'x'), 'xx');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/g-pos-decrement.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/g-pos-decrement.js
new file mode 100644
index 0000000000..ed390cd2ed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/g-pos-decrement.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when position is decremented during result accumulation
+es6id: 21.2.5.8
+info: |
+ 16. Repeat, for each result in results,
+ [...]
+ p. If position ≥ nextSourcePosition, then
+ i. NOTE position should not normally move backwards. If it does, it
+ is an indication of an ill-behaving RegExp subclass or use of an
+ access triggered side-effect to change the global flag or other
+ characteristics of rx. In such cases, the corresponding
+ substitution is ignored.
+ ii. Let accumulatedResult be the String formed by concatenating the
+ code units of the current value of accumulatedResult with the
+ substring of S consisting of the code units from
+ nextSourcePosition (inclusive) up to position (exclusive) and
+ with the code units of replacement.
+ iii. Let nextSourcePosition be position + matchLength.
+features: [Symbol.replace]
+---*/
+
+var r = /./g;
+var callCount = 0;
+r.exec = function() {
+ callCount += 1;
+
+ if (callCount === 1) {
+ return { index: 3, length: 1, 0: 0 };
+ } else if (callCount === 2) {
+ return { index: 1, length: 1, 0: 0 };
+ }
+
+ return null;
+};
+
+assert.sameValue(r[Symbol.replace]('abcde', 'X'), 'abcXe');
+assert.sameValue(callCount, 3);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/g-pos-increment.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/g-pos-increment.js
new file mode 100644
index 0000000000..2bc399093a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/g-pos-increment.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when position is incremented during result accumulation
+es6id: 21.2.5.8
+info: |
+ 16. Repeat, for each result in results,
+ [...]
+ p. If position ≥ nextSourcePosition, then
+ i. NOTE position should not normally move backwards. If it does, it
+ is an indication of an ill-behaving RegExp subclass or use of an
+ access triggered side-effect to change the global flag or other
+ characteristics of rx. In such cases, the corresponding
+ substitution is ignored.
+ ii. Let accumulatedResult be the String formed by concatenating the
+ code units of the current value of accumulatedResult with the
+ substring of S consisting of the code units from
+ nextSourcePosition (inclusive) up to position (exclusive) and
+ with the code units of replacement.
+ iii. Let nextSourcePosition be position + matchLength.
+features: [Symbol.replace]
+---*/
+
+var r = /./g;
+var callCount = 0;
+r.exec = function() {
+ callCount += 1;
+
+ if (callCount === 1) {
+ return { index: 1, length: 1, 0: 0 };
+ } else if (callCount === 2) {
+ return { index: 3, length: 1, 0: 0 };
+ }
+
+ return null;
+};
+
+assert.sameValue(r[Symbol.replace]('abcde', 'X'), 'aXcXe');
+assert.sameValue(callCount, 3);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/get-exec-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/get-exec-err.js
new file mode 100644
index 0000000000..6d431b44fb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/get-exec-err.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when there is an error thrown while accessing the `exec` method of
+ "global" instances
+es6id: 21.2.5.8
+info: |
+ [...]
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+
+ ES6 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 3. Let exec be Get(R, "exec").
+ 4. ReturnIfAbrupt(exec).
+features: [Symbol.replace]
+---*/
+
+var r = { flags: 'g', global: true };
+Object.defineProperty(r, 'exec', {
+ get: function() {
+ throw new Test262Error();
+ }
+});
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.replace].call(r, '', '');
+});
+
+assert.sameValue(r.lastIndex, 0, 'Error thrown after setting `lastIndex`');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/get-flags-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/get-flags-err.js
new file mode 100644
index 0000000000..9e2312efc0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/get-flags-err.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2022 Richard Gibson. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Errors thrown by `flags` accessor are forwarded to the runtime
+esid: sec-regexp.prototype-@@replace
+info: |
+ 1. Let _rx_ be the *this* value.
+ 2. If Type(_rx_) is not Object, throw a *TypeError* exception.
+ 3. Let _S_ be ? ToString(_string_).
+ 4. Let _lengthS_ be the number of code unit elements in _S_.
+ 5. Let _functionalReplace_ be IsCallable(_replaceValue_).
+ 6. If _functionalReplace_ is *false*, then
+ a. Set _replaceValue_ to ? ToString(_replaceValue_).
+ i. Let _flags_ be ? ToString(? Get(_rx_, *"flags"*)).
+features: [Symbol.replace]
+---*/
+
+function CustomError() {}
+
+var obj = {
+ get flags() {
+ throw new CustomError();
+ },
+ get global() {
+ throw new Test262Error('global property should not be read');
+ },
+ get unicode() {
+ throw new Test262Error('unicode property should not be read');
+ }
+};
+
+assert.throws(CustomError, function() {
+ RegExp.prototype[Symbol.replace].call(obj);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/get-global-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/get-global-err.js
new file mode 100644
index 0000000000..dad8ab4b54
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/get-global-err.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error is thrown during retrieval of `global` property
+esid: sec-regexp.prototype-@@replace
+info: |
+ 1. Let _rx_ be the *this* value.
+ 2. If Type(_rx_) is not Object, throw a *TypeError* exception.
+ 3. Let _S_ be ? ToString(_string_).
+ 4. Let _lengthS_ be the number of code unit elements in _S_.
+ 5. Let _functionalReplace_ be IsCallable(_replaceValue_).
+ 6. If _functionalReplace_ is *false*, then
+ a. Set _replaceValue_ to ? ToString(_replaceValue_).
+ i. Let _flags_ be ? ToString(? Get(_rx_, *"flags"*)).
+
+ sec-get-regexp.prototype.flags get RegExp.prototype.flags
+ 6. Let _global_ be ToBoolean(? Get(_R_, *"global"*)).
+features: [Symbol.replace]
+---*/
+
+var re = /./;
+Object.defineProperty(re, 'global', {
+ get() {
+ throw new Test262Error();
+ }
+});
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.replace].call(re);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/get-unicode-error.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/get-unicode-error.js
new file mode 100644
index 0000000000..a8ef365fac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/get-unicode-error.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Errors thrown by `unicode` accessor are forwarded to the runtime
+esid: sec-regexp.prototype-@@replace
+info: |
+ 1. Let _rx_ be the *this* value.
+ 2. If Type(_rx_) is not Object, throw a *TypeError* exception.
+ 3. Let _S_ be ? ToString(_string_).
+ 4. Let _lengthS_ be the number of code unit elements in _S_.
+ 5. Let _functionalReplace_ be IsCallable(_replaceValue_).
+ 6. If _functionalReplace_ is *false*, then
+ a. Set _replaceValue_ to ? ToString(_replaceValue_).
+ i. Let _flags_ be ? ToString(? Get(_rx_, *"flags"*)).
+
+ sec-get-regexp.prototype.flags get RegExp.prototype.flags
+ 14. Let _unicode_ be ToBoolean(? Get(_R_, *"unicode"*)).
+features: [Symbol.replace]
+---*/
+
+var nonGlobalRe = /./;
+var globalRe = /./g;
+var accessor = function() {
+ throw new Test262Error();
+};
+Object.defineProperty(nonGlobalRe, 'unicode', {
+ get: accessor
+});
+Object.defineProperty(globalRe, 'unicode', {
+ get: accessor
+});
+
+assert.throws(Test262Error, function() {
+ nonGlobalRe[Symbol.replace]('', '');
+});
+
+assert.throws(Test262Error, function() {
+ globalRe[Symbol.replace]('', '');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/length.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/length.js
new file mode 100644
index 0000000000..fe89e2265b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/length.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 21.2.5.8
+description: RegExp.prototype[Symbol.replace] `length` property
+info: |
+ ES6 Section 17:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this value
+ is equal to the largest number of named arguments shown in the subclause
+ headings for the function description, including optional parameters.
+
+ [...]
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [Symbol.replace]
+---*/
+
+assert.sameValue(RegExp.prototype[Symbol.replace].length, 2);
+
+verifyNotEnumerable(RegExp.prototype[Symbol.replace], 'length');
+verifyNotWritable(RegExp.prototype[Symbol.replace], 'length');
+verifyConfigurable(RegExp.prototype[Symbol.replace], 'length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/match-failure.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/match-failure.js
new file mode 100644
index 0000000000..a0d5317e5b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/match-failure.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Return original string when no matches occur
+es6id: 21.2.5.8
+info: |
+ 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 12. Let done be false.
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+ b. ReturnIfAbrupt(result).
+ c. If result is null, set done to true.
+ [...]
+ 14. Let accumulatedResult be the empty String value.
+ 15. Let nextSourcePosition be 0.
+ [...]
+ 18. Return the String formed by concatenating the code units of
+ accumulatedResult with the substring of S consisting of the code units
+ from nextSourcePosition (inclusive) up through the final code unit of S
+ (inclusive).
+features: [Symbol.replace]
+---*/
+
+assert.sameValue(/x/[Symbol.replace]('abc', 'X'), 'abc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/name.js
new file mode 100644
index 0000000000..5d6dbb13e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/name.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 21.2.5.8
+description: RegExp.prototype[Symbol.replace] `name` property
+info: |
+ The value of the name property of this function is "[Symbol.replace]".
+
+ ES6 Section 17:
+
+ [...]
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [Symbol.replace]
+---*/
+
+assert.sameValue(RegExp.prototype[Symbol.replace].name, '[Symbol.replace]');
+
+verifyNotEnumerable(RegExp.prototype[Symbol.replace], 'name');
+verifyNotWritable(RegExp.prototype[Symbol.replace], 'name');
+verifyConfigurable(RegExp.prototype[Symbol.replace], 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/named-groups-fn.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/named-groups-fn.js
new file mode 100644
index 0000000000..5ef8030922
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/named-groups-fn.js
@@ -0,0 +1,61 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ "groups" value is passed as last argument of replacer unless it is undefined.
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 14. For each result in results, do
+ [...]
+ j. Let namedCaptures be ? Get(result, "groups").
+ k. If functionalReplace is true, then
+ [...]
+ iv. If namedCaptures is not undefined, then
+ 1. Append namedCaptures as the last element of replacerArgs.
+ v. Let replValue be ? Call(replaceValue, undefined, replacerArgs).
+features: [Symbol.replace, regexp-named-groups]
+---*/
+
+var matchGroups;
+var re = /./;
+re.exec = function() {
+ return {
+ length: 1,
+ 0: "a",
+ index: 0,
+ groups: matchGroups,
+ };
+};
+
+var replacerCalls = 0;
+var replacerLastArg;
+var replacer = function() {
+ replacerCalls++;
+ replacerLastArg = arguments[arguments.length - 1];
+};
+
+matchGroups = null;
+re[Symbol.replace]("a", replacer);
+assert.sameValue(replacerCalls, 1);
+assert.sameValue(replacerLastArg, matchGroups);
+
+matchGroups = undefined;
+re[Symbol.replace]("a", replacer);
+assert.sameValue(replacerCalls, 2);
+assert.sameValue(replacerLastArg, "a");
+
+matchGroups = 10;
+re[Symbol.replace]("a", replacer);
+assert.sameValue(replacerCalls, 3);
+assert.sameValue(replacerLastArg, matchGroups);
+
+matchGroups = {};
+re[Symbol.replace]("a", replacer);
+assert.sameValue(replacerCalls, 4);
+assert.sameValue(replacerLastArg, matchGroups);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/named-groups.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/named-groups.js
new file mode 100644
index 0000000000..731671bccd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/named-groups.js
@@ -0,0 +1,46 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-getsubstitution
+description: >
+ RegExp.prototype[Symbol.replace] works with named capture references as expected.
+ (string replacement)
+info: |
+ GetSubstitution ( matched, str, position, captures, namedCaptures, replacement )
+
+ Table: Replacement Text Symbol Substitutions
+
+ Unicode Characters: $<
+ Replacement text:
+ 1. If namedCaptures is undefined, the replacement text is the literal string $<.
+ 2. Else,
+ a. Assert: Type(namedCaptures) is Object.
+ b. Scan until the next > U+003E (GREATER-THAN SIGN).
+ c. If none is found, the replacement text is the String "$<".
+ d. Else,
+ i. Let groupName be the enclosed substring.
+ ii. Let capture be ? Get(namedCaptures, groupName).
+ iii. If capture is undefined, replace the text through > with the empty String.
+ iv. Otherwise, replace the text through > with ? ToString(capture).
+features: [Symbol.replace, regexp-named-groups]
+---*/
+
+assert.sameValue(/b/u[Symbol.replace]("abc", "$&$<food"), "ab$<foodc");
+assert.sameValue(/./g[Symbol.replace]("ab", "c$<foo>d"), "c$<foo>dc$<foo>d");
+assert.sameValue(/(b)./[Symbol.replace]("abc", "$<foo>$1"), "a$<foo>b");
+
+assert.sameValue(/(?<foo>.)(?<bar>.)/[Symbol.replace]("abc", "$<bar>$<foo>"), "bac");
+assert.sameValue(/(?<foo>.)(?<bar>.)/gu[Symbol.replace]("abc", "$2$<foo>$1"), "baac");
+assert.sameValue(/(?<foo>b)/u[Symbol.replace]("abc", "c$<bar>d"), "acdc");
+assert.sameValue(/(?<foo>.)/g[Symbol.replace]("abc", "$<$1>"), "");
+assert.sameValue(/(?<foo>b)/[Symbol.replace]("abc", "$<>"), "ac");
+assert.sameValue(/(?<foo>.)(?<bar>.)/g[Symbol.replace]("abc", "$2$1"), "bac");
+assert.sameValue(/(?<foo>b)/u[Symbol.replace]("abc", "$<foo"), "a$<fooc");
+assert.sameValue(/(?<foo>.)/gu[Symbol.replace]("abc", "$<bar>"), "");
+assert.sameValue(/(?<foo>b)/[Symbol.replace]("abc", "$$<foo>$&"), "a$<foo>bc");
+
+assert.sameValue(/(?<𝒜>b)/u[Symbol.replace]("abc", "d$<𝒜>$`"), "adbac");
+assert.sameValue(/(?<$𐒤>b)/gu[Symbol.replace]("abc", "$'$<$𐒤>d"), "acbdc");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/not-a-constructor.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/not-a-constructor.js
new file mode 100644
index 0000000000..8fe7bd03bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ RegExp.prototype[Symbol.replace] does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, Symbol, Symbol.replace, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(RegExp.prototype[Symbol.replace]),
+ false,
+ 'isConstructor(RegExp.prototype[Symbol.replace]) must return false'
+);
+
+assert.throws(TypeError, () => {
+ let re = new RegExp(''); new re[Symbol.replace]();
+}, '`let re = new RegExp(\'\'); new re[Symbol.replace]()` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/poisoned-stdlib.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/poisoned-stdlib.js
new file mode 100644
index 0000000000..891ddbabb4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/poisoned-stdlib.js
@@ -0,0 +1,45 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ Both functional and pattern replacement performs as expected with poisoned stdlib.
+features: [Symbol.iterator, Symbol.replace, regexp-named-groups]
+---*/
+
+assert(delete Array.prototype.concat);
+assert(delete Array.prototype.push);
+assert(delete Array.prototype[Symbol.iterator]);
+assert(delete Function.prototype.apply);
+assert(delete String.prototype.charAt);
+assert(delete String.prototype.charCodeAt);
+assert(delete String.prototype.indexOf);
+assert(delete String.prototype.slice);
+assert(delete String.prototype.substring);
+
+for (let i = 0; i < 5; ++i) {
+ Object.defineProperty(Array.prototype, i, {
+ get: function() {
+ throw new Test262Error(i + " getter should be unreachable.");
+ },
+ set: function(_value) {
+ throw new Test262Error(i + " setter should be unreachable.");
+ },
+ });
+}
+
+var str = "1a2";
+
+assert.sameValue(/a/[Symbol.replace](str, "$`b"), "11b2");
+assert.sameValue(/a/[Symbol.replace](str, "b$'"), "1b22");
+assert.sameValue(/a/[Symbol.replace](str, "$3b$33"), "1$3b$332");
+assert.sameValue(/(a)/[Symbol.replace](str, "$1b"), "1ab2");
+assert.sameValue(/(?<a>a)/[Symbol.replace](str, "$<a>b"), "1ab2");
+
+var replacer = function() {
+ return "b";
+};
+
+assert.sameValue(/a/[Symbol.replace](str, replacer), "1b2");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/prop-desc.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/prop-desc.js
new file mode 100644
index 0000000000..f2d00e5f77
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/prop-desc.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.8
+description: RegExp.prototype[Symbol.replace] property descriptor
+info: |
+ ES6 Section 17
+
+ Every other data property described in clauses 18 through 26 and in Annex
+ B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+ [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [Symbol.replace]
+---*/
+
+verifyNotEnumerable(RegExp.prototype, Symbol.replace);
+verifyWritable(RegExp.prototype, Symbol.replace);
+verifyConfigurable(RegExp.prototype, Symbol.replace);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/replace-with-trailing.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/replace-with-trailing.js
new file mode 100644
index 0000000000..18c994a784
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/replace-with-trailing.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Return value when replacement pattern does not match final code point
+es6id: 21.2.5.8
+info: |
+ [...]
+ 18. Return the String formed by concatenating the code units of
+ accumulatedResult with the substring of S consisting of the code units
+ from nextSourcePosition (inclusive) up through the final code unit of S
+ (inclusive).
+features: [Symbol.replace]
+---*/
+
+assert.sameValue(/abc/[Symbol.replace]('abcd', 'X'), 'Xd');
+assert.sameValue(/bc/[Symbol.replace]('abcd', 'X'), 'aXd');
+assert.sameValue(/c/[Symbol.replace]('abcd', 'X'), 'abXd');
+
+assert.sameValue(/ab/[Symbol.replace]('abcd', 'X'), 'Xcd');
+assert.sameValue(/b/[Symbol.replace]('abcd', 'X'), 'aXcd');
+
+assert.sameValue(/a/[Symbol.replace]('abcd', 'X'), 'Xbcd');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/replace-without-trailing.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/replace-without-trailing.js
new file mode 100644
index 0000000000..e52de7ba56
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/replace-without-trailing.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Return value when replacement pattern matches final code point
+es6id: 21.2.5.8
+info: |
+ [...]
+ 17. If nextSourcePosition ≥ lengthS, return accumulatedResult.
+features: [Symbol.replace]
+---*/
+
+assert.sameValue(/abcd/[Symbol.replace]('abcd', 'X'), 'X');
+assert.sameValue(/bcd/[Symbol.replace]('abcd', 'X'), 'aX');
+assert.sameValue(/cd/[Symbol.replace]('abcd', 'X'), 'abX');
+assert.sameValue(/d/[Symbol.replace]('abcd', 'X'), 'abcX');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-capture-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-capture-err.js
new file mode 100644
index 0000000000..e03a9a4300
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-capture-err.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error is thrown while type coercing `1` property of result
+es6id: 21.2.5.8
+info: |
+ [...]
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+ [...]
+ 16. Repeat, for each result in results,
+ [...]
+ l. Repeat while n ≤ nCaptures
+ i. Let capN be Get(result, ToString(n)).
+ ii. ReturnIfAbrupt(capN).
+ iii. If capN is not undefined, then
+ 1. Let capN be ToString(capN).
+ 2. ReturnIfAbrupt(capN).
+features: [Symbol.replace]
+---*/
+
+var r = /./;
+var uncoercibleValue = {
+ length: 2,
+ 1: {
+ toString: function() {
+ throw new Test262Error();
+ }
+ }
+};
+r.exec = function() {
+ return uncoercibleValue;
+};
+
+assert.throws(Test262Error, function() {
+ r[Symbol.replace]('a', 'b');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-capture.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-capture.js
new file mode 100644
index 0000000000..8ad783902e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-capture.js
@@ -0,0 +1,46 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ String coercion of "3" property of the value returned by RegExpExec.
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 11. Repeat, while done is false
+ a. Let result be ? RegExpExec(rx, S).
+ [...]
+ 14. For each result in results, do
+ [...]
+ i. Repeat, while n ≤ nCaptures
+ i. Let capN be ? Get(result, ! ToString(n)).
+ ii. If capN is not undefined, then
+ 1. Set capN to ? ToString(capN).
+ [...]
+features: [Symbol.replace]
+---*/
+
+var r = /./;
+var coercibleValue = {
+ length: 4,
+ index: 0,
+ 3: {
+ toString: function() {
+ return 'toString value';
+ },
+ valueOf: function() {
+ throw new Test262Error('This method should not be invoked.');
+ },
+ },
+};
+r.exec = function() {
+ return coercibleValue;
+};
+
+assert.sameValue(
+ r[Symbol.replace]('', 'foo[$3]bar'), 'foo[toString value]bar'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-groups-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-groups-err.js
new file mode 100644
index 0000000000..c006397d2c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-groups-err.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ Abrupt completion during coercion of "groups"
+ property of the value returned by RegExpExec.
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 14. For each result in results, do
+ [...]
+ j. Let namedCaptures be ? Get(result, "groups").
+ k. If functionalReplace is true, then
+ [...]
+ l. Else,
+ i. If namedCaptures is not undefined, then
+ 1. Set namedCaptures to ? ToObject(namedCaptures).
+features: [Symbol.replace, regexp-named-groups]
+---*/
+
+var r = /./;
+var coercibleValue = {
+ length: 1,
+ 0: '',
+ index: 0,
+ groups: null,
+};
+
+r.exec = function() {
+ return coercibleValue;
+};
+
+assert.throws(TypeError, function() {
+ r[Symbol.replace]('bar', '');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-groups-prop-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-groups-prop-err.js
new file mode 100644
index 0000000000..bb69475979
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-groups-prop-err.js
@@ -0,0 +1,69 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ Abrupt completion during coercion of value of "groups" object.
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 14. For each result in results, do
+ [...]
+ j. Let namedCaptures be ? Get(result, "groups").
+ k. If functionalReplace is true, then
+ [...]
+ l. Else,
+ [...]
+ ii. Let replacement be ? GetSubstitution(matched, S, position, captures, namedCaptures, replaceValue).
+
+ Runtime Semantics: GetSubstitution ( matched, str, position, captures, namedCaptures, replacement )
+
+ [...]
+ 11. Let result be the String value derived from replacement by copying code unit elements
+ from replacement to result while performing replacements as specified in Table 54.
+ These $ replacements are done left-to-right, and, once such a replacement is performed,
+ the new replacement text is not subject to further replacements.
+ 12. Return result.
+
+ Table 54: Replacement Text Symbol Substitutions
+
+ $<
+
+ 1. If namedCaptures is undefined, the replacement text is the String "$<".
+ 2. Else,
+ a. Assert: Type(namedCaptures) is Object.
+ b. Scan until the next > U+003E (GREATER-THAN SIGN).
+ c. If none is found, the replacement text is the String "$<".
+ d. Else,
+ i. Let groupName be the enclosed substring.
+ ii. Let capture be ? Get(namedCaptures, groupName).
+ iii. If capture is undefined, replace the text through > with the empty String.
+ iv. Otherwise, replace the text through > with ? ToString(capture).
+features: [Symbol.replace, regexp-named-groups]
+---*/
+
+var r = /./;
+var coercibleValue = {
+ length: 1,
+ 0: '',
+ index: 0,
+ groups: {
+ foo: {
+ toString: function() {
+ throw new Test262Error();
+ },
+ },
+ },
+};
+
+r.exec = function() {
+ return coercibleValue;
+};
+
+assert.throws(Test262Error, function() {
+ r[Symbol.replace]('a', '$<foo>');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-groups-prop.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-groups-prop.js
new file mode 100644
index 0000000000..4a2f731c76
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-groups-prop.js
@@ -0,0 +1,72 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ String coercion of "groups" object values returned by RegExpExec.
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 14. For each result in results, do
+ [...]
+ j. Let namedCaptures be ? Get(result, "groups").
+ k. If functionalReplace is true, then
+ [...]
+ l. Else,
+ [...]
+ ii. Let replacement be ? GetSubstitution(matched, S, position, captures, namedCaptures, replaceValue).
+
+ Runtime Semantics: GetSubstitution ( matched, str, position, captures, namedCaptures, replacement )
+
+ [...]
+ 11. Let result be the String value derived from replacement by copying code unit elements
+ from replacement to result while performing replacements as specified in Table 54.
+ These $ replacements are done left-to-right, and, once such a replacement is performed,
+ the new replacement text is not subject to further replacements.
+ 12. Return result.
+
+ Table 54: Replacement Text Symbol Substitutions
+
+ $<
+
+ 1. If namedCaptures is undefined, the replacement text is the String "$<".
+ 2. Else,
+ a. Assert: Type(namedCaptures) is Object.
+ b. Scan until the next > U+003E (GREATER-THAN SIGN).
+ c. If none is found, the replacement text is the String "$<".
+ d. Else,
+ i. Let groupName be the enclosed substring.
+ ii. Let capture be ? Get(namedCaptures, groupName).
+ iii. If capture is undefined, replace the text through > with the empty String.
+ iv. Otherwise, replace the text through > with ? ToString(capture).
+features: [Symbol.replace, regexp-named-groups]
+---*/
+
+var r = /./;
+var coercibleValue = {
+ length: 1,
+ 0: 'a',
+ index: 0,
+ groups: {
+ foo: {
+ toString: function() {
+ return 'toString value';
+ },
+ valueOf: function() {
+ throw new Test262Error('This method should not be invoked.');
+ },
+ },
+ bar: null,
+ },
+};
+
+r.exec = function() {
+ return coercibleValue;
+};
+
+assert.sameValue(r[Symbol.replace]('ab', '[$<foo>]'), '[toString value]b');
+assert.sameValue(r[Symbol.replace]('ab', '[$<bar>]'), '[null]b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-groups.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-groups.js
new file mode 100644
index 0000000000..db36533e3c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-groups.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ String coercion of "groups" property of the value returned by RegExpExec.
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 14. For each result in results, do
+ [...]
+ j. Let namedCaptures be ? Get(result, "groups").
+ k. If functionalReplace is true, then
+ [...]
+ l. Else,
+ i. If namedCaptures is not undefined, then
+ 1. Set namedCaptures to ? ToObject(namedCaptures).
+ ii. Let replacement be ? GetSubstitution(matched, S, position, captures, namedCaptures, replaceValue).
+features: [Symbol.replace, regexp-named-groups]
+---*/
+
+var r = /./;
+var coercibleValue = {
+ length: 1,
+ 0: 'b',
+ index: 1,
+ groups: '123',
+};
+
+r.exec = function() {
+ return coercibleValue;
+};
+
+assert.sameValue(r[Symbol.replace]('ab', '[$<length>]'), 'a[3]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-index-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-index-err.js
new file mode 100644
index 0000000000..9f7f177ee6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-index-err.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error is thrown while type coercing `index` property of
+ result
+es6id: 21.2.5.8
+info: |
+ [...]
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+ [...]
+ 16. Repeat, for each result in results,
+ [...]
+ g. Let position be ToInteger(Get(result, "index")).
+ h. ReturnIfAbrupt(position).
+features: [Symbol.replace]
+---*/
+
+var r = /./;
+var uncoercibleIndex = {
+ index: {
+ valueOf: function() {
+ throw new Test262Error();
+ }
+ }
+};
+r.exec = function() {
+ return uncoercibleIndex;
+};
+
+assert.throws(Test262Error, function() {
+ r[Symbol.replace]('a', 'b');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-index-undefined.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-index-undefined.js
new file mode 100644
index 0000000000..506b483703
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-index-undefined.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ Integer coercion of "index" property of the value returned by RegExpExec.
+ (undefined value)
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 14. For each result in results, do
+ [...]
+ e. Let position be ? ToInteger(? Get(result, "index")).
+ [...]
+
+ ToInteger ( argument )
+
+ 1. Let number be ? ToNumber(argument).
+ 2. If number is NaN, return +0.
+features: [Symbol.toPrimitive, Symbol.replace]
+---*/
+
+var index = {};
+var toPrimitiveHint;
+index[Symbol.toPrimitive] = function(hint) {
+ toPrimitiveHint = hint;
+};
+
+var r = /./;
+r.exec = function() {
+ return {
+ length: 1,
+ 0: 'a',
+ index: index,
+ };
+};
+
+assert.sameValue(r[Symbol.replace]('ab', '$`'), 'b');
+assert.sameValue(toPrimitiveHint, 'number');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-index.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-index.js
new file mode 100644
index 0000000000..58e401564c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-index.js
@@ -0,0 +1,45 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ Integer coercion of "index" property of the value returned by RegExpExec.
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 14. For each result in results, do
+ [...]
+ e. Let position be ? ToInteger(? Get(result, "index")).
+ [...]
+ k. If functionalReplace is true, then
+ i. Let replacerArgs be « matched ».
+ ii. Append in list order the elements of captures to the end of the List replacerArgs.
+ iii. Append position and S to replacerArgs.
+ [...]
+ v. Let replValue be ? Call(replaceValue, undefined, replacerArgs).
+features: [Symbol.replace]
+---*/
+
+var r = /./;
+var coercibleIndex = {
+ length: 1,
+ 0: '',
+ index: {
+ valueOf: function() {
+ return 2.9;
+ },
+ },
+};
+r.exec = function() {
+ return coercibleIndex;
+};
+
+var replacer = function(_matched, position) {
+ return position;
+};
+
+assert.sameValue(r[Symbol.replace]('abcd', replacer), 'ab2cd');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-length-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-length-err.js
new file mode 100644
index 0000000000..2123cb3b17
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-length-err.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error is thrown while type coercing `length` property of
+ result
+es6id: 21.2.5.8
+info: |
+ [...]
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+ [...]
+ 16. Repeat, for each result in results,
+ a. Let nCaptures be ToLength(Get(result, "length")).
+ b. ReturnIfAbrupt(nCaptures).
+features: [Symbol.replace]
+---*/
+
+var r = /./;
+var uncoercibleLength = {
+ length: {
+ valueOf: function() {
+ throw new Test262Error();
+ }
+ }
+};
+r.exec = function() {
+ return uncoercibleLength;
+};
+
+assert.throws(Test262Error, function() {
+ r[Symbol.replace]('a', 'b');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-length.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-length.js
new file mode 100644
index 0000000000..ce35f50bc8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-length.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ Type coercion of "length" property of the value returned by RegExpExec.
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 14. For each result in results, do
+ a. Let nCaptures be ? LengthOfArrayLike(result).
+ [...]
+features: [Symbol.replace]
+---*/
+
+var r = /./;
+var coercibleIndex = {
+ length: {
+ valueOf: function() {
+ return 3.9;
+ },
+ },
+ 0: '',
+ 1: 'foo',
+ 2: 'bar',
+ 3: 'baz',
+ index: 0,
+};
+r.exec = function() {
+ return coercibleIndex;
+};
+
+assert.sameValue(r[Symbol.replace]('', '$1$2$3'), 'foobar$3');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-matched-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-matched-err.js
new file mode 100644
index 0000000000..6e001de0b0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-matched-err.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error is thrown while type coercing `0` property of result
+es6id: 21.2.5.8
+info: |
+ [...]
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+ [...]
+ 16. Repeat, for each result in results,
+ [...]
+ d. Let matched be ToString(Get(result, "0")).
+ e. ReturnIfAbrupt(matched).
+features: [Symbol.replace]
+---*/
+
+var r = /./;
+var uncoercibleValue = {
+ 0: {
+ toString: function() {
+ throw new Test262Error();
+ }
+ }
+};
+r.exec = function() {
+ return uncoercibleValue;
+};
+
+assert.throws(Test262Error, function() {
+ r[Symbol.replace]('a', 'b');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-matched-global.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-matched-global.js
new file mode 100644
index 0000000000..05776dd56c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-matched-global.js
@@ -0,0 +1,55 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ String coercion of "0" property of the value returned by RegExpExec.
+ (global RegExp)
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 11. Repeat, while done is false
+ a. Let result be ? RegExpExec(rx, S).
+ b. If result is null, set done to true.
+ c. Else,
+ i. Append result to the end of results.
+ ii. If global is false, set done to true.
+ iii. Else,
+ 1. Let matchStr be ? ToString(? Get(result, "0")).
+ 2. If matchStr is the empty String, then
+ a. Let thisIndex be ? ToLength(? Get(rx, "lastIndex")).
+ b. Let nextIndex be AdvanceStringIndex(S, thisIndex, fullUnicode).
+ c. Perform ? Set(rx, "lastIndex", nextIndex, true).
+features: [Symbol.replace]
+---*/
+
+var r = /./g;
+var coercibleValueWasReturned = false;
+var coercibleValue = {
+ length: 1,
+ 0: {
+ toString: function() {
+ return '';
+ },
+ valueOf: function() {
+ throw new Test262Error('This method should not be invoked.');
+ },
+ },
+ index: 0,
+};
+
+r.exec = function() {
+ if (coercibleValueWasReturned) {
+ return null;
+ }
+
+ coercibleValueWasReturned = true;
+ return coercibleValue;
+};
+
+assert.sameValue(r[Symbol.replace]('', 'foo'), 'foo');
+assert.sameValue(r.lastIndex, 1);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-matched.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-matched.js
new file mode 100644
index 0000000000..7d0ba81931
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-coerce-matched.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ String coercion of "0" property of the value returned by RegExpExec.
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 11. Repeat, while done is false
+ a. Let result be ? RegExpExec(rx, S).
+ [...]
+ 14. For each result in results, do
+ [...]
+ c. Let matched be ? ToString(? Get(result, "0")).
+features: [Symbol.replace]
+---*/
+
+var r = /./;
+var coercibleValue = {
+ length: 1,
+ 0: {
+ toString: function() {
+ return 'toString value';
+ },
+ valueOf: function() {
+ throw new Test262Error('This method should not be invoked.');
+ },
+ },
+ index: 0,
+};
+r.exec = function() {
+ return coercibleValue;
+};
+
+assert.sameValue(
+ r[Symbol.replace]('', 'foo[$&]bar'), 'foo[toString value]bar'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-capture-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-capture-err.js
new file mode 100644
index 0000000000..d2ec490339
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-capture-err.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error is thrown while accessing `1` property of result
+es6id: 21.2.5.8
+info: |
+ [...]
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+ [...]
+ 16. Repeat, for each result in results,
+ [...]
+ l. Repeat while n ≤ nCaptures
+ i. Let capN be Get(result, ToString(n)).
+ ii. ReturnIfAbrupt(capN).
+features: [Symbol.replace]
+---*/
+
+var r = /./;
+var poisonedValue = {
+ length: 2,
+ get 1() {
+ throw new Test262Error();
+ }
+};
+r.exec = function() {
+ return poisonedValue;
+};
+
+assert.throws(Test262Error, function() {
+ r[Symbol.replace]('a', 'b');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-groups-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-groups-err.js
new file mode 100644
index 0000000000..808cb84b15
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-groups-err.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ Abrupt completion during lookup of "groups"
+ property of the value returned by RegExpExec.
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 14. For each result in results, do
+ [...]
+ j. Let namedCaptures be ? Get(result, "groups").
+features: [Symbol.replace, regexp-named-groups]
+---*/
+
+var r = /./;
+var coercibleValue = {
+ length: 0,
+ index: 0,
+ get groups() {
+ throw new Test262Error();
+ },
+};
+
+r.exec = function() {
+ return coercibleValue;
+};
+
+assert.throws(Test262Error, function() {
+ r[Symbol.replace]('a', '$<foo>');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-groups-prop-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-groups-prop-err.js
new file mode 100644
index 0000000000..b4103c1ed5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-groups-prop-err.js
@@ -0,0 +1,64 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@replace
+description: >
+ Abrupt completion during lookup of value of "groups" object.
+info: |
+ RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 14. For each result in results, do
+ [...]
+ j. Let namedCaptures be ? Get(result, "groups").
+ k. If functionalReplace is true, then
+ [...]
+ l. Else,
+ [...]
+ ii. Let replacement be ? GetSubstitution(matched, S, position, captures, namedCaptures, replaceValue).
+
+ Runtime Semantics: GetSubstitution ( matched, str, position, captures, namedCaptures, replacement )
+
+ [...]
+ 11. Let result be the String value derived from replacement by copying code unit elements
+ from replacement to result while performing replacements as specified in Table 54.
+ These $ replacements are done left-to-right, and, once such a replacement is performed,
+ the new replacement text is not subject to further replacements.
+ 12. Return result.
+
+ Table 54: Replacement Text Symbol Substitutions
+
+ $<
+
+ 1. If namedCaptures is undefined, the replacement text is the String "$<".
+ 2. Else,
+ a. Assert: Type(namedCaptures) is Object.
+ b. Scan until the next > U+003E (GREATER-THAN SIGN).
+ c. If none is found, the replacement text is the String "$<".
+ d. Else,
+ i. Let groupName be the enclosed substring.
+ ii. Let capture be ? Get(namedCaptures, groupName).
+features: [Symbol.replace, regexp-named-groups]
+---*/
+
+var r = /./;
+var coercibleValue = {
+ length: 0,
+ index: 0,
+ groups: {
+ get foo() {
+ throw new Test262Error();
+ },
+ },
+};
+
+r.exec = function() {
+ return coercibleValue;
+};
+
+assert.throws(Test262Error, function() {
+ r[Symbol.replace]('a', '$<foo>');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-index-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-index-err.js
new file mode 100644
index 0000000000..9114a3ab5f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-index-err.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error is thrown while accessing `index` property of result
+es6id: 21.2.5.8
+info: |
+ [...]
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+ [...]
+ 16. Repeat, for each result in results,
+ [...]
+ g. Let position be ToInteger(Get(result, "index")).
+ h. ReturnIfAbrupt(position).
+features: [Symbol.replace]
+---*/
+
+var r = /./;
+var poisonedIndex = {
+ get index() {
+ throw new Test262Error();
+ }
+};
+r.exec = function() {
+ return poisonedIndex;
+};
+
+assert.throws(Test262Error, function() {
+ r[Symbol.replace]('a', 'b');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-length-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-length-err.js
new file mode 100644
index 0000000000..9f74da963a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-length-err.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error is thrown while accessing `length` property of result
+es6id: 21.2.5.8
+info: |
+ [...]
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+ [...]
+ 16. Repeat, for each result in results,
+ a. Let nCaptures be ToLength(Get(result, "length")).
+ b. ReturnIfAbrupt(nCaptures).
+features: [Symbol.replace]
+---*/
+
+var r = /./;
+var poisonedLength = {
+ get length() {
+ throw new Test262Error();
+ }
+};
+r.exec = function() {
+ return poisonedLength;
+};
+
+assert.throws(Test262Error, function() {
+ r[Symbol.replace]('a', 'b');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-matched-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-matched-err.js
new file mode 100644
index 0000000000..c38b17596e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/result-get-matched-err.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior when error is thrown while accessing `0` property of result
+es6id: 21.2.5.8
+info: |
+ [...]
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+ [...]
+ 16. Repeat, for each result in results,
+ [...]
+ d. Let matched be ToString(Get(result, "0")).
+ e. ReturnIfAbrupt(matched).
+features: [Symbol.replace]
+---*/
+
+var r = /./;
+var poisonedValue = {
+ get 0() {
+ throw new Test262Error();
+ }
+};
+r.exec = function() {
+ return poisonedValue;
+};
+
+assert.throws(Test262Error, function() {
+ r[Symbol.replace]('a', 'b');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-after.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-after.js
new file mode 100644
index 0000000000..92dcae5319
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-after.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Substitution pattern: text after match
+es6id: 21.2.5.8
+info: |
+ 16. Repeat, for each result in results,
+ [...]
+ m. If functionalReplace is true, then
+ [...]
+ n. Else,
+ i. Let replacement be GetSubstitution(matched, S, position,
+ captures, replaceValue).
+ [...]
+
+ 21.1.3.14.1 Runtime Semantics: GetSubstitution
+
+ Code units: 0x0024, 0x0027
+
+ Unicode Characters: $'
+
+ Replacement text:
+ If tailPos ≥ stringLength, the replacement is the empty String. Otherwise
+ the replacement is the substring of str that starts at index tailPos and
+ continues to the end of str.
+features: [Symbol.replace]
+---*/
+
+assert.sameValue(/c/[Symbol.replace]('abc', '[$\']'), 'ab[]');
+assert.sameValue(/b/[Symbol.replace]('abc', '[$\']'), 'a[c]c');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-before.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-before.js
new file mode 100644
index 0000000000..71d88fb145
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-before.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Substitution pattern: text before match
+es6id: 21.2.5.8
+info: |
+ 16. Repeat, for each result in results,
+ [...]
+ m. If functionalReplace is true, then
+ [...]
+ n. Else,
+ i. Let replacement be GetSubstitution(matched, S, position,
+ captures, replaceValue).
+ [...]
+
+ 21.1.3.14.1 Runtime Semantics: GetSubstitution
+
+ Code units: 0x0024, 0x0060
+
+ Unicode Characters: $`
+
+ Replacement text:
+ If position is 0, the replacement is the empty String. Otherwise the
+ replacement is the substring of str that starts at index 0 and whose last
+ code unit is at index `position-1`.
+features: [Symbol.replace]
+---*/
+
+assert.sameValue(/a/[Symbol.replace]('abc', '[$`]'), '[]bc');
+assert.sameValue(/b/[Symbol.replace]('abc', '[$`]'), 'a[a]c');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-capture-idx-1.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-capture-idx-1.js
new file mode 100644
index 0000000000..bd0cc5b6e8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-capture-idx-1.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Substitution pattern: one-digit capturing group reference
+es6id: 21.2.5.8
+info: |
+ 16. Repeat, for each result in results,
+ [...]
+ m. If functionalReplace is true, then
+ [...]
+ n. Else,
+ i. Let replacement be GetSubstitution(matched, S, position,
+ captures, replaceValue).
+ [...]
+
+ 21.1.3.14.1 Runtime Semantics: GetSubstitution
+
+ Code units:
+ 0x0024, N
+ Where 0x0031 ≤ N ≤ 0x0039
+
+ Unicode Characters:
+ $n where
+ n is one of 1 2 3 4 5 6 7 8 9 and $n is not followed by a decimal digit
+
+ Replacement text:
+ The nth element of captures, where n is a single digit in the range 1 to 9.
+ If n≤m and the nth element of captures is undefined, use the empty String
+ instead. If n>m, no replacement is done.
+features: [Symbol.replace]
+---*/
+
+assert.sameValue(/b(c)(z)?(.)/[Symbol.replace]('abcde', '[$1$2$3]'), 'a[cd]e');
+
+assert.sameValue(/b(c)(z)?(.)/[Symbol.replace]('abcde', '[$1$2$3$4$0]'), 'a[cd$4$0]e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-capture-idx-2.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-capture-idx-2.js
new file mode 100644
index 0000000000..b9138d009d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-capture-idx-2.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Substitution pattern: two-digit capturing group reference
+es6id: 21.2.5.8
+info: |
+ 16. Repeat, for each result in results,
+ [...]
+ m. If functionalReplace is true, then
+ [...]
+ n. Else,
+ i. Let replacement be GetSubstitution(matched, S, position,
+ captures, replaceValue).
+ [...]
+
+ 21.1.3.14.1 Runtime Semantics: GetSubstitution
+
+ Code units:
+ 0x0024, N, N
+ Where 0x0030 ≤ N ≤ 0x0039
+
+ Unicode Characters:
+ $nn where
+ n is one of 0 1 2 3 4 5 6 7 8 9
+
+ Replacement text:
+ The nnth element of captures, where nn is a two-digit decimal number in the
+ range 01 to 99. If nn≤m and the nnth element of captures is undefined, use
+ the empty String instead. If nn is 00 or nn>m, no replacement is done.
+features: [Symbol.replace]
+---*/
+
+assert.sameValue(
+ /b(c)(z)?(.)/[Symbol.replace]('abcde', '[$01$02$03]'), 'a[cd]e'
+);
+
+assert.sameValue(
+ /b(c)(z)?(.)/[Symbol.replace]('abcde', '[$01$02$03$04$00]'), 'a[cd$04$00]e'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-dollar.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-dollar.js
new file mode 100644
index 0000000000..946e33e2d8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-dollar.js
@@ -0,0 +1,45 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Substitution pattern: dollar sign
+es6id: 21.2.5.8
+info: |
+ 16. Repeat, for each result in results,
+ [...]
+ m. If functionalReplace is true, then
+ [...]
+ n. Else,
+ i. Let replacement be GetSubstitution(matched, S, position,
+ captures, replaceValue).
+ [...]
+
+ 21.1.3.14.1 Runtime Semantics: GetSubstitution
+
+ Code units: 0x0024, 0x0024
+ Unicode Characters: $$
+ Replacement text: $
+
+ [...]
+
+ Code units: 0x0024
+ Unicode Characters: $ in any context that does not match any of the above.
+ Replacement text: $
+features: [Symbol.replace]
+---*/
+
+assert.sameValue(/./[Symbol.replace]('abc', '$$'), '$bc', '"escaped" version');
+assert.sameValue(
+ /./[Symbol.replace]('abc', '$'), '$bc', '"unescaped" version'
+);
+assert.sameValue(
+ /./[Symbol.replace]('abc', '\\$'), '\\$bc', 'backslash-prefixed'
+);
+assert.sameValue(
+ /./[Symbol.replace]('abc', '$$$'),
+ '$$bc',
+ '"escaped" followed by "unuescaped"'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-matched.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-matched.js
new file mode 100644
index 0000000000..67438ee100
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/subst-matched.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Substitution pattern: matched string
+es6id: 21.2.5.8
+info: |
+ 16. Repeat, for each result in results,
+ [...]
+ m. If functionalReplace is true, then
+ [...]
+ n. Else,
+ i. Let replacement be GetSubstitution(matched, S, position,
+ captures, replaceValue).
+ [...]
+
+ 21.1.3.14.1 Runtime Semantics: GetSubstitution
+
+ Code units: 0x0024, 0x0026
+ Unicode Characters: $&
+ Replacement text: matched
+features: [Symbol.replace]
+---*/
+
+assert.sameValue(/.4?./[Symbol.replace]('abc', '[$&]'), '[ab]c');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/this-val-non-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/this-val-non-obj.js
new file mode 100644
index 0000000000..2d840e32be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/this-val-non-obj.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: The `this` value must be an object
+es6id: 21.2.5.8
+info: |
+ 1. Let rx be the this value.
+ 2. If Type(rx) is not Object, throw a TypeError exception.
+features: [Symbol.replace]
+---*/
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.replace].call();
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.replace].call(undefined);
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.replace].call(null);
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.replace].call(true);
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.replace].call('string');
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.replace].call(Symbol.replace);
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.replace].call(86);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/u-advance-after-empty.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/u-advance-after-empty.js
new file mode 100644
index 0000000000..69d57d61fb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/u-advance-after-empty.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: lastIndex is advanced according to width of astral symbols
+es6id: 21.2.5.8
+info: |
+ 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 10. If global is true, then
+ a. Let fullUnicode be ToBoolean(Get(rx, "unicode")).
+ b. ReturnIfAbrupt(fullUnicode).
+ [...]
+ 13. Repeat, while done is false
+ [...]
+ d. Else result is not null,
+ [...]
+ iii. Else,
+ [...]
+ 3. If matchStr is the empty String, then
+ [...]
+ c. Let nextIndex be AdvanceStringIndex(S, thisIndex,
+ fullUnicode).
+ d. Let setStatus be Set(rx, "lastIndex", nextIndex, true).
+features: [Symbol.replace]
+---*/
+
+var str = /^|\udf06/ug[Symbol.replace]('\ud834\udf06', 'XXX');
+assert.sameValue(str, 'XXX\ud834\udf06');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-fail-global-return.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-fail-global-return.js
new file mode 100644
index 0000000000..69248ba6a9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-fail-global-return.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Replaces consecutive matches when the `g` flag is present
+es6id: 21.2.5.8
+info: |
+ 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+ b. ReturnIfAbrupt(result).
+ c. If result is null, set done to true.
+ d. Else result is not null,
+ i. Append result to the end of results.
+ ii. If global is false, set done to true.
+ iii. Else,
+ 1. Let matchStr be ToString(Get(result, "0")).
+ [...]
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ b. Let r be matcher(S, lastIndex).
+ c. If r is failure, then
+ i. If sticky is true, then
+ [...]
+ 3. Return null.
+features: [Symbol.replace]
+---*/
+
+assert.sameValue(/a/yg[Symbol.replace]('aaba', 'x'), 'xxba');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-fail-lastindex-no-write.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-fail-lastindex-no-write.js
new file mode 100644
index 0000000000..3c2cae7431
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-fail-lastindex-no-write.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Match failure with non-writable `lastIndex` property
+es6id: 21.2.5.8
+info: |
+ 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ b. Let r be matcher(S, lastIndex).
+ c. If r is failure, then
+ i. If sticky is true, then
+ 1. Let setStatus be Set(R, "lastIndex", 0, true).
+ 2. ReturnIfAbrupt(setStatus).
+features: [Symbol.replace]
+---*/
+
+var r = /c/y;
+Object.defineProperty(r, 'lastIndex', {
+ writable: false
+});
+
+assert.throws(TypeError, function() {
+ r[Symbol.replace]('abc', 'x');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-fail-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-fail-lastindex.js
new file mode 100644
index 0000000000..d469580c81
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-fail-lastindex.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Resets the `lastIndex` property to zero after a match failure
+es6id: 21.2.5.8
+info: |
+ 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ b. Let r be matcher(S, lastIndex).
+ c. If r is failure, then
+ i. If sticky is true, then
+ 1. Let setStatus be Set(R, "lastIndex", 0, true).
+features: [Symbol.replace]
+---*/
+
+var r = /c/y;
+r.lastIndex = 1;
+
+r[Symbol.replace]('abc', 'x');
+
+assert.sameValue(r.lastIndex, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-fail-return.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-fail-return.js
new file mode 100644
index 0000000000..b836ce2851
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-fail-return.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Stops match execution after first match failure
+es6id: 21.2.5.8
+info: |
+ 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ b. Let r be matcher(S, lastIndex).
+ c. If r is failure, then
+ i. If sticky is true, then
+ [...]
+ 3. Return null.
+features: [Symbol.replace]
+---*/
+
+assert.sameValue(/b/y[Symbol.replace]('ab', 'x'), 'ab');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-init-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-init-lastindex.js
new file mode 100644
index 0000000000..1c71ab2f6d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-init-lastindex.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Honors initial value of the `lastIndex` property
+es6id: 21.2.5.8
+info: |
+ 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ 9. ReturnIfAbrupt(sticky).
+ 10. If global is false and sticky is false, let lastIndex be 0.
+features: [Symbol.replace]
+---*/
+
+var r = /./y;
+r.lastIndex = 1;
+assert.sameValue(r[Symbol.replace]('aaa', 'x'), 'axa');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-set-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-set-lastindex.js
new file mode 100644
index 0000000000..d97b19cbab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.replace/y-set-lastindex.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Sets the `lastIndex` property to the end index of the first match
+es6id: 21.2.5.8
+info: |
+ 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
+
+ [...]
+ 13. Repeat, while done is false
+ a. Let result be RegExpExec(rx, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 18. If global is true or sticky is true,
+ a. Let setStatus be Set(R, "lastIndex", e, true).
+features: [Symbol.replace]
+---*/
+
+var r = /abc/y;
+
+r[Symbol.replace]('abc', 'x');
+
+assert.sameValue(r.lastIndex, 3);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/coerce-string-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/coerce-string-err.js
new file mode 100644
index 0000000000..a0be9089cd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/coerce-string-err.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.9
+description: Behavior when error thrown while coercing `string` argument
+info: |
+ [...]
+ 3. Let S be ToString(string).
+ 4. ReturnIfAbrupt(S).
+features: [Symbol.search]
+---*/
+
+var uncoercibleObj = {
+ toString: function() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ /./[Symbol.search](uncoercibleObj);
+});
+
+assert.throws(TypeError, function() {
+ /./[Symbol.search](Symbol.search);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/coerce-string.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/coerce-string.js
new file mode 100644
index 0000000000..b649f6f1bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/coerce-string.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.9
+description: String coercion of `string` argument
+info: |
+ [...]
+ 3. Let S be ToString(string).
+ [...]
+features: [Symbol.search]
+---*/
+
+var obj = {
+ toString: function() {
+ return 'toString value';
+ }
+};
+
+assert.sameValue(/ring/[Symbol.search](obj), 4);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/cstm-exec-return-index.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/cstm-exec-return-index.js
new file mode 100644
index 0000000000..01410d1bdb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/cstm-exec-return-index.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 Mike Pennisi. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.9
+description: Index value returned by a custom `exec` method
+info: |
+ [...]
+ 9. Let result be RegExpExec(rx, S).
+ [...]
+ 14. Return Get(result, "index").
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 5. If IsCallable(exec) is true, then
+ a. Let result be Call(exec, R, «S»).
+ b. ReturnIfAbrupt(result).
+ c. If Type(result) is neither Object or Null, throw a TypeError
+ exception.
+ d. Return result.
+
+features: [Symbol.search]
+---*/
+
+var fakeRe = {
+ exec: function() {
+ return { index: 86 };
+ }
+};
+
+assert.sameValue(RegExp.prototype[Symbol.search].call(fakeRe, 'abc'), 86);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/cstm-exec-return-invalid.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/cstm-exec-return-invalid.js
new file mode 100644
index 0000000000..81d509c332
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/cstm-exec-return-invalid.js
@@ -0,0 +1,58 @@
+// Copyright (C) 2015 Mike Pennisi. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.9
+description: Behavior when invalid value is returned by custom `exec` method
+info: |
+ [...]
+ 9. Let result be RegExpExec(rx, S).
+ 10. ReturnIfAbrupt(result).
+ [...]
+ 14. Return Get(result, "index").
+
+ 21.2.5.2.1 Runtime Semantics: RegExpExec ( R, S )
+
+ [...]
+ 5. If IsCallable(exec) is true, then
+ a. Let result be Call(exec, R, «S»).
+ b. ReturnIfAbrupt(result).
+ c. If Type(result) is neither Object or Null, throw a TypeError
+ exception.
+
+features: [Symbol, Symbol.search]
+---*/
+
+var retVal;
+var fakeRe = {
+ exec: function() {
+ return retVal;
+ }
+};
+
+retVal = undefined;
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.search].call(fakeRe, 'a');
+});
+
+retVal = 86;
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.search].call(fakeRe, 'a');
+});
+
+retVal = 'string';
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.search].call(fakeRe, 'a');
+});
+
+retVal = true;
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.search].call(fakeRe, 'a');
+});
+
+retVal = Symbol();
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.search].call(fakeRe, 'a');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/failure-return-val.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/failure-return-val.js
new file mode 100644
index 0000000000..466a65a52c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/failure-return-val.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.9
+description: Return value when no match is found
+info: |
+ [...]
+ 13. If result is null, return –1.
+features: [Symbol.search]
+---*/
+
+assert.sameValue(/z/[Symbol.search]('a'), -1);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/get-lastindex-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/get-lastindex-err.js
new file mode 100644
index 0000000000..523cd80f97
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/get-lastindex-err.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.9
+description: Behavior when error thrown while accessing `lastIndex` property
+info: |
+ [...]
+ 5. Let previousLastIndex be Get(rx, "lastIndex").
+ 6. ReturnIfAbrupt(previousLastIndex).
+features: [Symbol.search]
+---*/
+
+var poisonedLastIndex = {
+ get lastIndex() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.search].call(poisonedLastIndex);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/lastindex-no-restore.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/lastindex-no-restore.js
new file mode 100644
index 0000000000..066d67da3e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/lastindex-no-restore.js
@@ -0,0 +1,67 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.9
+description: Behavior when some lastIndex writes should be skipped.
+info: |
+ [...]
+ 4. Let previousLastIndex be ? Get(rx, "lastIndex").
+ 5. If SameValue(previousLastIndex, 0) is false, then
+ a. Perform ? Set(rx, "lastIndex", 0, true).
+ [...]
+ 7. Let currentLastIndex be ? Get(rx, "lastIndex").
+ 8. If SameValue(currentLastIndex, previousLastIndex) is false, then
+ a. Perform ? Set(rx, "lastIndex", previousLastIndex, true).
+ [...]
+features: [Symbol.search]
+---*/
+
+var lastIndexValue;
+var lastIndexValueAfterExec;
+var lastIndexReads;
+var lastIndexWrites;
+var execCallCount;
+var result;
+
+var fakeRe = {
+ get lastIndex() {
+ lastIndexReads++;
+ return lastIndexValue;
+ },
+ set lastIndex(_) {
+ lastIndexWrites++;
+ lastIndexValue = _;
+ },
+ exec: function() {
+ execCallCount++;
+ lastIndexValue = lastIndexValueAfterExec;
+ return null;
+ }
+};
+
+function reset(value, valueAfterExec) {
+ lastIndexValue = value;
+ lastIndexValueAfterExec = valueAfterExec;
+ lastIndexReads = 0;
+ lastIndexWrites = 0;
+ execCallCount = 0;
+}
+
+reset(0, 0);
+result = RegExp.prototype[Symbol.search].call(fakeRe);
+assert.sameValue(result, -1);
+assert.sameValue(lastIndexValue, 0);
+assert.sameValue(lastIndexReads, 2);
+assert.sameValue(lastIndexWrites, 0);
+assert.sameValue(execCallCount, 1);
+
+reset(420, 420);
+result = RegExp.prototype[Symbol.search].call(fakeRe);
+assert.sameValue(result, -1);
+assert.sameValue(lastIndexValue, 420);
+assert.sameValue(lastIndexReads, 2);
+assert.sameValue(lastIndexWrites, 1);
+assert.sameValue(execCallCount, 1);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/length.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/length.js
new file mode 100644
index 0000000000..86a0b3051c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/length.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 21.2.5.9
+description: RegExp.prototype[Symbol.search] `length` property
+info: |
+ ES6 section 17:
+
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this value
+ is equal to the largest number of named arguments shown in the subclause
+ headings for the function description, including optional parameters.
+
+ [...]
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+features: [Symbol.search]
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(RegExp.prototype[Symbol.search].length, 1);
+
+verifyNotEnumerable(RegExp.prototype[Symbol.search], 'length');
+verifyNotWritable(RegExp.prototype[Symbol.search], 'length');
+verifyConfigurable(RegExp.prototype[Symbol.search], 'length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/match-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/match-err.js
new file mode 100644
index 0000000000..6d541aebea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/match-err.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.9
+description: Behavior when error thrown while executing match
+info: |
+ [...]
+ 9. Let result be RegExpExec(rx, S).
+ 10. ReturnIfAbrupt(result).
+features: [Symbol.search]
+---*/
+
+var fakeRe = {
+ lastIndex: 86,
+ exec: function() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.search].call(fakeRe);
+});
+
+assert.sameValue(fakeRe.lastIndex, 0, '`lastIndex` property is not restored');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/name.js
new file mode 100644
index 0000000000..08a4452f48
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/name.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 21.2.5.9
+description: RegExp.prototype[Symbol.search] `name` property
+info: |
+ The value of the name property of this function is "[Symbol.search]".
+
+ ES6 Section 17:
+
+ [...]
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+features: [Symbol.search]
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(RegExp.prototype[Symbol.search].name, '[Symbol.search]');
+
+verifyNotEnumerable(RegExp.prototype[Symbol.search], 'name');
+verifyNotWritable(RegExp.prototype[Symbol.search], 'name');
+verifyConfigurable(RegExp.prototype[Symbol.search], 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/not-a-constructor.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/not-a-constructor.js
new file mode 100644
index 0000000000..0403b2e6da
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ RegExp.prototype[Symbol.search] does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, Symbol, Symbol.search, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(RegExp.prototype[Symbol.search]),
+ false,
+ 'isConstructor(RegExp.prototype[Symbol.search]) must return false'
+);
+
+assert.throws(TypeError, () => {
+ let re = new RegExp(''); new re[Symbol.search]();
+}, '`let re = new RegExp(\'\'); new re[Symbol.search]()` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/prop-desc.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/prop-desc.js
new file mode 100644
index 0000000000..c38f0f62d8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/prop-desc.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.9
+description: RegExp.prototype[Symbol.search] property descriptor
+info: |
+ ES6 Section 17
+
+ Every other data property described in clauses 18 through 26 and in Annex
+ B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+ [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [Symbol.search]
+---*/
+
+verifyNotEnumerable(RegExp.prototype, Symbol.search);
+verifyWritable(RegExp.prototype, Symbol.search);
+verifyConfigurable(RegExp.prototype, Symbol.search);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-init-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-init-err.js
new file mode 100644
index 0000000000..9df6ae6fc3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-init-err.js
@@ -0,0 +1,54 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.9
+description: >
+ Behavior when error thrown while initially setting `lastIndex` property
+info: |
+ [...]
+ 7. Let status be Set(rx, "lastIndex", 0, true).
+ 8. ReturnIfAbrupt(status).
+features: [Symbol.search]
+---*/
+
+var callCount;
+var poisonedLastIndex = {
+ get lastIndex() {
+ callCount += 1;
+ },
+ set lastIndex(_) {
+ throw new Test262Error();
+ }
+};
+var nonWritableLastIndex = {
+ get lastIndex() {
+ callCount += 1;
+ },
+ // This method defined to avoid false positives from unrelated TypeErrors
+ exec: function() {
+ return null;
+ }
+};
+
+callCount = 0;
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.search].call(poisonedLastIndex);
+});
+assert.sameValue(
+ callCount,
+ 1,
+ 'Property value was accessed before being set ("poisoned" lastIndex)'
+);
+
+callCount = 0;
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.search].call(nonWritableLastIndex);
+});
+assert.sameValue(
+ callCount,
+ 1,
+ 'Property value was accessed before being set (non-writable lastIndex)'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-init-samevalue.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-init-samevalue.js
new file mode 100644
index 0000000000..155420d028
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-init-samevalue.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@search
+description: >
+ `previousLastIndex` value is compared using SameValue.
+info: |
+ RegExp.prototype [ @@search ] ( string )
+
+ [...]
+ 4. Let previousLastIndex be ? Get(rx, "lastIndex").
+ 5. If SameValue(previousLastIndex, 0) is false, then
+ a. Perform ? Set(rx, "lastIndex", 0, true).
+ 6. Let result be ? RegExpExec(rx, S).
+ [...]
+features: [Symbol.search]
+---*/
+
+var re = /(?:)/;
+var execLastIndex;
+
+re.lastIndex = -0;
+re.exec = function() {
+ execLastIndex = re.lastIndex;
+ return null;
+};
+
+assert.sameValue(re[Symbol.search](""), -1);
+assert.sameValue(execLastIndex, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-init.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-init.js
new file mode 100644
index 0000000000..17360b72f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-init.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.9
+description: >
+ The `lastIndex` value is set to 0 immediately prior to match execution
+info: |
+ [...]
+ 7. Let status be Set(rx, "lastIndex", 0, true).
+ 8. ReturnIfAbrupt(status).
+ 9. Let result be RegExpExec(rx, S).
+ [...]
+features: [Symbol.search]
+---*/
+
+var duringExec;
+var fakeRe = {
+ lastIndex: 34,
+ exec: function() {
+ duringExec = fakeRe.lastIndex;
+ return null;
+ }
+};
+
+RegExp.prototype[Symbol.search].call(fakeRe);
+
+assert.sameValue(duringExec, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-restore-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-restore-err.js
new file mode 100644
index 0000000000..03f11054ba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-restore-err.js
@@ -0,0 +1,52 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.9
+description: >
+ Behavior when error thrown while restoring `lastIndex` property following
+ match execution
+info: |
+ [...]
+ 8. If SameValue(currentLastIndex, previousLastIndex) is false, then
+ a. Perform ? Set(rx, "lastIndex", previousLastIndex, true).
+features: [Symbol.search]
+---*/
+
+var callCount;
+var poisonedLastIndex = {
+ get lastIndex() { return this.lastIndex_; },
+ set lastIndex(_) {
+ if (callCount === 1) {
+ throw new Test262Error();
+ }
+ this.lastIndex_ = _;
+ },
+ exec: function() {
+ callCount += 1;
+ return null;
+ }
+};
+var nonWritableLastIndex = {
+ exec: function() {
+ Object.defineProperty(
+ nonWritableLastIndex, 'lastIndex', { writable: false }
+ );
+ callCount += 1;
+ return null;
+ }
+};
+
+callCount = 0;
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.search].call(poisonedLastIndex);
+});
+assert.sameValue(callCount, 1, 'Match executed ("poisoned" lastIndex)');
+
+callCount = 0;
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.search].call(nonWritableLastIndex);
+});
+assert.sameValue(callCount, 1, 'Match executed (non-writable lastIndex)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-restore-samevalue.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-restore-samevalue.js
new file mode 100644
index 0000000000..a7a909fe72
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-restore-samevalue.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@search
+description: >
+ `currentLastIndex` value is compared using SameValue.
+info: |
+ RegExp.prototype [ @@search ] ( string )
+
+ [...]
+ 6. Let result be ? RegExpExec(rx, S).
+ 7. Let currentLastIndex be ? Get(rx, "lastIndex").
+ 8. If SameValue(currentLastIndex, previousLastIndex) is false, then
+ a. Perform ? Set(rx, "lastIndex", previousLastIndex, true).
+ [...]
+features: [Symbol.search]
+---*/
+
+var re = /(?:)/;
+re.exec = function() {
+ re.lastIndex = -0;
+ return null;
+};
+
+assert.sameValue(re[Symbol.search](""), -1);
+assert.sameValue(re.lastIndex, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-restore.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-restore.js
new file mode 100644
index 0000000000..393d02a14e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/set-lastindex-restore.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.9
+description: The `lastIndex` value is restored following match execution
+info: |
+ [...]
+ 8. If SameValue(currentLastIndex, previousLastIndex) is false, then
+ a. Perform ? Set(rx, "lastIndex", previousLastIndex, true).
+ [...]
+features: [Symbol.search]
+---*/
+
+var latestValue = 86;
+var callCount = 0;
+var fakeRe = {
+ get lastIndex() {
+ return latestValue;
+ },
+ set lastIndex(_) {
+ latestValue = _;
+ },
+ exec: function() {
+ callCount++;
+ latestValue = null;
+ return null;
+ }
+};
+
+RegExp.prototype[Symbol.search].call(fakeRe);
+
+assert.sameValue(callCount, 1);
+assert.sameValue(latestValue, 86);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/success-get-index-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/success-get-index-err.js
new file mode 100644
index 0000000000..104c75de96
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/success-get-index-err.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.9
+description: >
+ Behavior when error thrown while accessing `index` property of match result
+info: |
+ [...]
+ 14. Return Get(result, "index").
+features: [Symbol.search]
+---*/
+
+var poisonedIndex = {
+ get index() {
+ throw new Test262Error();
+ }
+};
+var fakeRe = {
+ exec: function() {
+ return poisonedIndex;
+ }
+};
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.search].call(fakeRe);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/success-return-val.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/success-return-val.js
new file mode 100644
index 0000000000..06020ea0f5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/success-return-val.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.9
+description: Return value following successful match
+info: |
+ [...]
+ 14. Return Get(result, "index").
+features: [Symbol.search]
+---*/
+
+assert.sameValue(/a/[Symbol.search]('abc'), 0);
+assert.sameValue(/b/[Symbol.search]('abc'), 1);
+assert.sameValue(/c/[Symbol.search]('abc'), 2);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/this-val-non-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/this-val-non-obj.js
new file mode 100644
index 0000000000..185e2cca72
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/this-val-non-obj.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: The `this` value must be an object
+es6id: 21.2.5.9
+info: |
+ 1. Let rx be the this value.
+ 2. If Type(rx) is not Object, throw a TypeError exception.
+features: [Symbol.search]
+---*/
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.search].call();
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.search].call(undefined);
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.search].call(null);
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.search].call(true);
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.search].call('string');
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.search].call(Symbol.search);
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.search].call(86);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/u-lastindex-advance.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/u-lastindex-advance.js
new file mode 100644
index 0000000000..a0dbf1022d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/u-lastindex-advance.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Advancement of lastIndex
+es6id: 21.2.5.9
+info: |
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 12. Let flags be the value of R’s [[OriginalFlags]] internal slot.
+ 13. If flags contains "u", let fullUnicode be true, else let fullUnicode be
+ false.
+ [...]
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ c. If r is failure, then
+ [...]
+ ii. Let lastIndex be AdvanceStringIndex(S, lastIndex, fullUnicode).
+features: [Symbol.search]
+---*/
+
+assert.sameValue(/\udf06/u[Symbol.search]('\ud834\udf06'), -1);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/y-fail-return.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/y-fail-return.js
new file mode 100644
index 0000000000..4944a8ad49
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.search/y-fail-return.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Stops match execution after first match failure
+es6id: 21.2.5.9
+info: |
+ 21.2.5.9 RegExp.prototype [ @@search ] ( string )
+
+ [...]
+ 9. Let result be RegExpExec(rx, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ b. Let r be matcher(S, lastIndex).
+ c. If r is failure, then
+ i. If sticky is true, then
+ [...]
+ 3. Return null.
+features: [Symbol.search]
+---*/
+
+assert.sameValue(/a/y[Symbol.search]('ba'), -1);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-flags-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-flags-err.js
new file mode 100644
index 0000000000..b779f838eb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-flags-err.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: Behavior when error thrown while coercing `flags` property
+info: |
+ [...]
+ 7. Let flags be ToString(Get(rx, "flags")).
+ 8. ReturnIfAbrupt(flags).
+features: [Symbol.split]
+---*/
+
+var uncoercibleFlags = {
+ flags: {
+ toString: function() {
+ throw new Test262Error();
+ }
+ }
+};
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.split].call(uncoercibleFlags);
+});
+
+uncoercibleFlags = {
+ flags: Symbol.split
+};
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.split].call(uncoercibleFlags);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-flags.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-flags.js
new file mode 100644
index 0000000000..d0c4f610c0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-flags.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: String coercion of `flags` property
+info: |
+ [...]
+ 7. Let flags be ToString(Get(rx, "flags")).
+ [...]
+ 13. Let splitter be Construct(C, «rx, newFlags»).
+ [...]
+features: [Symbol.split, Symbol.species]
+---*/
+
+var obj = {
+ constructor: function() {},
+ flags: {
+ toString: function() {
+ return 'toString valuey';
+ }
+ }
+};
+var flagsArg;
+
+obj.constructor = function() {};
+obj.constructor[Symbol.species] = function(_, flags) {
+ flagsArg = flags;
+ return /./y;
+};
+
+RegExp.prototype[Symbol.split].call(obj);
+
+assert.sameValue(flagsArg, 'toString valuey');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-limit-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-limit-err.js
new file mode 100644
index 0000000000..96a916768e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-limit-err.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: Behavior when error thrown while coercing `limit` argument
+info: |
+ [...]
+ 17. If limit is undefined, let lim be 253–1; else let lim be
+ ToLength(limit).
+ 18. ReturnIfAbrupt(lim).
+features: [Symbol.split]
+---*/
+
+var uncoercibleObj = {
+ valueOf: function() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(TypeError, function() {
+ /./[Symbol.split]('', Symbol.split);
+});
+
+assert.throws(Test262Error, function() {
+ /./[Symbol.split]('', uncoercibleObj);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-limit.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-limit.js
new file mode 100644
index 0000000000..d355b34599
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-limit.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: Length coercion of `limit` argument
+info: |
+ [...]
+ 17. If limit is undefined, let lim be 2^32-1; else let lim be ? ToUint32(limit).
+ [...]
+features: [Symbol.split]
+---*/
+
+var result;
+
+// ToUint32(-23) = 4294967273
+result = /./[Symbol.split]('abc', -23);
+assert(Array.isArray(result));
+assert.sameValue(result.length, 4);
+
+result = /./[Symbol.split]('abc', 1.9);
+assert(Array.isArray(result));
+assert.sameValue(result.length, 1);
+assert.sameValue(result[0], '');
+
+result = /./[Symbol.split]('abc', NaN);
+assert(Array.isArray(result));
+assert.sameValue(result.length, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-string-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-string-err.js
new file mode 100644
index 0000000000..bb7c9696d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-string-err.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: Behavior when error thrown while coercing `string` argument
+info: |
+ [...]
+ 3. Let S be ToString(string).
+ 4. ReturnIfAbrupt(S).
+features: [Symbol.split]
+---*/
+
+var uncoercibleObj = {
+ toString: function() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ /./[Symbol.split](uncoercibleObj);
+});
+
+assert.throws(TypeError, function() {
+ /./[Symbol.split](Symbol.split);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-string.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-string.js
new file mode 100644
index 0000000000..d1708d8e1a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/coerce-string.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: String coercion of `string` argument
+info: |
+ [...]
+ 3. Let S be ToString(string).
+ [...]
+features: [Symbol.split]
+---*/
+
+var obj = {
+ toString: function() {
+ return 'toString value';
+ }
+};
+var result;
+
+result = / /[Symbol.split](obj);
+
+assert(Array.isArray(result));
+assert.sameValue(result.length, 2);
+assert.sameValue(result[0], 'toString');
+assert.sameValue(result[1], 'value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/get-flags-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/get-flags-err.js
new file mode 100644
index 0000000000..62fc932fb5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/get-flags-err.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: Behavior when error thrown while accessing `flags` property
+info: |
+ [...]
+ 7. Let flags be ToString(Get(rx, "flags")).
+ 8. ReturnIfAbrupt(flags).
+features: [Symbol.split]
+---*/
+
+var poisonedFlags = {
+ get flags() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.split].call(poisonedFlags);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/last-index-exceeds-str-size.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/last-index-exceeds-str-size.js
new file mode 100644
index 0000000000..d229f5b8f9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/last-index-exceeds-str-size.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype-@@split
+description: The `lastIndex` property is clamped to the string size.
+info: |
+ RegExp.prototype [ @@split ] ( string, limit )
+
+ ...
+ 19. Repeat, while q < size
+ ...
+ d. Else z is not null,
+ i. Let e be ? ToLength(Get(splitter, "lastIndex")).
+ ii. Let e be min(e, size).
+ ...
+features: [Symbol.split]
+---*/
+
+var regExp = /a/;
+var string = "foo";
+
+RegExp.prototype.exec = function() {
+ this.lastIndex = 100;
+ return {length: 0, index: 0};
+};
+
+var result = regExp[Symbol.split](string);
+
+assert.sameValue(result.length, 2, "result.length");
+assert.sameValue(result[0], "", "result[0]");
+assert.sameValue(result[1], "", "result[1]");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/length.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/length.js
new file mode 100644
index 0000000000..546f056ca0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/length.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 21.2.5.11
+description: RegExp.prototype[Symbol.split] `length` property
+info: |
+ The length property of the @@split method is 2.
+
+ ES6 Section 17:
+
+ [...]
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [Symbol.split]
+---*/
+
+assert.sameValue(RegExp.prototype[Symbol.split].length, 2);
+
+verifyNotEnumerable(RegExp.prototype[Symbol.split], 'length');
+verifyNotWritable(RegExp.prototype[Symbol.split], 'length');
+verifyConfigurable(RegExp.prototype[Symbol.split], 'length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/limit-0-bail.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/limit-0-bail.js
new file mode 100644
index 0000000000..0037f5d21b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/limit-0-bail.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: No matching attempt is made when `limit` argument is `0`
+info: |
+ [...]
+ 21. If lim = 0, return A.
+features: [Symbol.split, Symbol.species]
+---*/
+
+var result;
+var obj = {
+ constructor: function() {}
+};
+obj.constructor[Symbol.species] = function() {
+ return {
+ exec: function() {
+ throw new Test262Error('No match should be attempted when `limit` is `0`.');
+ }
+ };
+};
+
+result = RegExp.prototype[Symbol.split].call(obj, '', 0);
+
+assert(Array.isArray(result));
+assert.sameValue(result.length, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/name.js
new file mode 100644
index 0000000000..aac4f253a1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/name.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 21.2.5.11
+description: RegExp.prototype[Symbol.split] `name` property
+info: |
+ The value of the name property of this function is "[Symbol.split]".
+
+ ES6 Section 17:
+
+ [...]
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [Symbol.split]
+---*/
+
+assert.sameValue(RegExp.prototype[Symbol.split].name, '[Symbol.split]');
+
+verifyNotEnumerable(RegExp.prototype[Symbol.split], 'name');
+verifyNotWritable(RegExp.prototype[Symbol.split], 'name');
+verifyConfigurable(RegExp.prototype[Symbol.split], 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/not-a-constructor.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/not-a-constructor.js
new file mode 100644
index 0000000000..4623db96ba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ RegExp.prototype[Symbol.split] does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, Symbol, Symbol.split, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(RegExp.prototype[Symbol.split]),
+ false,
+ 'isConstructor(RegExp.prototype[Symbol.split]) must return false'
+);
+
+assert.throws(TypeError, () => {
+ let re = new RegExp(''); new re[Symbol.split]();
+}, '`let re = new RegExp(\'\'); new re[Symbol.split]()` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/prop-desc.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/prop-desc.js
new file mode 100644
index 0000000000..f85d07714a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/prop-desc.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: RegExp.prototype[Symbol.split] property descriptor
+info: |
+ ES6 Section 17
+
+ Every other data property described in clauses 18 through 26 and in Annex
+ B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+ [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [Symbol.split]
+---*/
+
+verifyNotEnumerable(RegExp.prototype, Symbol.split);
+verifyWritable(RegExp.prototype, Symbol.split);
+verifyConfigurable(RegExp.prototype, Symbol.split);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-ctor-get-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-ctor-get-err.js
new file mode 100644
index 0000000000..f96a1389d2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-ctor-get-err.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: Behavior when error thrown while accessing `constructor` property
+info: |
+ [...]
+ 5. Let C be SpeciesConstructor(rx, %RegExp%).
+ 6. ReturnIfAbrupt(C).
+
+ ES6 Section 7.3.20 SpeciesConstructor ( O, defaultConstructor )
+
+ 1. Assert: Type(O) is Object.
+ 2. Let C be Get(O, "constructor").
+ 3. ReturnIfAbrupt(C).
+features: [Symbol.split]
+---*/
+
+var poisonedCtor = {
+ get constructor() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.split].call(poisonedCtor);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-ctor-non-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-ctor-non-obj.js
new file mode 100644
index 0000000000..f4e1d26d03
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-ctor-non-obj.js
@@ -0,0 +1,52 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: TypeError when `constructor` property is defined but not an object
+info: |
+ [...]
+ 5. Let C be SpeciesConstructor(rx, %RegExp%).
+ 6. ReturnIfAbrupt(C).
+
+ ES6 Section 7.3.20 SpeciesConstructor ( O, defaultConstructor )
+
+ 1. Assert: Type(O) is Object.
+ 2. Let C be Get(O, "constructor").
+ 3. ReturnIfAbrupt(C).
+ 4. If C is undefined, return defaultConstructor.
+ 5. If Type(C) is not Object, throw a TypeError exception.
+features: [Symbol.split]
+---*/
+
+var obj = { flags: '' };
+
+// Avoid false positives from unrelated TypeErrors
+RegExp.prototype[Symbol.split].call(obj);
+
+obj.constructor = false;
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.split].call(obj);
+});
+
+obj.constructor = 'string';
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.split].call(obj);
+});
+
+obj.constructor = Symbol.split;
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.split].call(obj);
+});
+
+obj.constructor = 86;
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.split].call(obj);
+});
+
+obj.constructor = null;
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.split].call(obj);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-ctor-undef.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-ctor-undef.js
new file mode 100644
index 0000000000..c77f8aaa12
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-ctor-undef.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: RegExp used when `this` value does not define a constructor
+info: |
+ [...]
+ 5. Let C be SpeciesConstructor(rx, %RegExp%).
+ [...]
+
+ ES6 Section 7.3.20 SpeciesConstructor ( O, defaultConstructor )
+
+ 1. Assert: Type(O) is Object.
+ 2. Let C be Get(O, "constructor").
+ 3. ReturnIfAbrupt(C).
+ 4. If C is undefined, return defaultConstructor.
+features: [Symbol.split]
+---*/
+
+var re = /[db]/;
+var result;
+re.constructor = undefined;
+
+result = re[Symbol.split]('abcde');
+
+assert(Array.isArray(result));
+assert.sameValue(result.length, 3);
+assert.sameValue(result[0], 'a');
+assert.sameValue(result[1], 'c');
+assert.sameValue(result[2], 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-err.js
new file mode 100644
index 0000000000..a694e44854
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-err.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: Behavior when error thrown by custom species constructor
+info: |
+ [...]
+ 5. Let C be SpeciesConstructor(rx, %RegExp%).
+ [...]
+ 13. Let splitter be Construct(C, «rx, newFlags»).
+ 14. ReturnIfAbrupt(splitter).
+
+ ES6 Section 7.3.20 SpeciesConstructor ( O, defaultConstructor )
+
+ 1. Assert: Type(O) is Object.
+ 2. Let C be Get(O, "constructor").
+ 3. ReturnIfAbrupt(C).
+ 4. If C is undefined, return defaultConstructor.
+ 5. If Type(C) is not Object, throw a TypeError exception.
+ 6. Let S be Get(C, @@species).
+ 7. ReturnIfAbrupt(S).
+ 8. If S is either undefined or null, return defaultConstructor.
+ 9. If IsConstructor(S) is true, return S.
+features: [Symbol.split, Symbol.species]
+---*/
+
+var re = /x/;
+re.constructor = function() {};
+re.constructor[Symbol.species] = function() {
+ throw new Test262Error();
+};
+
+assert.throws(Test262Error, function() {
+ re[Symbol.split]();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-species-get-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-species-get-err.js
new file mode 100644
index 0000000000..8a231885b2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-species-get-err.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: >
+ Behavior when error thrown while accessing `Symbol.species` property of
+ constructor
+info: |
+ [...]
+ 5. Let C be SpeciesConstructor(rx, %RegExp%).
+ 6. ReturnIfAbrupt(C).
+
+ ES6 Section 7.3.20 SpeciesConstructor ( O, defaultConstructor )
+
+ 1. Assert: Type(O) is Object.
+ 2. Let C be Get(O, "constructor").
+ 3. ReturnIfAbrupt(C).
+ 4. If C is undefined, return defaultConstructor.
+ 5. If Type(C) is not Object, throw a TypeError exception.
+ 6. Let S be Get(C, @@species).
+ 7. ReturnIfAbrupt(S).
+features: [Symbol.split, Symbol.species]
+---*/
+
+var poisonedSpecies = function() {};
+Object.defineProperty(poisonedSpecies, Symbol.species, {
+ get: function() {
+ throw new Test262Error();
+ }
+});
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.split].call({ constructor: poisonedSpecies });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-species-non-ctor.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-species-non-ctor.js
new file mode 100644
index 0000000000..7203f84fd2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-species-non-ctor.js
@@ -0,0 +1,59 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: >
+ TypeError thrown when `Symbol.species` property value is not a constructor
+info: |
+ [...]
+ 5. Let C be SpeciesConstructor(rx, %RegExp%).
+ 6. ReturnIfAbrupt(C).
+
+ ES6 Section 7.3.20 SpeciesConstructor ( O, defaultConstructor )
+
+ 1. Assert: Type(O) is Object.
+ 2. Let C be Get(O, "constructor").
+ 3. ReturnIfAbrupt(C).
+ 4. If C is undefined, return defaultConstructor.
+ 5. If Type(C) is not Object, throw a TypeError exception.
+ 6. Let S be Get(C, @@species).
+ 7. ReturnIfAbrupt(S).
+ 8. If S is either undefined or null, return defaultConstructor.
+ 9. If IsConstructor(S) is true, return S.
+ 10. Throw a TypeError exception.
+features: [Symbol.split, Symbol.species]
+---*/
+
+var re = /./;
+re.constructor = function() {};
+
+// Avoid false positives from unrelated TypeErrors
+re[Symbol.split]();
+
+re.constructor[Symbol.species] = {};
+assert.throws(TypeError, function() {
+ re[Symbol.split]();
+});
+
+re.constructor[Symbol.species] = 0;
+assert.throws(TypeError, function() {
+ re[Symbol.split]();
+});
+
+re.constructor[Symbol.species] = '';
+assert.throws(TypeError, function() {
+ re[Symbol.split]();
+});
+
+re.constructor[Symbol.species] = Symbol.split;
+assert.throws(TypeError, function() {
+ re[Symbol.split]();
+});
+
+re.constructor[Symbol.species] = Date.now;
+assert.throws(TypeError, function() {
+ re[Symbol.split]();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-species-undef.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-species-undef.js
new file mode 100644
index 0000000000..21614b66f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-species-undef.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: >
+ RegExp used when the `Symbol.species` property of the `this` value's
+ constructor is `undefined` or `null`
+info: |
+ [...]
+ 5. Let C be SpeciesConstructor(rx, %RegExp%).
+ [...]
+
+ ES6 Section 7.3.20 SpeciesConstructor ( O, defaultConstructor )
+
+ 1. Assert: Type(O) is Object.
+ 2. Let C be Get(O, "constructor").
+ 3. ReturnIfAbrupt(C).
+ 4. If C is undefined, return defaultConstructor.
+ 5. If Type(C) is not Object, throw a TypeError exception.
+ 6. Let S be Get(C, @@species).
+ 7. ReturnIfAbrupt(S).
+ 8. If S is either undefined or null, return defaultConstructor.
+features: [Symbol.split, Symbol.species]
+---*/
+
+var noSpecies = function() {};
+var re = /[db]/;
+var result;
+re.constructor = noSpecies;
+
+noSpecies[Symbol.species] = undefined;
+result = re[Symbol.split]('abcde');
+
+assert(Array.isArray(result));
+assert.sameValue(result.length, 3);
+assert.sameValue(result[0], 'a');
+assert.sameValue(result[1], 'c');
+assert.sameValue(result[2], 'e');
+
+noSpecies[Symbol.species] = null;
+result = re[Symbol.split]('abcde');
+
+assert(Array.isArray(result));
+assert.sameValue(result.length, 3);
+assert.sameValue(result[0], 'a');
+assert.sameValue(result[1], 'c');
+assert.sameValue(result[2], 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-y.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-y.js
new file mode 100644
index 0000000000..59b44ea327
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor-y.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: The `y` flag is always used in constructing the "splitter" object
+info: |
+ [...]
+ 5. Let C be SpeciesConstructor(rx, %RegExp%).
+ [...]
+ 11. If flags contains "y", let newFlags be flags.
+ 12. Else, let newFlags be the string that is the concatenation of flags and
+ "y".
+ 13. Let splitter be Construct(C, «rx, newFlags»).
+ [...]
+features: [Symbol.split, Symbol.species]
+---*/
+
+var flagsArg;
+var re = {};
+re.constructor = function() {};
+re.constructor[Symbol.species] = function(_, flags) {
+ flagsArg = flags;
+ return /./y;
+};
+
+re.flags = '';
+RegExp.prototype[Symbol.split].call(re, '');
+assert.sameValue(flagsArg, 'y');
+
+re.flags = 'abcd';
+RegExp.prototype[Symbol.split].call(re, '');
+assert.sameValue(flagsArg, 'abcdy');
+
+re.flags = 'Y';
+RegExp.prototype[Symbol.split].call(re, '');
+assert.sameValue(flagsArg, 'Yy');
+
+re.flags = 'y';
+RegExp.prototype[Symbol.split].call(re, '');
+assert.sameValue(flagsArg, 'y');
+
+re.flags = 'abycd';
+RegExp.prototype[Symbol.split].call(re, '');
+assert.sameValue(flagsArg, 'abycd');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor.js
new file mode 100644
index 0000000000..b8f058dc0e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/species-ctor.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: Invocation of custom species constructor
+info: |
+ [...]
+ 5. Let C be SpeciesConstructor(rx, %RegExp%).
+ [...]
+ 13. Let splitter be Construct(C, «rx, newFlags»).
+ [...]
+
+ ES6 Section 7.3.20 SpeciesConstructor ( O, defaultConstructor )
+
+ 1. Assert: Type(O) is Object.
+ 2. Let C be Get(O, "constructor").
+ 3. ReturnIfAbrupt(C).
+ 4. If C is undefined, return defaultConstructor.
+ 5. If Type(C) is not Object, throw a TypeError exception.
+ 6. Let S be Get(C, @@species).
+ 7. ReturnIfAbrupt(S).
+ 8. If S is either undefined or null, return defaultConstructor.
+ 9. If IsConstructor(S) is true, return S.
+features: [Symbol.split, Symbol.species]
+---*/
+
+var thisVal, args, result;
+var re = /x/iy;
+re.constructor = function() {};
+re.constructor[Symbol.species] = function() {
+ thisVal = this;
+ args = arguments;
+ return /[db]/y;
+};
+
+result = RegExp.prototype[Symbol.split].call(re, 'abcde');
+
+assert(Array.isArray(result));
+assert.sameValue(result.length, 3);
+assert.sameValue(result[0], 'a');
+assert.sameValue(result[1], 'c');
+assert.sameValue(result[2], 'e');
+
+assert(thisVal instanceof re.constructor[Symbol.species]);
+assert.sameValue(args.length, 2);
+assert.sameValue(args[0], re);
+assert.sameValue(args[1], 'iy');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/splitter-proto-from-ctor-realm.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/splitter-proto-from-ctor-realm.js
new file mode 100644
index 0000000000..577b554855
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/splitter-proto-from-ctor-realm.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-regexp.prototype-@@split
+description: Default [[Prototype]] value derived from realm of the constructor
+info: |
+ 10. Let splitter be ? Construct(C, « rx, newFlags »).
+
+ 9.1.14 GetPrototypeFromConstructor
+
+ [...]
+ 3. Let proto be ? Get(constructor, "prototype").
+ 4. If Type(proto) is not Object, then
+ a. Let realm be ? GetFunctionRealm(constructor).
+ b. Let proto be realm's intrinsic object named intrinsicDefaultProto.
+ [...]
+features: [cross-realm, Symbol.species, Symbol.split]
+---*/
+
+var other = $262.createRealm().global;
+other.shared = null;
+var C = new other.Function('shared = this; return /./;');
+C.prototype = null;
+
+var r = /./;
+r.constructor = function() {};
+r.constructor[Symbol.species] = C;
+
+r[Symbol.split]();
+
+assert.sameValue(Object.getPrototypeOf(other.shared), other.Object.prototype);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-adv-thru-empty-match.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-adv-thru-empty-match.js
new file mode 100644
index 0000000000..3918899112
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-adv-thru-empty-match.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ lastIndex is explicitly advanced following an empty match
+es6id: 21.2.5.11
+info: |
+ [...]
+ 24. Repeat, while q < size
+ a. Let setStatus be Set(splitter, "lastIndex", q, true).
+ b. ReturnIfAbrupt(setStatus).
+ c. Let z be RegExpExec(splitter, S).
+ d. ReturnIfAbrupt(z).
+ e. If z is null, let q be AdvanceStringIndex(S, q, unicodeMatching).
+ f. Else z is not null,
+ i. Let e be ToLength(Get(splitter, "lastIndex")).
+ ii. ReturnIfAbrupt(e).
+ iii. If e = p, let q be AdvanceStringIndex(S, q, unicodeMatching).
+features: [Symbol.split]
+---*/
+
+var result = /(?:)/[Symbol.split]('abc');
+
+assert(Array.isArray(result));
+assert.sameValue(result.length, 3);
+assert.sameValue(result[0], 'a');
+assert.sameValue(result[1], 'b');
+assert.sameValue(result[2], 'c');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-coerce-lastindex-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-coerce-lastindex-err.js
new file mode 100644
index 0000000000..7cf7bde55a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-coerce-lastindex-err.js
@@ -0,0 +1,51 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: >
+ Behavior when error thrown while coercing `lastIndex` property of splitter
+ after a match
+info: |
+ [...]
+ 24. Repeat, while q < size
+ a. Let setStatus be Set(splitter, "lastIndex", q, true).
+ [...]
+ c. Let z be RegExpExec(splitter, S).
+ [...]
+ f. Else z is not null,
+ i. Let e be ToLength(Get(splitter, "lastIndex")).
+ ii. ReturnIfAbrupt(e).
+features: [Symbol.split, Symbol.species]
+---*/
+
+var badLastIndex;
+var obj = {
+ constructor: function() {}
+};
+var fakeRe = {
+ set lastIndex(_) {},
+ get lastIndex() {
+ return badLastIndex;
+ },
+ exec: function() {
+ return [];
+ }
+};
+obj.constructor[Symbol.species] = function() {
+ return fakeRe;
+};
+
+badLastIndex = Symbol.split;
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.split].call(obj, 'abcd');
+});
+
+badLastIndex = {
+ valueOf: function() { throw new Test262Error(); }
+};
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.split].call(obj, 'abcd');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-coerce-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-coerce-lastindex.js
new file mode 100644
index 0000000000..a8a910fa95
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-coerce-lastindex.js
@@ -0,0 +1,48 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: Length coercion of `lastIndex` property of splitter after a match
+info: |
+ [...]
+ 24. Repeat, while q < size
+ a. Let setStatus be Set(splitter, "lastIndex", q, true).
+ [...]
+ c. Let z be RegExpExec(splitter, S).
+ [...]
+ f. Else z is not null,
+ i. Let e be ToLength(Get(splitter, "lastIndex")).
+ [...]
+features: [Symbol.split, Symbol.species]
+---*/
+
+var result;
+var obj = {
+ constructor: function() {}
+};
+var fakeRe = {
+ set lastIndex(_) {},
+ get lastIndex() {
+ return {
+ valueOf: function() {
+ return 2.9;
+ }
+ };
+ },
+ exec: function() {
+ return [];
+ }
+};
+obj.constructor[Symbol.species] = function() {
+ return fakeRe;
+};
+
+result = RegExp.prototype[Symbol.split].call(obj, 'abcd');
+
+assert(Array.isArray(result));
+assert.sameValue(result.length, 2);
+assert.sameValue(result[0], '');
+assert.sameValue(result[1], 'cd');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-empty-match-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-empty-match-err.js
new file mode 100644
index 0000000000..d1452fbf37
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-empty-match-err.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: Behavior when error thrown while executing match for empty string
+info: |
+ [...]
+ 22. If size = 0, then
+ a. Let z be RegExpExec(splitter, S).
+ b. ReturnIfAbrupt(z).
+features: [Symbol.split, Symbol.species]
+---*/
+
+var obj = {
+ constructor: function() {}
+};
+obj.constructor[Symbol.species] = function() {
+ return {
+ exec: function() {
+ throw new Test262Error();
+ }
+ };
+};
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.split].call(obj, '');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-empty-match.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-empty-match.js
new file mode 100644
index 0000000000..7411ded2cb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-empty-match.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: Successful match of empty string
+info: |
+ [...]
+ 22. If size = 0, then
+ a. Let z be RegExpExec(splitter, S).
+ b. ReturnIfAbrupt(z).
+ c. If z is not null, return A.
+features: [Symbol.split]
+---*/
+
+var result = /(?:)/[Symbol.split]('');
+
+assert(Array.isArray(result));
+assert.sameValue(result.length, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-empty-no-match.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-empty-no-match.js
new file mode 100644
index 0000000000..b4cd097e29
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-empty-no-match.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: Unsuccessful match of empty string
+info: |
+ [...]
+ 22. If size = 0, then
+ a. Let z be RegExpExec(splitter, S).
+ b. ReturnIfAbrupt(z).
+ c. If z is not null, return A.
+ d. Assert: The following call will never result in an abrupt
+ completion.
+ e. Perform CreateDataProperty(A, "0", S).
+ f. Return A.
+features: [Symbol.split]
+---*/
+
+var result = /./[Symbol.split]('');
+
+assert(Array.isArray(result));
+assert.sameValue(result.length, 1);
+assert.sameValue(result[0], '');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-get-lastindex-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-get-lastindex-err.js
new file mode 100644
index 0000000000..64f8cc21d6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-get-lastindex-err.js
@@ -0,0 +1,46 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: >
+ Behavior when error thrown while accessing `lastIndex` property of splitter
+ after a match
+info: |
+ [...]
+ 24. Repeat, while q < size
+ a. Let setStatus be Set(splitter, "lastIndex", q, true).
+ [...]
+ c. Let z be RegExpExec(splitter, S).
+ [...]
+ f. Else z is not null,
+ i. Let e be ToLength(Get(splitter, "lastIndex")).
+ ii. ReturnIfAbrupt(e).
+features: [Symbol.split, Symbol.species]
+---*/
+
+var obj = {
+ constructor: function() {}
+};
+var callCount = 0;
+var fakeRe = {
+ set lastIndex(_) {},
+ get lastIndex() {
+ throw new Test262Error();
+ },
+ exec: function() {
+ callCount += 1;
+ return [];
+ }
+};
+obj.constructor[Symbol.species] = function() {
+ return fakeRe;
+};
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.split].call(obj, 'abcd');
+});
+
+assert.sameValue(callCount, 1);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-limit-capturing.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-limit-capturing.js
new file mode 100644
index 0000000000..c08608a185
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-limit-capturing.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: The `limit` argument is applied to capturing groups
+info: |
+ [...]
+ 24. Repeat, while q < size
+ a. Let setStatus be Set(splitter, "lastIndex", q, true).
+ [...]
+ c. Let z be RegExpExec(splitter, S).
+ [...]
+ f. Else z is not null,
+ [...]
+ iv. Else e ≠ p,
+ [...]
+ 11. Repeat, while i ≤ numberOfCaptures.
+ [...]
+ f. If lengthA = lim, return A.
+features: [Symbol.split]
+---*/
+
+var result = /c(d)(e)/[Symbol.split]('abcdefg', 2);
+
+assert(Array.isArray(result));
+assert.sameValue(result.length, 2);
+assert.sameValue(result[0], 'ab');
+assert.sameValue(result[1], 'd');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-limit.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-limit.js
new file mode 100644
index 0000000000..0d13dcb1bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-limit.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: Results limited to number specified as second argument
+info: |
+ [...]
+ 24. Repeat, while q < size
+ a. Let setStatus be Set(splitter, "lastIndex", q, true).
+ [...]
+ c. Let z be RegExpExec(splitter, S).
+ [...]
+ f. Else z is not null,
+ [...]
+ iv. Else e ≠ p,
+ [...]
+ 3. Perform CreateDataProperty(A, ToString(lengthA), T).
+ 4. Let lengthA be lengthA +1.
+ 5. If lengthA = lim, return A.
+features: [Symbol.split]
+---*/
+
+var result = /x/[Symbol.split]('axbxcxdxe', 3);
+
+assert(Array.isArray(result));
+assert.sameValue(result.length, 3);
+assert.sameValue(result[0], 'a');
+assert.sameValue(result[1], 'b');
+assert.sameValue(result[2], 'c');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-match-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-match-err.js
new file mode 100644
index 0000000000..0f158b23ec
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-match-err.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: >
+ Behavior when error thrown while executing match for non-empty string
+info: |
+ [...]
+ 24. Repeat, while q < size
+ [...]
+ c. Let z be RegExpExec(splitter, S).
+ d. ReturnIfAbrupt(z).
+features: [Symbol.split, Symbol.species]
+---*/
+
+var obj = {
+ constructor: function() {}
+};
+obj.constructor[Symbol.species] = function() {
+ return {
+ exec: function() {
+ throw new Test262Error();
+ }
+ };
+};
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.split].call(obj, 'a');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-result-coerce-length-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-result-coerce-length-err.js
new file mode 100644
index 0000000000..884fd5e22c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-result-coerce-length-err.js
@@ -0,0 +1,52 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: >
+ Behavior when error thrown while coercing `length` property of match result
+info: |
+ [...]
+ 24. Repeat, while q < size
+ a. Let setStatus be Set(splitter, "lastIndex", q, true).
+ [...]
+ c. Let z be RegExpExec(splitter, S).
+ [...]
+ f. Else z is not null,
+ iv. Else e ≠ p,
+ [...]
+ 7. Let numberOfCaptures be ToLength(Get(z, "length")).
+ 8. ReturnIfAbrupt(numberOfCaptures).
+features: [Symbol.split, Symbol.species]
+---*/
+
+var obj = {
+ constructor: function() {}
+};
+var uncoercibleLength;
+var fakeRe = {
+ exec: function() {
+ return {
+ length: uncoercibleLength
+ };
+ }
+};
+obj.constructor[Symbol.species] = function() {
+ return fakeRe;
+};
+
+uncoercibleLength = Symbol.split;
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.split].call(obj, 'abcd');
+});
+
+uncoercibleLength = {
+ valueOf: function() {
+ throw new Test262Error();
+ }
+};
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.split].call(obj, 'abcd');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-result-coerce-length.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-result-coerce-length.js
new file mode 100644
index 0000000000..9ffa5fe519
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-result-coerce-length.js
@@ -0,0 +1,54 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: >
+ Length coercion of `length` property of match result
+info: |
+ [...]
+ 24. Repeat, while q < size
+ a. Let setStatus be Set(splitter, "lastIndex", q, true).
+ [...]
+ c. Let z be RegExpExec(splitter, S).
+ [...]
+ f. Else z is not null,
+ iv. Else e ≠ p,
+ [...]
+ 7. Let numberOfCaptures be ToLength(Get(z, "length")).
+ [...]
+features: [Symbol.split, Symbol.species]
+---*/
+
+var result;
+var obj = {
+ constructor: function() {}
+};
+var fakeRe = {
+ exec: function() {
+ fakeRe.lastIndex = 1;
+ return {
+ length: {
+ valueOf: function() {
+ return 2.9;
+ }
+ },
+ 0: 'foo',
+ 1: 'bar',
+ 2: 'baz'
+ };
+ }
+};
+obj.constructor[Symbol.species] = function() {
+ return fakeRe;
+};
+
+result = RegExp.prototype[Symbol.split].call(obj, 'a');
+
+assert(Array.isArray(result));
+assert.sameValue(result.length, 3);
+assert.sameValue(result[0], '');
+assert.sameValue(result[1], 'bar');
+assert.sameValue(result[2], '');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-result-get-capture-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-result-get-capture-err.js
new file mode 100644
index 0000000000..efea4dacc2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-result-get-capture-err.js
@@ -0,0 +1,51 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: >
+ Behavior when error thrown while accessing capturing group match
+info: |
+ [...]
+ 24. Repeat, while q < size
+ a. Let setStatus be Set(splitter, "lastIndex", q, true).
+ [...]
+ c. Let z be RegExpExec(splitter, S).
+ [...]
+ f. Else z is not null,
+ iv. Else e ≠ p,
+ [...]
+ 11. Repeat, while i ≤ numberOfCaptures.
+ [...]
+ a. Let nextCapture be Get(z, ToString(i)).
+ b. ReturnIfAbrupt(nextCapture).
+features: [Symbol.split, Symbol.species]
+---*/
+
+var result;
+var obj = {
+ constructor: function() {}
+};
+var poisonedCapture = {
+ length: 3,
+ 0: 'a',
+ 1: 'b',
+ get 2() {
+ throw new Test262Error();
+ }
+};
+var fakeRe = {
+ exec: function() {
+ fakeRe.lastIndex = 1;
+ return poisonedCapture;
+ }
+};
+obj.constructor[Symbol.species] = function() {
+ return fakeRe;
+};
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.split].call(obj, 'a');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-result-get-length-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-result-get-length-err.js
new file mode 100644
index 0000000000..ec7e011813
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-result-get-length-err.js
@@ -0,0 +1,45 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: >
+ Behavior when error thrown while accessing `length` property of match
+ result
+info: |
+ [...]
+ 24. Repeat, while q < size
+ a. Let setStatus be Set(splitter, "lastIndex", q, true).
+ [...]
+ c. Let z be RegExpExec(splitter, S).
+ [...]
+ f. Else z is not null,
+ iv. Else e ≠ p,
+ [...]
+ 7. Let numberOfCaptures be ToLength(Get(z, "length")).
+ 8. ReturnIfAbrupt(numberOfCaptures).
+features: [Symbol.split, Symbol.species]
+---*/
+
+var obj = {
+ constructor: function() {}
+};
+var poisonedLength = {
+ get length() {
+ throw new Test262Error();
+ }
+};
+var fakeRe = {
+ exec: function() {
+ return poisonedLength;
+ }
+};
+obj.constructor[Symbol.species] = function() {
+ return fakeRe;
+};
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.split].call(obj, 'abcd');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-set-lastindex-err.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-set-lastindex-err.js
new file mode 100644
index 0000000000..e151328249
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-set-lastindex-err.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: >
+ Behavior when error thrown while setting `lastIndex` property of splitter
+info: |
+ [...]
+ 24. Repeat, while q < size
+ a. Let setStatus be Set(splitter, "lastIndex", q, true).
+ b. ReturnIfAbrupt(setStatus).
+features: [Symbol.split, Symbol.species]
+---*/
+
+var callCount = 0;
+var obj = {
+ constructor: function() {}
+};
+obj.constructor[Symbol.species] = function() {
+ return {
+ set lastIndex(_) {
+ throw new Test262Error();
+ },
+ exec: function() {
+ callCount += 1;
+ }
+ };
+};
+
+assert.throws(Test262Error, function() {
+ RegExp.prototype[Symbol.split].call(obj, 'a');
+});
+
+assert.sameValue(callCount, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-set-lastindex-match.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-set-lastindex-match.js
new file mode 100644
index 0000000000..93a8cc0113
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-set-lastindex-match.js
@@ -0,0 +1,51 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: Setting `lastIndex` property of splitter after a match
+info: |
+ [...]
+ 24. Repeat, while q < size
+ a. Let setStatus be Set(splitter, "lastIndex", q, true).
+ [...]
+ c. Let z be RegExpExec(splitter, S).
+ [...]
+ f. Else z is not null,
+ i. Let e be ToLength(Get(splitter, "lastIndex")).
+ [...]
+ iv. Else e ≠ p,
+ [...]
+ 6. Let p be e.
+ [...]
+ 12. Let q be p.
+features: [Symbol.split, Symbol.species]
+---*/
+
+var obj = {
+ constructor: function() {}
+};
+var lastIndex = 0;
+var indices = '';
+var fakeRe = {
+ set lastIndex(val) {
+ lastIndex = val;
+ indices += val + ',';
+ },
+ get lastIndex() {
+ return lastIndex;
+ },
+ exec: function() {
+ lastIndex += 1;
+ return ['a'];
+ }
+};
+obj.constructor[Symbol.species] = function() {
+ return fakeRe;
+};
+
+RegExp.prototype[Symbol.split].call(obj, 'abcd');
+
+assert.sameValue(indices, '0,1,2,3,');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-set-lastindex-no-match.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-set-lastindex-no-match.js
new file mode 100644
index 0000000000..a40a87132f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-set-lastindex-no-match.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: Setting `lastIndex` property of splitter after a failed match
+info: |
+ [...]
+ 24. Repeat, while q < size
+ a. Let setStatus be Set(splitter, "lastIndex", q, true).
+ [...]
+ e. If z is null, let q be AdvanceStringIndex(S, q, unicodeMatching).
+ [...]
+features: [Symbol.split, Symbol.species]
+---*/
+
+var obj = {
+ constructor: function() {}
+};
+var indices = '';
+var fakeRe = {
+ set lastIndex(val) {
+ indices += val + ',';
+ },
+ exec: function() {
+ return null;
+ }
+};
+obj.constructor[Symbol.species] = function() {
+ return fakeRe;
+};
+
+RegExp.prototype[Symbol.split].call(obj, 'abcd');
+
+assert.sameValue(indices, '0,1,2,3,');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-trailing-chars.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-trailing-chars.js
new file mode 100644
index 0000000000..6d1f6d3830
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/str-trailing-chars.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.11
+description: Characters after the final match are appended to the result
+info: |
+ [...]
+ 25. Let T be a String value equal to the substring of S consisting of the
+ elements at indices p (inclusive) through size (exclusive).
+ 26. Assert: The following call will never result in an abrupt completion.
+ 27. Perform CreateDataProperty(A, ToString(lengthA), T ).
+ 28. Return A.
+features: [Symbol.split]
+---*/
+
+var result = /d/[Symbol.split]('abcdefg');
+
+assert(Array.isArray(result));
+assert.sameValue(result.length, 2);
+assert.sameValue(result[0], 'abc');
+assert.sameValue(result[1], 'efg');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/this-val-non-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/this-val-non-obj.js
new file mode 100644
index 0000000000..8afd822474
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/this-val-non-obj.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: The `this` value must be an object
+es6id: 21.2.5.11
+info: |
+ 1. Let rx be the this value.
+ 2. If Type(rx) is not Object, throw a TypeError exception.
+features: [Symbol.split]
+---*/
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.split].call();
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.split].call(undefined);
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.split].call(null);
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.split].call(true);
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.split].call('string');
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.split].call(Symbol.split);
+});
+
+assert.throws(TypeError, function() {
+ RegExp.prototype[Symbol.split].call(86);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/u-lastindex-adv-thru-failure.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/u-lastindex-adv-thru-failure.js
new file mode 100644
index 0000000000..e73f1b9c0d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/u-lastindex-adv-thru-failure.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ lastIndex is advanced according to width of astral symbols following match failure
+es6id: 21.2.5.11
+info: |
+ 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
+
+ [...]
+ 7. Let flags be ToString(Get(rx, "flags")).
+ 8. ReturnIfAbrupt(flags).
+ 9. If flags contains "u", let unicodeMatching be true.
+ 10. Else, let unicodeMatching be false.
+ [...]
+ 24. Repeat, while q < size
+ a. Let setStatus be Set(splitter, "lastIndex", q, true).
+ b. ReturnIfAbrupt(setStatus).
+ c. Let z be RegExpExec(splitter, S).
+ d. ReturnIfAbrupt(z).
+ e. If z is null, let q be AdvanceStringIndex(S, q, unicodeMatching).
+features: [Symbol.split]
+---*/
+
+var result = /\udf06/u[Symbol.split]('\ud834\udf06');
+
+assert.sameValue(result.length, 1);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/u-lastindex-adv-thru-match.js b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/u-lastindex-adv-thru-match.js
new file mode 100644
index 0000000000..5bb444eaaf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/Symbol.split/u-lastindex-adv-thru-match.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ lastIndex is advanced according to width of astral symbols following match success
+es6id: 21.2.5.11
+info: |
+ 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
+
+ [...]
+ 7. Let flags be ToString(Get(rx, "flags")).
+ 8. ReturnIfAbrupt(flags).
+ 9. If flags contains "u", let unicodeMatching be true.
+ 10. Else, let unicodeMatching be false.
+ [...]
+ 24. Repeat, while q < size
+ a. Let setStatus be Set(splitter, "lastIndex", q, true).
+ b. ReturnIfAbrupt(setStatus).
+ c. Let z be RegExpExec(splitter, S).
+ d. ReturnIfAbrupt(z).
+ e. If z is null, let q be AdvanceStringIndex(S, q, unicodeMatching).
+ f. Else z is not null,
+ i. Let e be ToLength(Get(splitter, "lastIndex")).
+ ii. ReturnIfAbrupt(e).
+ iii. If e = p, let q be AdvanceStringIndex(S, q, unicodeMatching).
+features: [Symbol.split]
+---*/
+
+var result = /./u[Symbol.split]('\ud834\udf06');
+
+assert.sameValue(result.length, 2);
+assert.sameValue(result[0], '');
+assert.sameValue(result[1], '');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/cross-realm.js b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/cross-realm.js
new file mode 100644
index 0000000000..baa13fadd5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/cross-realm.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.dotall
+description: Invoked on a cross-realm object
+info: |
+ get RegExp.prototype.dotAll
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+ b. Otherwise, throw a TypeError exception.
+features: [regexp-dotall, cross-realm]
+---*/
+
+var dotAll = Object.getOwnPropertyDescriptor(RegExp.prototype, 'dotAll').get;
+var other = $262.createRealm().global;
+var otherRegExpProto = other.RegExp.prototype;
+var otherRegExpGetter = Object.getOwnPropertyDescriptor(otherRegExpProto, 'dotAll').get;
+
+assert.throws(TypeError, function() {
+ dotAll.call(otherRegExpProto);
+}, 'cross-realm RegExp.prototype');
+
+assert.throws(other.TypeError, function() {
+ otherRegExpGetter.call(RegExp.prototype);
+}, 'cross-realm RegExp.prototype getter method against primary realm RegExp.prototype');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/length.js b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/length.js
new file mode 100644
index 0000000000..1a6bb3afe2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/length.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.dotall
+description: >
+ get RegExp.prototype.dotAll.length is 0.
+info: |
+ get RegExp.prototype.dotAll
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this
+ value is equal to the largest number of named arguments shown in the
+ subclause headings for the function description, including optional
+ parameters. However, rest parameters shown using the form “...name”
+ are not included in the default argument count.
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [regexp-dotall]
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "dotAll");
+
+assert.sameValue(desc.get.length, 0);
+
+verifyProperty(desc.get, "length", {
+ enumerable: false,
+ writable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/name.js
new file mode 100644
index 0000000000..15d9117e62
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/name.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.dotall
+description: >
+ RegExp.prototype.dotAll name
+info: |
+ 17 ECMAScript Standard Built-in Objects
+
+ Functions that are specified as get or set accessor functions of built-in
+ properties have "get " or "set " prepended to the property name string.
+includes: [propertyHelper.js]
+features: [regexp-dotall]
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "dotAll");
+
+assert.sameValue(
+ desc.get.name,
+ "get dotAll"
+);
+
+verifyProperty(desc.get, "name", {
+ enumerable: false,
+ writable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/prop-desc.js b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/prop-desc.js
new file mode 100644
index 0000000000..dd00e948bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/prop-desc.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.dotall
+description: >
+ `pending` property descriptor
+info: |
+ RegExp.prototype.dotAll is an accessor property whose set accessor
+ function is undefined.
+
+ 17 ECMAScript Standard Built-in Objects
+
+ Every accessor property described in clauses 18 through 26 and in Annex B.2 has the attributes
+ { [[Enumerable]]: false, [[Configurable]]: true } unless otherwise specified. If only a get
+ accessor function is described, the set accessor function is the default value, undefined. If
+ only a set accessor is described the get accessor is the default value, undefined.
+includes: [propertyHelper.js]
+features: [regexp-dotall]
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "dotAll");
+
+assert.sameValue(desc.set, undefined);
+assert.sameValue(typeof desc.get, "function");
+
+verifyProperty(RegExp.prototype, "dotAll", {
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/this-val-invalid-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/this-val-invalid-obj.js
new file mode 100644
index 0000000000..76196d39f0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/this-val-invalid-obj.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.dotall
+description: Invoked on an object without an [[OriginalFlags]] internal slot
+info: |
+ get RegExp.prototype.dotAll
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+ b. Otherwise, throw a TypeError exception.
+features: [regexp-dotall]
+---*/
+
+var dotAll = Object.getOwnPropertyDescriptor(RegExp.prototype, 'dotAll').get;
+
+assert.throws(TypeError, function() {
+ dotAll.call({});
+}, 'ordinary object');
+
+assert.throws(TypeError, function() {
+ dotAll.call([]);
+}, 'array exotic object');
+
+assert.throws(TypeError, function() {
+ dotAll.call(arguments);
+}, 'arguments object');
+
+assert.throws(TypeError, function() {
+ dotAll.call(() => {});
+}, 'function object');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/this-val-non-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/this-val-non-obj.js
new file mode 100644
index 0000000000..1e6e0b16de
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/this-val-non-obj.js
@@ -0,0 +1,46 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.dotall
+description: >
+ `dotAll` accessor invoked on a non-object value
+info: |
+ get RegExp.prototype.dotAll
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+features: [Symbol, regexp-dotall]
+---*/
+
+var dotAll = Object.getOwnPropertyDescriptor(RegExp.prototype, "dotAll").get;
+
+assert.throws(TypeError, function() {
+ dotAll.call(undefined);
+}, "undefined");
+
+assert.throws(TypeError, function() {
+ dotAll.call(null);
+}, "null");
+
+assert.throws(TypeError, function() {
+ dotAll.call(true);
+}, "true");
+
+assert.throws(TypeError, function() {
+ dotAll.call("string");
+}, "string");
+
+assert.throws(TypeError, function() {
+ dotAll.call(Symbol("s"));
+}, "symbol");
+
+assert.throws(TypeError, function() {
+ dotAll.call(4);
+}, "number");
+
+assert.throws(TypeError, function() {
+ dotAll.call(4n);
+}, "bigint");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/this-val-regexp-prototype.js b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/this-val-regexp-prototype.js
new file mode 100644
index 0000000000..fc4f7178c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/this-val-regexp-prototype.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.dotall
+description: >
+ Return value of `undefined` when the "this" value is the RegExp prototype
+ object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+features: [regexp-dotall]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, "dotAll").get;
+
+assert.sameValue(get.call(RegExp.prototype), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/this-val-regexp.js b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/this-val-regexp.js
new file mode 100644
index 0000000000..428d2c78dc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/dotAll/this-val-regexp.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.dotall
+description: >
+ `dotAll` accessor function invoked on a RegExp instance
+info: |
+ 21.2.5.12 get RegExp.prototype.dotAll
+
+ 4. Let flags be the value of R’s [[OriginalFlags]] internal slot.
+ 5. If flags contains the code unit "s", return true.
+ 6. Return false.
+features: [regexp-dotall]
+---*/
+
+assert.sameValue(/./.dotAll, false, "/./.dotAll");
+assert.sameValue(/./i.dotAll, false, "/./i.dotAll");
+assert.sameValue(/./g.dotAll, false, "/./g.dotAll");
+assert.sameValue(/./y.dotAll, false, "/./y.dotAll");
+assert.sameValue(/./m.dotAll, false, "/./m.dotAll");
+
+assert.sameValue(/./s.dotAll, true, "/./s.dotAll");
+assert.sameValue(/./is.dotAll, true, "/./is.dotAll");
+assert.sameValue(/./sg.dotAll, true, "/./sg.dotAll");
+assert.sameValue(/./sy.dotAll, true, "/./sy.dotAll");
+assert.sameValue(/./ms.dotAll, true, "/./ms.dotAll");
+
+assert.sameValue(new RegExp(".", "").dotAll, false, "new RegExp('.', '').dotAll");
+assert.sameValue(new RegExp(".", "i").dotAll, false, "new RegExp('.', 'i').dotAll");
+assert.sameValue(new RegExp(".", "g").dotAll, false, "new RegExp('.', 'g').dotAll");
+assert.sameValue(new RegExp(".", "y").dotAll, false, "new RegExp('.', 'y').dotAll");
+assert.sameValue(new RegExp(".", "m").dotAll, false, "new RegExp('.', 'm').dotAll");
+
+assert.sameValue(new RegExp(".", "s").dotAll, true, "new RegExp('.', 's').dotAll");
+assert.sameValue(new RegExp(".", "is").dotAll, true, "new RegExp('.', 'is').dotAll");
+assert.sameValue(new RegExp(".", "sg").dotAll, true, "new RegExp('.', 'sg').dotAll");
+assert.sameValue(new RegExp(".", "sy").dotAll, true, "new RegExp('.', 'sy').dotAll");
+assert.sameValue(new RegExp(".", "ms").dotAll, true, "new RegExp('.', 'ms').dotAll");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/15.10.6.2-9-e-1.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/15.10.6.2-9-e-1.js
new file mode 100644
index 0000000000..ec873a700c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/15.10.6.2-9-e-1.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.10.6.2-9-e-1
+description: >
+ RegExp.prototype.exec - the removed step 9.e won't affected
+ current algorithm
+---*/
+
+ var str = "Hello World!";
+ var regObj = new RegExp("World");
+ var result = false;
+ result = regObj.exec(str).toString() === "World";
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A10.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A10.js
new file mode 100644
index 0000000000..30f70bedac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A10.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The RegExp.prototype.exec.length property has the attribute ReadOnly
+es5id: 15.10.6.2_A10
+description: Checking if varying the RegExp.prototype.exec.length property fails
+includes: [propertyHelper.js]
+---*/
+assert.sameValue(
+ RegExp.prototype.exec.hasOwnProperty('length'),
+ true,
+ 'RegExp.prototype.exec.hasOwnProperty(\'length\') must return true'
+);
+
+var __obj = RegExp.prototype.exec.length;
+
+verifyNotWritable(RegExp.prototype.exec, "length", null, function(){return "shifted";});
+
+assert.sameValue(
+ RegExp.prototype.exec.length,
+ __obj,
+ 'The value of RegExp.prototype.exec.length is expected to equal the value of __obj'
+);
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A11.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A11.js
new file mode 100644
index 0000000000..2cd62c397f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A11.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The length property of the exec method is 1
+es5id: 15.10.6.2_A11
+description: Checking RegExp.prototype.exec.length
+---*/
+assert.sameValue(
+ RegExp.prototype.exec.hasOwnProperty("length"),
+ true,
+ 'RegExp.prototype.exec.hasOwnProperty("length") must return true'
+);
+
+assert.sameValue(RegExp.prototype.exec.length, 1, 'The value of RegExp.prototype.exec.length is expected to be 1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A12.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A12.js
new file mode 100644
index 0000000000..86c5b57945
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A12.js
@@ -0,0 +1,15 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: regExp exec() acts like regExp.exec('undefined') (step 2)
+es5id: 15.10.6.2_A12
+description: Checking RegExp.prototype.exec
+---*/
+
+(/foo/).test('xfoox');
+var match = new RegExp('(.|\r|\n)*','').exec()[0];
+assert.notSameValue(match, 'xfoox', 'The value of match is not "xfoox"');
+assert.sameValue(match, 'undefined', 'The value of match is expected to be "undefined"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T1.js
new file mode 100644
index 0000000000..afbac70c61
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T1.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T1
+description: String is "123" and RegExp is /1|12/
+---*/
+
+var __executed = /1|12/.exec("123");
+
+var __expected = ["1"];
+__expected.index=0;
+__expected.input="123";
+
+assert.sameValue(
+ __executed instanceof Array,
+ true,
+ 'The result of evaluating (__executed instanceof Array) is expected to be true'
+);
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T10.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T10.js
new file mode 100644
index 0000000000..8da7239544
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T10.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T10
+description: String is 1.01 and RegExp is /1|12/
+---*/
+
+var __executed = /1|12/.exec(1.01);
+
+var __expected = ["1"];
+__expected.index=0;
+__expected.input="1.01";
+
+assert.sameValue(
+ __executed instanceof Array,
+ true,
+ 'The result of evaluating (__executed instanceof Array) is expected to be true'
+);
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T11.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T11.js
new file mode 100644
index 0000000000..826e9f1f0b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T11.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T11
+description: String is new Number(1.012) and RegExp is /2|12/
+---*/
+
+var __executed = /2|12/.exec(new Number(1.012));
+
+var __expected = ["12"];
+__expected.index=3;
+__expected.input="1.012";
+
+assert.sameValue(
+ __executed instanceof Array,
+ true,
+ 'The result of evaluating (__executed instanceof Array) is expected to be true'
+);
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T12.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T12.js
new file mode 100644
index 0000000000..25924e5aa6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T12.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T12
+description: >
+ String is {toString:function(){return Math.PI;}} and RegExp is
+ /\.14/
+---*/
+
+var __executed = /\.14/.exec({toString:function(){return Math.PI}});
+
+var __expected = [".14"];
+__expected.index=1;
+__expected.input=String(Math.PI);
+
+assert.sameValue(
+ __executed instanceof Array,
+ true,
+ 'The result of evaluating (__executed instanceof Array) is expected to be true'
+);
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T13.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T13.js
new file mode 100644
index 0000000000..c727f0db2b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T13.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T13
+description: String is true and RegExp is /t[a-b|q-s]/
+---*/
+
+var __executed = /t[a-b|q-s]/.exec(true);
+
+var __expected = ["tr"];
+__expected.index=0;
+__expected.input="true";
+
+assert.sameValue(
+ __executed instanceof Array,
+ true,
+ 'The result of evaluating (__executed instanceof Array) is expected to be true'
+);
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T14.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T14.js
new file mode 100644
index 0000000000..4b447fc451
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T14.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T14
+description: String is new Boolean and RegExp is /AL|se/
+---*/
+
+var __executed = /AL|se/.exec(new Boolean);
+
+var __expected = ["se"];
+__expected.index=3;
+__expected.input="false";
+
+assert.sameValue(
+ __executed instanceof Array,
+ true,
+ 'The result of evaluating (__executed instanceof Array) is expected to be true'
+);
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T15.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T15.js
new file mode 100644
index 0000000000..37eb4c6689
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T15.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T15
+description: "String is {toString:function(){return false;}} and RegExp is /LS/i"
+---*/
+
+var __executed = /LS/i.exec({toString:function(){return false}});
+
+var __expected = ["ls"];
+__expected.index=2;
+__expected.input="false";
+
+assert.sameValue(
+ __executed instanceof Array,
+ true,
+ 'The result of evaluating (__executed instanceof Array) is expected to be true'
+);
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T16.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T16.js
new file mode 100644
index 0000000000..45318b1bf6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T16.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T16
+description: RegExp is /undefined/ and call exec() without arguments
+---*/
+
+var __re = /undefined/.exec()[0];
+assert.sameValue(__re, "undefined", 'The value of __re is expected to be "undefined"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T17.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T17.js
new file mode 100644
index 0000000000..ed4f5280de
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T17.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T17
+description: String is null and RegExp is /ll|l/
+---*/
+
+var __executed = /ll|l/.exec(null);
+
+var __expected = ["ll"];
+__expected.index=2;
+__expected.input="null";
+
+assert.sameValue(
+ __executed instanceof Array,
+ true,
+ 'The result of evaluating (__executed instanceof Array) is expected to be true'
+);
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T18.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T18.js
new file mode 100644
index 0000000000..4682802f69
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T18.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T18
+description: String is undefined and RegExp is /nd|ne/
+---*/
+
+var __executed = /nd|ne/.exec(undefined);
+
+var __expected = ["nd"];
+__expected.index=1;
+__expected.input="undefined";
+
+assert.sameValue(
+ __executed instanceof Array,
+ true,
+ 'The result of evaluating (__executed instanceof Array) is expected to be true'
+);
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T19.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T19.js
new file mode 100644
index 0000000000..1a904a79df
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T19.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T19
+description: String is void 0 and RegExp is /e{1}/
+---*/
+
+var __executed = /e{1}/.exec(void 0);
+
+var __expected = ["e"];
+__expected.index=3;
+__expected.input="undefined";
+
+assert.sameValue(
+ __executed instanceof Array,
+ true,
+ 'The result of evaluating (__executed instanceof Array) is expected to be true'
+);
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T2.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T2.js
new file mode 100644
index 0000000000..1260136aa1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T2.js
@@ -0,0 +1,51 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T2
+description: String is new String("123") and RegExp is /((1)|(12))((3)|(23))/
+---*/
+
+var __re = /((1)|(12))((3)|(23))/;
+var __executed = __re.exec(new String("123"));
+
+var __expected = ["123", "1", "1", undefined, "23", undefined, "23"];
+__expected.index=0;
+__expected.input="123";
+
+assert.sameValue(
+ __executed instanceof Array,
+ true,
+ 'The result of evaluating (__executed instanceof Array) is expected to be true'
+);
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T20.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T20.js
new file mode 100644
index 0000000000..338e7ef05f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T20.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T20
+description: String is x and RegExp is /[a-f]d/, where x is undefined variable
+---*/
+
+var __executed = /[a-f]d/.exec(x);
+
+var __expected = ["ed"];
+__expected.index=7;
+__expected.input="undefined";
+
+assert.sameValue(
+ __executed instanceof Array,
+ true,
+ 'The result of evaluating (__executed instanceof Array) is expected to be true'
+);
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+var x;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T21.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T21.js
new file mode 100644
index 0000000000..f35ae8d538
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T21.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T21
+description: String is function(){}() and RegExp is /[a-z]n/
+---*/
+
+var __executed = /[a-z]n/.exec(function(){}());
+
+var __expected = ["un"];
+__expected.index=0;
+__expected.input="undefined";
+
+assert.sameValue(
+ __executed instanceof Array,
+ true,
+ 'The result of evaluating (__executed instanceof Array) is expected to be true'
+);
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T3.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T3.js
new file mode 100644
index 0000000000..c6e0d2f775
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T3.js
@@ -0,0 +1,50 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T3
+description: String is new Object("abcdefghi") and RegExp is /a[a-z]{2,4}/
+---*/
+
+var __executed = /a[a-z]{2,4}/.exec(new Object("abcdefghi"));
+
+var __expected = ["abcde"];
+__expected.index=0;
+__expected.input="abcdefghi";
+
+assert.sameValue(
+ __executed instanceof Array,
+ true,
+ 'The result of evaluating (__executed instanceof Array) is expected to be true'
+);
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T4.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T4.js
new file mode 100644
index 0000000000..fc4bdb79c7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T4.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T4
+description: >
+ String is {toString:function(){return "abcdefghi";}} and RegExp is
+ /a[a-z]{2,4}?/
+---*/
+
+var __executed = /a[a-z]{2,4}?/.exec({toString:function(){return "abcdefghi"}});
+
+var __expected = ["abc"];
+__expected.index=0;
+__expected.input="abcdefghi";
+
+assert.sameValue(
+ __executed instanceof Array,
+ true,
+ 'The result of evaluating (__executed instanceof Array) is expected to be true'
+);
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T5.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T5.js
new file mode 100644
index 0000000000..228127b9cd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T5.js
@@ -0,0 +1,53 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T5
+description: >
+ String is {toString:function(){return {};},
+ valueOf:function(){return "aabaac";}} and RegExp is
+ /(aa|aabaac|ba|b|c)* /
+---*/
+
+var __executed = /(aa|aabaac|ba|b|c)*/.exec({toString:function(){return {};}, valueOf:function(){return "aabaac";}});
+
+var __expected = ["aaba", "ba"];
+__expected.index=0;
+__expected.input="aabaac";
+
+assert.sameValue(
+ __executed instanceof Array,
+ true,
+ 'The result of evaluating (__executed instanceof Array) is expected to be true'
+);
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T6.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T6.js
new file mode 100644
index 0000000000..a06db4b6eb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T6.js
@@ -0,0 +1,52 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T6
+description: >
+ String is (function(){return "zaacbbbcac"})() and RegExp is
+ /(z)((a+)?(b+)?(c))* /
+---*/
+
+var __executed = /(z)((a+)?(b+)?(c))*/.exec((function(){return "zaacbbbcac"})());
+
+var __expected = ["zaacbbbcac", "z", "ac", "a", undefined, "c"];
+__expected.index=0;
+__expected.input="zaacbbbcac";
+
+assert.sameValue(
+ __executed instanceof Array,
+ true,
+ 'The result of evaluating (__executed instanceof Array) is expected to be true'
+);
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T7.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T7.js
new file mode 100644
index 0000000000..8d51e48ea1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T7.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T7
+description: >
+ String is {toString:function(){throw "intostr";}} and RegExp is
+ /[a-z]/
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[a-z]/.exec({toString:function(){throw "intostr"}}) throw "intostr". Actual: ' + (/[a-z]/.exec({toString:function(){throw "intostr"}})));
+} catch (e) {
+ assert.sameValue(e, "intostr", 'The value of e is expected to be "intostr"');
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T8.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T8.js
new file mode 100644
index 0000000000..c842675bb8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T8.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T8
+description: >
+ String is {toString:void 0, valueOf:function(){throw "invalof";}}
+ and RegExp is /[a-z]/
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[a-z]/.exec({toString:void 0, valueOf:function(){throw "invalof"}}) throw "invalof". Actual: ' + (/[a-z]/.exec({toString:void 0, valueOf:function(){throw "invalof"}})));
+} catch (e) {
+ assert.sameValue(e, "invalof", 'The value of e is expected to be "invalof"');
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T9.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T9.js
new file mode 100644
index 0000000000..42bda957e5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T9.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and
+ returns an Array object containing the results of the match, or null if the string did not match
+es5id: 15.10.6.2_A1_T9
+description: String is undefined variable and RegExp is /1|12/
+---*/
+
+var __string;
+
+var __re = /1|12/;
+assert.sameValue(__re.exec(__string), null, '__re.exec() must return null');
+
+function __string(){}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T1.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T1.js
new file mode 100644
index 0000000000..160fe731cd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T1.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.2_A2_T1
+description: The internal [[Class]] property is "Object"
+---*/
+
+var __instance = new Object;
+
+__instance.exec = RegExp.prototype.exec;
+
+try {
+ throw new Test262Error('#1.1: __instance = new Object; __instance.exec = RegExp.prototype.exec; __instance.exec("message to investigate"). Actual: ' + (__instance.exec("message to investigate")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T10.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T10.js
new file mode 100644
index 0000000000..377601dd09
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T10.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.2_A2_T10
+description: The tested object is undefined
+---*/
+
+var exec = RegExp.prototype.exec;
+
+try {
+ throw new Test262Error('#1.1: exec = RegExp.prototype.exec; exec("message to investigate"). Actual: ' + (exec("message to investigate")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T2.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T2.js
new file mode 100644
index 0000000000..b00031334e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T2.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.2_A2_T2
+description: The tested object is Math
+---*/
+
+var __instance = Math;
+
+__instance.exec = RegExp.prototype.exec;
+
+try {
+ __instance.exec("message to investigate");
+ throw new Test262Error('#1.1: __instance = Math; __instance.exec = RegExp.prototype.exec; __instance.exec("message to investigate")');
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T3.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T3.js
new file mode 100644
index 0000000000..36cedabf51
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T3.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.2_A2_T3
+description: The tested object is function object
+---*/
+
+__instance.exec = RegExp.prototype.exec;
+
+try {
+ __instance.exec("message to investigate");
+ throw new Test262Error('#1.1: __instance.exec = RegExp.prototype.exec; __instance.exec("message to investigate"); function __instance(){}');
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+function __instance(){};
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T4.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T4.js
new file mode 100644
index 0000000000..5cf0ba8d34
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T4.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.2_A2_T4
+description: The tested object is new String("[a-b]")
+---*/
+
+var __instance = new String("[a-b]");
+
+__instance.exec = RegExp.prototype.exec;
+
+ try {
+ throw new Test262Error('#1.1: __instance = new String("[a-b]"); __instance.exec = RegExp.prototype.exec; exec("message to investigate"). Actual: ' + (__instance.exec("message to investigate")));
+ } catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+ }
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T5.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T5.js
new file mode 100644
index 0000000000..4128d2a5c0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T5.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.2_A2_T5
+description: The tested object is new Boolean(false)
+---*/
+
+var __instance = new Boolean(false);
+
+__instance.exec = RegExp.prototype.exec;
+
+ try {
+ throw new Test262Error('#1.1: __instance = new Boolean(false); __instance.exec = RegExp.prototype.exec; exec("message to investigate"). Actual: ' + (__instance.exec("message to investigate")));
+ } catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+ }
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T6.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T6.js
new file mode 100644
index 0000000000..ebbb2a8a2a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T6.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.2_A2_T6
+description: The tested object is new Number(1.0)
+---*/
+
+var __instance = new Number(1.0);
+
+__instance.exec = RegExp.prototype.exec;
+
+try {
+ throw new Test262Error('#1.1: __instance = new Number(1.0); __instance.exec = RegExp.prototype.exec; __instance["exec"]("message to investigate"). Actual: ' + (__instance["exec"]("message to investigate")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T7.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T7.js
new file mode 100644
index 0000000000..be09f460f8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T7.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.2_A2_T7
+description: The tested object is false
+---*/
+
+var __instance = false;
+
+Object.prototype.exec = RegExp.prototype.exec;
+
+try {
+ throw new Test262Error('#1.1: __instance = false; Object.prototype.exec = RegExp.prototype.exec; __instance.exec("message to investigate"). Actual: ' + (__instance.exec("message to investigate")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T8.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T8.js
new file mode 100644
index 0000000000..4118289d6f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T8.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.2_A2_T8
+description: The tested object is "."
+---*/
+
+var __instance = ".";
+
+Object.prototype.exec = RegExp.prototype.exec;
+
+try {
+ throw new Test262Error('#1.1: __instance = "."; Object.prototype.exec = RegExp.prototype.exec; __instance.exec("message to investigate"). Actual: ' + (__instance.exec("message to investigate")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T9.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T9.js
new file mode 100644
index 0000000000..83f8f5945a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A2_T9.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.2_A2_T9
+description: The tested object is 1.0
+---*/
+
+var __instance = 1.0;
+
+Object.prototype.exec = RegExp.prototype.exec;
+
+try {
+ throw new Test262Error('#1.1: __instance = 1.0; Object.prototype.exec = RegExp.prototype.exec; __instance.exec("message to investigate"). Actual: ' + (__instance.exec("message to investigate")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T1.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T1.js
new file mode 100644
index 0000000000..52d3ccc26d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true and lastIndex not changed manually,
+ next exec calling start to match from position where current match finished
+es5id: 15.10.6.2_A3_T1
+description: "RegExp is /(?:ab|cd)\\d?/g and tested string is \"ab cd2 ab34 cd\""
+---*/
+
+var __re = /(?:ab|cd)\d?/g;
+
+var __matched = [];
+
+var __expected = ["ab", "cd2", "ab3", "cd"];
+
+do{
+ var __executed = __re.exec("ab cd2 ab34 cd");
+ if (__executed !== null) {
+ __matched.push(__executed[0]);
+ } else {
+ break;
+ }
+}while(true);
+
+assert.sameValue(
+ __expected.length,
+ __matched.length,
+ 'The value of __expected.length is expected to equal the value of __matched.length'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __expected[index],
+ __matched[index],
+ 'The value of __expected[index] is expected to equal the value of __matched[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T2.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T2.js
new file mode 100644
index 0000000000..2c9c8b5171
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T2.js
@@ -0,0 +1,153 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true and lastIndex not changed manually,
+ next exec calling start to match from position where current match finished
+es5id: 15.10.6.2_A3_T2
+description: RegExp is /[Nn]evermore/g and tested string is very long string
+---*/
+
+var __the__raven = " Once upon a midnight dreary, while I pondered weak and weary," +
+ "Over many a quaint and curious volume of forgotten lore," +
+ "While I nodded, nearly napping, suddenly there came a tapping," +
+ "As of some one gently rapping, rapping at my chamber door." +
+ "`'Tis some visitor,' I muttered, `tapping at my chamber door -" +
+ "Only this, and nothing more.'" +
+ "Ah, distinctly I remember it was in the bleak December," +
+ "And each separate dying ember wrought its ghost upon the floor." +
+ "Eagerly I wished the morrow; - vainly I had sought to borrow" +
+ "From my books surcease of sorrow - sorrow for the lost Lenore -" +
+ "For the rare and radiant maiden whom the angels named Lenore -" +
+ "Nameless here for evermore." +
+ "\n" +
+ "And the silken sad uncertain rustling of each purple curtain" +
+ "Thrilled me - filled me with fantastic terrors never felt before;" +
+ "So that now, to still the beating of my heart, I stood repeating" +
+ "`'Tis some visitor entreating entrance at my chamber door -" +
+ "Some late visitor entreating entrance at my chamber door; -" +
+ "This it is, and nothing more,'" +
+ "Presently my soul grew stronger; hesitating then no longer," +
+ "`Sir,' said I, `or Madam, truly your forgiveness I implore;" +
+ "But the fact is I was napping, and so gently you came rapping," +
+ "And so faintly you came tapping, tapping at my chamber door," +
+ "That I scarce was sure I heard you' - here I opened wide the door; -" +
+ "Darkness there, and nothing more." +
+ "\n" +
+ "Deep into that darkness peering, long I stood there wondering, fearing," +
+ "Doubting, dreaming dreams no mortal ever dared to dream before" +
+ "But the silence was unbroken, and the darkness gave no token," +
+ "And the only word there spoken was the whispered word, `Lenore!'" +
+ "This I whispered, and an echo murmured back the word, `Lenore!'" +
+ "Merely this and nothing more." +
+ "\n" +
+ "Back into the chamber turning, all my soul within me burning," +
+ "Soon again I heard a tapping somewhat louder than before." +
+ "`Surely,' said I, `surely that is something at my window lattice;" +
+ "Let me see then, what thereat is, and this mystery explore -" +
+ "Let my heart be still a moment and this mystery explore; -" +
+ "'Tis the wind and nothing more!'" +
+ "\n" +
+ "Open here I flung the shutter, when, with many a flirt and flutter," +
+ "In there stepped a stately raven of the saintly days of yore." +
+ "Not the least obeisance made he; not a minute stopped or stayed he;" +
+ "But, with mien of lord or lady, perched above my chamber door -" +
+ "Perched upon a bust of Pallas just above my chamber door -" +
+ "Perched, and sat, and nothing more." +
+ "\n" +
+ "Then this ebony bird beguiling my sad fancy into smiling," +
+ "By the grave and stern decorum of the countenance it wore," +
+ "`Though thy crest be shorn and shaven, thou,' I said, `art sure no craven." +
+ "Ghastly grim and ancient raven wandering from the nightly shore -" +
+ "Tell me what thy lordly name is on the Night's Plutonian shore!'" +
+ "Quoth the raven, `Nevermore.'" +
+ "-n" +
+ "Much I marvelled this ungainly fowl to hear discourse so plainly," +
+ "Though its answer little meaning - little relevancy bore;" +
+ "For we cannot help agreeing that no living human being" +
+ "Ever yet was blessed with seeing bird above his chamber door -" +
+ "Bird or beast above the sculptured bust above his chamber door," +
+ "With such name as `Nevermore.'" +
+ "\n" +
+ "But the raven, sitting lonely on the placid bust, spoke only," +
+ "That one word, as if his soul in that one word he did outpour." +
+ "Nothing further then he uttered - not a feather then he fluttered -" +
+ "Till I scarcely more than muttered `Other friends have flown before -" +
+ "On the morrow he will leave me, as my hopes have flown before.'" +
+ "Then the bird said, `Nevermore.'" +
+ "\n" +
+ "Startled at the stillness broken by reply so aptly spoken," +
+ "`Doubtless,' said I, `what it utters is its only stock and store," +
+ "Caught from some unhappy master whom unmerciful disaster" +
+ "Followed fast and followed faster till his songs one burden bore -" +
+ "Till the dirges of his hope that melancholy burden bore" +
+ "Of \"Never-nevermore.\"'" +
+ "\n" +
+ "But the raven still beguiling all my sad soul into smiling," +
+ "Straight I wheeled a cushioned seat in front of bird and bust and door;" +
+ "Then, upon the velvet sinking, I betook myself to linking" +
+ "Fancy unto fancy, thinking what this ominous bird of yore -" +
+ "What this grim, ungainly, ghastly, gaunt, and ominous bird of yore" +
+ "Meant in croaking `Nevermore.'" +
+ "\n" +
+ "This I sat engaged in guessing, but no syllable expressing" +
+ "To the fowl whose fiery eyes now burned into my bosom's core;" +
+ "This and more I sat divining, with my head at ease reclining" +
+ "On the cushion's velvet lining that the lamp-light gloated o'er," +
+ "But whose velvet violet lining with the lamp-light gloating o'er," +
+ "She shall press, ah, nevermore!" +
+ "\n" +
+ "Then, methought, the air grew denser, perfumed from an unseen censer" +
+ "Swung by Seraphim whose foot-falls tinkled on the tufted floor." +
+ "`Wretch,' I cried, `thy God hath lent thee - by these angels he has sent thee" +
+ "Respite - respite and nepenthe from thy memories of Lenore!" +
+ "Quaff, oh quaff this kind nepenthe, and forget this lost Lenore!'" +
+ "Quoth the raven, `Nevermore.'" +
+ "\n" +
+ "`Prophet!' said I, `thing of evil! - prophet still, if bird or devil! -" +
+ "Whether tempter sent, or whether tempest tossed thee here ashore," +
+ "Desolate yet all undaunted, on this desert land enchanted -" +
+ "On this home by horror haunted - tell me truly, I implore -" +
+ "Is there - is there balm in Gilead? - tell me - tell me, I implore!'" +
+ "Quoth the raven, `Nevermore.'" +
+ "\n" +
+ "`Prophet!' said I, `thing of evil! - prophet still, if bird or devil!" +
+ "By that Heaven that bends above us - by that God we both adore -" +
+ "Tell this soul with sorrow laden if, within the distant Aidenn," +
+ "It shall clasp a sainted maiden whom the angels named Lenore -" +
+ "Clasp a rare and radiant maiden, whom the angels named Lenore?'" +
+ "Quoth the raven, `Nevermore.'" +
+ "\n" +
+ "`Be that word our sign of parting, bird or fiend!' I shrieked upstarting -" +
+ "`Get thee back into the tempest and the Night's Plutonian shore!" +
+ "Leave no black plume as a token of that lie thy soul hath spoken!" +
+ "Leave my loneliness unbroken! - quit the bust above my door!" +
+ "Take thy beak from out my heart, and take thy form from off my door!'" +
+ "Quoth the raven, `Nevermore.'" +
+ "\n" +
+ "And the raven, never flitting, still is sitting, still is sitting" +
+ "On the pallid bust of Pallas just above my chamber door;" +
+ "And his eyes have all the seeming of a demon's that is dreaming," +
+ "And the lamp-light o'er him streaming throws his shadow on the floor;" +
+ "And my soul from out that shadow that lies floating on the floor" +
+ "Shall be lifted - nevermore!"
+
+var NEVERMORE=11;
+
+var __re = /[Nn]evermore/g;
+var __matched=0;
+
+do{
+ var __executed = __re.exec(__the__raven);
+ if (__executed !== null) {
+ __matched++;
+ } else {
+ break;
+ }
+}while(1);
+
+assert.sameValue(__matched, NEVERMORE, 'The value of __matched is expected to equal the value of NEVERMORE');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T3.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T3.js
new file mode 100644
index 0000000000..dec512cc87
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T3.js
@@ -0,0 +1,157 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true and lastIndex not changed manually,
+ next exec calling start to match from position where current match finished
+es5id: 15.10.6.2_A3_T3
+description: RegExp is /[Nn]?evermore/g and tested string is very long string
+---*/
+
+var __the__raven = " Once upon a midnight dreary, while I pondered weak and weary," +
+ "Over many a quaint and curious volume of forgotten lore," +
+ "While I nodded, nearly napping, suddenly there came a tapping," +
+ "As of some one gently rapping, rapping at my chamber door." +
+ "`'Tis some visitor,' I muttered, `tapping at my chamber door -" +
+ "Only this, and nothing more.'" +
+ "Ah, distinctly I remember it was in the bleak December," +
+ "And each separate dying ember wrought its ghost upon the floor." +
+ "Eagerly I wished the morrow; - vainly I had sought to borrow" +
+ "From my books surcease of sorrow - sorrow for the lost Lenore -" +
+ "For the rare and radiant maiden whom the angels named Lenore -" +
+ "Nameless here for evermore." +
+ "\n" +
+ "And the silken sad uncertain rustling of each purple curtain" +
+ "Thrilled me - filled me with fantastic terrors never felt before;" +
+ "So that now, to still the beating of my heart, I stood repeating" +
+ "`'Tis some visitor entreating entrance at my chamber door -" +
+ "Some late visitor entreating entrance at my chamber door; -" +
+ "This it is, and nothing more,'" +
+ "Presently my soul grew stronger; hesitating then no longer," +
+ "`Sir,' said I, `or Madam, truly your forgiveness I implore;" +
+ "But the fact is I was napping, and so gently you came rapping," +
+ "And so faintly you came tapping, tapping at my chamber door," +
+ "That I scarce was sure I heard you' - here I opened wide the door; -" +
+ "Darkness there, and nothing more." +
+ "\n" +
+ "Deep into that darkness peering, long I stood there wondering, fearing," +
+ "Doubting, dreaming dreams no mortal ever dared to dream before" +
+ "But the silence was unbroken, and the darkness gave no token," +
+ "And the only word there spoken was the whispered word, `Lenore!'" +
+ "This I whispered, and an echo murmured back the word, `Lenore!'" +
+ "Merely this and nothing more." +
+ "\n" +
+ "Back into the chamber turning, all my soul within me burning," +
+ "Soon again I heard a tapping somewhat louder than before." +
+ "`Surely,' said I, `surely that is something at my window lattice;" +
+ "Let me see then, what thereat is, and this mystery explore -" +
+ "Let my heart be still a moment and this mystery explore; -" +
+ "'Tis the wind and nothing more!'" +
+ "\n" +
+ "Open here I flung the shutter, when, with many a flirt and flutter," +
+ "In there stepped a stately raven of the saintly days of yore." +
+ "Not the least obeisance made he; not a minute stopped or stayed he;" +
+ "But, with mien of lord or lady, perched above my chamber door -" +
+ "Perched upon a bust of Pallas just above my chamber door -" +
+ "Perched, and sat, and nothing more." +
+ "\n" +
+ "Then this ebony bird beguiling my sad fancy into smiling," +
+ "By the grave and stern decorum of the countenance it wore," +
+ "`Though thy crest be shorn and shaven, thou,' I said, `art sure no craven." +
+ "Ghastly grim and ancient raven wandering from the nightly shore -" +
+ "Tell me what thy lordly name is on the Night's Plutonian shore!'" +
+ "Quoth the raven, `Nevermore.'" +
+ "-n" +
+ "Much I marvelled this ungainly fowl to hear discourse so plainly," +
+ "Though its answer little meaning - little relevancy bore;" +
+ "For we cannot help agreeing that no living human being" +
+ "Ever yet was blessed with seeing bird above his chamber door -" +
+ "Bird or beast above the sculptured bust above his chamber door," +
+ "With such name as `Nevermore.'" +
+ "\n" +
+ "But the raven, sitting lonely on the placid bust, spoke only," +
+ "That one word, as if his soul in that one word he did outpour." +
+ "Nothing further then he uttered - not a feather then he fluttered -" +
+ "Till I scarcely more than muttered `Other friends have flown before -" +
+ "On the morrow he will leave me, as my hopes have flown before.'" +
+ "Then the bird said, `Nevermore.'" +
+ "\n" +
+ "Startled at the stillness broken by reply so aptly spoken," +
+ "`Doubtless,' said I, `what it utters is its only stock and store," +
+ "Caught from some unhappy master whom unmerciful disaster" +
+ "Followed fast and followed faster till his songs one burden bore -" +
+ "Till the dirges of his hope that melancholy burden bore" +
+ "Of \"Never-nevermore.\"'" +
+ "\n" +
+ "But the raven still beguiling all my sad soul into smiling," +
+ "Straight I wheeled a cushioned seat in front of bird and bust and door;" +
+ "Then, upon the velvet sinking, I betook myself to linking" +
+ "Fancy unto fancy, thinking what this ominous bird of yore -" +
+ "What this grim, ungainly, ghastly, gaunt, and ominous bird of yore" +
+ "Meant in croaking `Nevermore.'" +
+ "\n" +
+ "This I sat engaged in guessing, but no syllable expressing" +
+ "To the fowl whose fiery eyes now burned into my bosom's core;" +
+ "This and more I sat divining, with my head at ease reclining" +
+ "On the cushion's velvet lining that the lamp-light gloated o'er," +
+ "But whose velvet violet lining with the lamp-light gloating o'er," +
+ "She shall press, ah, nevermore!" +
+ "\n" +
+ "Then, methought, the air grew denser, perfumed from an unseen censer" +
+ "Swung by Seraphim whose foot-falls tinkled on the tufted floor." +
+ "`Wretch,' I cried, `thy God hath lent thee - by these angels he has sent thee" +
+ "Respite - respite and nepenthe from thy memories of Lenore!" +
+ "Quaff, oh quaff this kind nepenthe, and forget this lost Lenore!'" +
+ "Quoth the raven, `Nevermore.'" +
+ "\n" +
+ "`Prophet!' said I, `thing of evil! - prophet still, if bird or devil! -" +
+ "Whether tempter sent, or whether tempest tossed thee here ashore," +
+ "Desolate yet all undaunted, on this desert land enchanted -" +
+ "On this home by horror haunted - tell me truly, I implore -" +
+ "Is there - is there balm in Gilead? - tell me - tell me, I implore!'" +
+ "Quoth the raven, `Nevermore.'" +
+ "\n" +
+ "`Prophet!' said I, `thing of evil! - prophet still, if bird or devil!" +
+ "By that Heaven that bends above us - by that God we both adore -" +
+ "Tell this soul with sorrow laden if, within the distant Aidenn," +
+ "It shall clasp a sainted maiden whom the angels named Lenore -" +
+ "Clasp a rare and radiant maiden, whom the angels named Lenore?'" +
+ "Quoth the raven, `Nevermore.'" +
+ "\n" +
+ "`Be that word our sign of parting, bird or fiend!' I shrieked upstarting -" +
+ "`Get thee back into the tempest and the Night's Plutonian shore!" +
+ "Leave no black plume as a token of that lie thy soul hath spoken!" +
+ "Leave my loneliness unbroken! - quit the bust above my door!" +
+ "Take thy beak from out my heart, and take thy form from off my door!'" +
+ "Quoth the raven, `Nevermore.'" +
+ "\n" +
+ "And the raven, never flitting, still is sitting, still is sitting" +
+ "On the pallid bust of Pallas just above my chamber door;" +
+ "And his eyes have all the seeming of a demon's that is dreaming," +
+ "And the lamp-light o'er him streaming throws his shadow on the floor;" +
+ "And my soul from out that shadow that lies floating on the floor" +
+ "Shall be lifted - nevermore!"
+
+var NEVERMORE_AND_EVERMORE=12;
+
+var __re = /[Nn]?evermore/g;
+var __matched=0;
+
+do{
+ var __executed = __re.exec(__the__raven);
+ if (__executed !== null) {
+ __matched++;
+ } else {
+ break;
+ }
+}while(1);
+
+assert.sameValue(
+ __matched,
+ NEVERMORE_AND_EVERMORE,
+ 'The value of __matched is expected to equal the value of NEVERMORE_AND_EVERMORE'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T4.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T4.js
new file mode 100644
index 0000000000..dd54ccca23
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T4.js
@@ -0,0 +1,159 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true and lastIndex not changed manually,
+ next exec calling start to match from position where current match finished
+es5id: 15.10.6.2_A3_T4
+description: >
+ RegExp is /([Nn]?ever|([Nn]othing\s{1,}))more/g and tested string
+ is very long string
+---*/
+
+var __the__raven = " Once upon a midnight dreary, while I pondered weak and weary," +
+ "Over many a quaint and curious volume of forgotten lore," +
+ "While I nodded, nearly napping, suddenly there came a tapping," +
+ "As of some one gently rapping, rapping at my chamber door." +
+ "`'Tis some visitor,' I muttered, `tapping at my chamber door -" +
+ "Only this, and nothing more.'" +
+ "Ah, distinctly I remember it was in the bleak December," +
+ "And each separate dying ember wrought its ghost upon the floor." +
+ "Eagerly I wished the morrow; - vainly I had sought to borrow" +
+ "From my books surcease of sorrow - sorrow for the lost Lenore -" +
+ "For the rare and radiant maiden whom the angels named Lenore -" +
+ "Nameless here for evermore." +
+ "\n" +
+ "And the silken sad uncertain rustling of each purple curtain" +
+ "Thrilled me - filled me with fantastic terrors never felt before;" +
+ "So that now, to still the beating of my heart, I stood repeating" +
+ "`'Tis some visitor entreating entrance at my chamber door -" +
+ "Some late visitor entreating entrance at my chamber door; -" +
+ "This it is, and nothing more,'" +
+ "Presently my soul grew stronger; hesitating then no longer," +
+ "`Sir,' said I, `or Madam, truly your forgiveness I implore;" +
+ "But the fact is I was napping, and so gently you came rapping," +
+ "And so faintly you came tapping, tapping at my chamber door," +
+ "That I scarce was sure I heard you' - here I opened wide the door; -" +
+ "Darkness there, and nothing more." +
+ "\n" +
+ "Deep into that darkness peering, long I stood there wondering, fearing," +
+ "Doubting, dreaming dreams no mortal ever dared to dream before" +
+ "But the silence was unbroken, and the darkness gave no token," +
+ "And the only word there spoken was the whispered word, `Lenore!'" +
+ "This I whispered, and an echo murmured back the word, `Lenore!'" +
+ "Merely this and nothing more." +
+ "\n" +
+ "Back into the chamber turning, all my soul within me burning," +
+ "Soon again I heard a tapping somewhat louder than before." +
+ "`Surely,' said I, `surely that is something at my window lattice;" +
+ "Let me see then, what thereat is, and this mystery explore -" +
+ "Let my heart be still a moment and this mystery explore; -" +
+ "'Tis the wind and nothing more!'" +
+ "\n" +
+ "Open here I flung the shutter, when, with many a flirt and flutter," +
+ "In there stepped a stately raven of the saintly days of yore." +
+ "Not the least obeisance made he; not a minute stopped or stayed he;" +
+ "But, with mien of lord or lady, perched above my chamber door -" +
+ "Perched upon a bust of Pallas just above my chamber door -" +
+ "Perched, and sat, and nothing more." +
+ "\n" +
+ "Then this ebony bird beguiling my sad fancy into smiling," +
+ "By the grave and stern decorum of the countenance it wore," +
+ "`Though thy crest be shorn and shaven, thou,' I said, `art sure no craven." +
+ "Ghastly grim and ancient raven wandering from the nightly shore -" +
+ "Tell me what thy lordly name is on the Night's Plutonian shore!'" +
+ "Quoth the raven, `Nevermore.'" +
+ "-n" +
+ "Much I marvelled this ungainly fowl to hear discourse so plainly," +
+ "Though its answer little meaning - little relevancy bore;" +
+ "For we cannot help agreeing that no living human being" +
+ "Ever yet was blessed with seeing bird above his chamber door -" +
+ "Bird or beast above the sculptured bust above his chamber door," +
+ "With such name as `Nevermore.'" +
+ "\n" +
+ "But the raven, sitting lonely on the placid bust, spoke only," +
+ "That one word, as if his soul in that one word he did outpour." +
+ "Nothing further then he uttered - not a feather then he fluttered -" +
+ "Till I scarcely more than muttered `Other friends have flown before -" +
+ "On the morrow he will leave me, as my hopes have flown before.'" +
+ "Then the bird said, `Nevermore.'" +
+ "\n" +
+ "Startled at the stillness broken by reply so aptly spoken," +
+ "`Doubtless,' said I, `what it utters is its only stock and store," +
+ "Caught from some unhappy master whom unmerciful disaster" +
+ "Followed fast and followed faster till his songs one burden bore -" +
+ "Till the dirges of his hope that melancholy burden bore" +
+ "Of \"Never-nevermore.\"'" +
+ "\n" +
+ "But the raven still beguiling all my sad soul into smiling," +
+ "Straight I wheeled a cushioned seat in front of bird and bust and door;" +
+ "Then, upon the velvet sinking, I betook myself to linking" +
+ "Fancy unto fancy, thinking what this ominous bird of yore -" +
+ "What this grim, ungainly, ghastly, gaunt, and ominous bird of yore" +
+ "Meant in croaking `Nevermore.'" +
+ "\n" +
+ "This I sat engaged in guessing, but no syllable expressing" +
+ "To the fowl whose fiery eyes now burned into my bosom's core;" +
+ "This and more I sat divining, with my head at ease reclining" +
+ "On the cushion's velvet lining that the lamp-light gloated o'er," +
+ "But whose velvet violet lining with the lamp-light gloating o'er," +
+ "She shall press, ah, nevermore!" +
+ "\n" +
+ "Then, methought, the air grew denser, perfumed from an unseen censer" +
+ "Swung by Seraphim whose foot-falls tinkled on the tufted floor." +
+ "`Wretch,' I cried, `thy God hath lent thee - by these angels he has sent thee" +
+ "Respite - respite and nepenthe from thy memories of Lenore!" +
+ "Quaff, oh quaff this kind nepenthe, and forget this lost Lenore!'" +
+ "Quoth the raven, `Nevermore.'" +
+ "\n" +
+ "`Prophet!' said I, `thing of evil! - prophet still, if bird or devil! -" +
+ "Whether tempter sent, or whether tempest tossed thee here ashore," +
+ "Desolate yet all undaunted, on this desert land enchanted -" +
+ "On this home by horror haunted - tell me truly, I implore -" +
+ "Is there - is there balm in Gilead? - tell me - tell me, I implore!'" +
+ "Quoth the raven, `Nevermore.'" +
+ "\n" +
+ "`Prophet!' said I, `thing of evil! - prophet still, if bird or devil!" +
+ "By that Heaven that bends above us - by that God we both adore -" +
+ "Tell this soul with sorrow laden if, within the distant Aidenn," +
+ "It shall clasp a sainted maiden whom the angels named Lenore -" +
+ "Clasp a rare and radiant maiden, whom the angels named Lenore?'" +
+ "Quoth the raven, `Nevermore.'" +
+ "\n" +
+ "`Be that word our sign of parting, bird or fiend!' I shrieked upstarting -" +
+ "`Get thee back into the tempest and the Night's Plutonian shore!" +
+ "Leave no black plume as a token of that lie thy soul hath spoken!" +
+ "Leave my loneliness unbroken! - quit the bust above my door!" +
+ "Take thy beak from out my heart, and take thy form from off my door!'" +
+ "Quoth the raven, `Nevermore.'" +
+ "\n" +
+ "And the raven, never flitting, still is sitting, still is sitting" +
+ "On the pallid bust of Pallas just above my chamber door;" +
+ "And his eyes have all the seeming of a demon's that is dreaming," +
+ "And the lamp-light o'er him streaming throws his shadow on the floor;" +
+ "And my soul from out that shadow that lies floating on the floor" +
+ "Shall be lifted - nevermore!"
+
+var ALL_THE_HOPELESS_MORE=18;
+
+var __re = /([Nn]?ever|([Nn]othing\s{1,}))more/g;
+var __matched=0;
+
+do{
+ var __executed = __re.exec(__the__raven);
+ if (__executed !== null) {
+ __matched++;
+ } else {
+ break;
+ }
+}while(1);
+
+assert.sameValue(
+ __matched,
+ ALL_THE_HOPELESS_MORE,
+ 'The value of __matched is expected to equal the value of ALL_THE_HOPELESS_MORE'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T5.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T5.js
new file mode 100644
index 0000000000..a457312611
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T5.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true and lastIndex not changed manually,
+ next exec calling start to match from position where current match finished
+es5id: 15.10.6.2_A3_T5
+description: RegExp is /\d+/g and tested string is "123 456 789"
+---*/
+
+var __re = /\d+/g;
+
+var __matched = [];
+
+var __expected = ["123","456","789"];
+
+do{
+ var __executed = __re.exec("123 456 789");
+ if (__executed !== null) {
+ __matched.push(__executed[0]);
+ } else {
+ break;
+ }
+}while(true);
+
+assert.sameValue(
+ __expected.length,
+ __matched.length,
+ 'The value of __expected.length is expected to equal the value of __matched.length'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __expected[index],
+ __matched[index],
+ 'The value of __expected[index] is expected to equal the value of __matched[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T6.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T6.js
new file mode 100644
index 0000000000..4c4c1491a6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T6.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true and lastIndex not changed manually,
+ next exec calling start to match from position where current match finished
+es5id: 15.10.6.2_A3_T6
+description: RegExp is /(\d+)/g and tested string is "123 456 789"
+---*/
+
+var __re = /(\d+)/g;
+
+var __matched = [];
+
+var __expected = ["123","456","789"];
+
+do{
+ var __executed = __re.exec("123 456 789");
+ if (__executed !== null) {
+ __matched.push(__executed[0]);
+ } else {
+ break;
+ }
+}while(true);
+
+assert.sameValue(
+ __expected.length,
+ __matched.length,
+ 'The value of __expected.length is expected to equal the value of __matched.length'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __expected[index],
+ __matched[index],
+ 'The value of __expected[index] is expected to equal the value of __matched[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T7.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T7.js
new file mode 100644
index 0000000000..75232f1ea3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A3_T7.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true and lastIndex not changed manually,
+ next exec calling start to match from position where current match finished
+es5id: 15.10.6.2_A3_T7
+description: RegExp is /\d+/ and tested string is "123 456 789"
+---*/
+
+var __re = /\d+/;
+
+var __matched = [];
+
+var __expected = ["123","123","123","123","123","123","123","123","123","123"];
+
+do{
+ var __executed = __re.exec("123 456 789");
+ if (__executed !== null) {
+ __matched.push(__executed[0]);
+ } else {
+ break;
+ }
+}while(__matched.length<10);
+
+assert.sameValue(
+ __expected.length,
+ __matched.length,
+ 'The value of __expected.length is expected to equal the value of __matched.length'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __expected[index],
+ __matched[index],
+ 'The value of __expected[index] is expected to equal the value of __matched[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T1.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T1.js
new file mode 100644
index 0000000000..22fa388398
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T1.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true next exec calling start to match from lastIndex position
+es5id: 15.10.6.2_A4_T1
+description: Call first exec, then set re.lastIndex = 12 and again call exec
+---*/
+
+var __re = /(?:ab|cd)\d?/g;
+
+var __executed = __re.exec("aacd2233ab12nm444ab42");
+
+var __expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+__re.lastIndex = 12;
+
+__executed = __re.exec("aacd2233ab12nm444ab42");
+
+__expected = ["ab4"];
+__expected.index = 17;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T10.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T10.js
new file mode 100644
index 0000000000..5c3cbd0ff4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T10.js
@@ -0,0 +1,84 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true next exec calling start to match from lastIndex position
+es5id: 15.10.6.2_A4_T10
+description: >
+ Call first exec, then set re.lastIndex =
+ {valueOf:function(){return 12;}} and again call exec
+---*/
+
+var __re = /(?:ab|cd)\d?/g;
+
+var __executed = __re.exec("aacd2233ab12nm444ab42");
+
+var __expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+var __obj = {valueOf:function(){return 12;}};
+
+__re.lastIndex = __obj;
+
+__executed = __re.exec("aacd2233ab12nm444ab42");
+
+__expected = ["ab4"];
+__expected.index = 17;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T11.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T11.js
new file mode 100644
index 0000000000..6d8559da56
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T11.js
@@ -0,0 +1,60 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true next exec calling start to match from lastIndex position
+es5id: 15.10.6.2_A4_T11
+description: >
+ Call first exec, then set re.lastIndex = {valueOf:function(){throw
+ "intoint";}} and again call exec
+---*/
+
+var __re = /(?:ab|cd)\d?/g;
+
+var __executed = __re.exec("aacd2233ab12nm444ab42");
+
+var __expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+var __obj = {valueOf:function(){throw "intoint";}};
+
+__re.lastIndex = __obj;
+
+try {
+ throw new Test262Error('#5.1: __obj = {valueOf:function(){throw "intoint";}}; __re.lastIndex = __obj; __executed = __re.exec("aacd2233ab12nm444ab42") throw "intoint". Actual: ' + (__re.exec("aacd2233ab12nm444ab42")));
+} catch (e) {
+ assert.sameValue(e, "intoint", 'The value of e is expected to be "intoint"');
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T12.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T12.js
new file mode 100644
index 0000000000..f9e6a6df38
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T12.js
@@ -0,0 +1,85 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true next exec calling start to match from lastIndex position
+es5id: 15.10.6.2_A4_T12
+description: >
+ Call first exec, then set re.lastIndex =
+ {toString:function(){return 12;},valueOf:function(){return {};}}
+ and again call exec
+---*/
+
+var __re = /(?:ab|cd)\d?/g;
+
+var __executed = __re.exec("aacd2233ab12nm444ab42");
+
+var __expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+var __obj = {toString:function(){return 12;},valueOf:function(){return {};}};
+
+__re.lastIndex = __obj;
+
+__executed = __re.exec("aacd2233ab12nm444ab42");
+
+__expected = ["ab4"];
+__expected.index = 17;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T2.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T2.js
new file mode 100644
index 0000000000..cc3d4a67ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T2.js
@@ -0,0 +1,82 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true next exec calling start to match from lastIndex position
+es5id: 15.10.6.2_A4_T2
+description: >
+ Call first exec, then set re.lastIndex = undefined and again call
+ exec
+---*/
+
+var __re = /(?:ab|cd)\d?/g;
+
+var __executed = __re.exec("aacd2233ab12nm444ab42");
+
+var __expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+__re.lastIndex = undefined;
+
+__executed = __re.exec("aacd2233ab12nm444ab42");
+
+__expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T3.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T3.js
new file mode 100644
index 0000000000..eec144fd72
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T3.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true next exec calling start to match from lastIndex position
+es5id: 15.10.6.2_A4_T3
+description: Call first exec, then set re.lastIndex = void 0 and again call exec
+---*/
+
+var __re = /(?:ab|cd)\d?/g;
+
+var __executed = __re.exec("aacd2233ab12nm444ab42");
+
+var __expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+__re.lastIndex = void 0;
+
+__executed = __re.exec("aacd2233ab12nm444ab42");
+
+__expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T4.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T4.js
new file mode 100644
index 0000000000..b87cb4b9f0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T4.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true next exec calling start to match from lastIndex position
+es5id: 15.10.6.2_A4_T4
+description: Call first exec, then set re.lastIndex = null and again call exec
+---*/
+
+var __re = /(?:ab|cd)\d?/g;
+
+var __executed = __re.exec("aacd2233ab12nm444ab42");
+
+var __expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+__re.lastIndex = null;
+
+__executed = __re.exec("aacd2233ab12nm444ab42");
+
+__expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T5.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T5.js
new file mode 100644
index 0000000000..00e8e21fc3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T5.js
@@ -0,0 +1,84 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true next exec calling start to match from lastIndex position
+es5id: 15.10.6.2_A4_T5
+description: >
+ Call first exec, then set re.lastIndex = x and again call exec,
+ where x is undefined variable
+---*/
+
+var __re = /(?:ab|cd)\d?/g;
+
+var __executed = __re.exec("aacd2233ab12nm444ab42");
+
+var __expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+__re.lastIndex = x;
+
+__executed = __re.exec("aacd2233ab12nm444ab42");
+
+__expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+var x;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T6.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T6.js
new file mode 100644
index 0000000000..ccd2eff07c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T6.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true next exec calling start to match from lastIndex position
+es5id: 15.10.6.2_A4_T6
+description: Call first exec, then set re.lastIndex = false and again call exec
+---*/
+
+var __re = /(?:ab|cd)\d?/g;
+
+var __executed = __re.exec("aacd2233ab12nm444ab42");
+
+var __expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+__re.lastIndex = false;
+
+__executed = __re.exec("aacd2233ab12nm444ab42");
+
+__expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T7.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T7.js
new file mode 100644
index 0000000000..5d90fa0435
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T7.js
@@ -0,0 +1,82 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true next exec calling start to match from lastIndex position
+es5id: 15.10.6.2_A4_T7
+description: >
+ Call first exec, then set re.lastIndex = Math.NaN and again call
+ exec
+---*/
+
+var __re = /(?:ab|cd)\d?/g;
+
+var __executed = __re.exec("aacd2233ab12nm444ab42");
+
+var __expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+__re.lastIndex = Math.NaN;
+
+__executed = __re.exec("aacd2233ab12nm444ab42");
+
+__expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T8.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T8.js
new file mode 100644
index 0000000000..77c7f9c4d4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T8.js
@@ -0,0 +1,80 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true next exec calling start to match from lastIndex position
+es5id: 15.10.6.2_A4_T8
+description: Call first exec, then set re.lastIndex = "12" and again call exec
+---*/
+
+var __re = /(?:ab|cd)\d?/g;
+
+var __executed = __re.exec("aacd2233ab12nm444ab42");
+
+var __expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+__re.lastIndex = "12";
+
+__executed = __re.exec("aacd2233ab12nm444ab42");
+
+__expected = ["ab4"];
+__expected.index = 17;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T9.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T9.js
new file mode 100644
index 0000000000..dc4902a6bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A4_T9.js
@@ -0,0 +1,82 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ If global is true next exec calling start to match from lastIndex position
+es5id: 15.10.6.2_A4_T9
+description: >
+ Call first exec, then set re.lastIndex = "eleven" and again call
+ exec
+---*/
+
+var __re = /(?:ab|cd)\d?/g;
+
+var __executed = __re.exec("aacd2233ab12nm444ab42");
+
+var __expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+__re.lastIndex = "eleven";
+
+__executed = __re.exec("aacd2233ab12nm444ab42");
+
+__expected = ["cd2"];
+__expected.index = 2;
+__expected.input = "aacd2233ab12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A5_T1.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A5_T1.js
new file mode 100644
index 0000000000..c290de421b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A5_T1.js
@@ -0,0 +1,53 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ Let global is true and let I = If ToInteger(lastIndex).
+ Then if I<0 orI>length then set lastIndex to 0 and return null
+es5id: 15.10.6.2_A5_T1
+description: >
+ First call /(?:ab|cd)\d?/g.exec("aac1dz2233a1bz12nm444ab42"), and
+ then First call /(?:ab|cd)\d?/g.exec("aacd22")
+---*/
+
+var __re = /(?:ab|cd)\d?/g;
+var __executed = __re.exec("aac1dz2233a1bz12nm444ab42");
+
+var __expected = ["ab4"];
+__expected.index = 21;
+__expected.input = "aac1dz2233a1bz12nm444ab42";
+
+assert.sameValue(
+ __executed.length,
+ __expected.length,
+ 'The value of __executed.length is expected to equal the value of __expected.length'
+);
+
+assert.sameValue(
+ __executed.index,
+ __expected.index,
+ 'The value of __executed.index is expected to equal the value of __expected.index'
+);
+
+assert.sameValue(
+ __executed.input,
+ __expected.input,
+ 'The value of __executed.input is expected to equal the value of __expected.input'
+);
+
+for(var index=0; index<__expected.length; index++) {
+ assert.sameValue(
+ __executed[index],
+ __expected[index],
+ 'The value of __executed[index] is expected to equal the value of __expected[index]'
+ );
+}
+
+__executed = __re.exec("aacd22");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+assert.sameValue(__re.lastIndex, 0, 'The value of __re.lastIndex is expected to be 0');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A5_T2.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A5_T2.js
new file mode 100644
index 0000000000..5661d8d609
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A5_T2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on global property.
+ Let global is true and let I = If ToInteger(lastIndex).
+ Then if I<0 orI>length then set lastIndex to 0 and return null
+es5id: 15.10.6.2_A5_T2
+description: "Set lastIndex to 100 and call /(?:ab|cd)\\d?/g.exec(\"aacd22 \")"
+---*/
+
+var __re = /(?:ab|cd)\d?/g;
+__re.lastIndex=100;
+var __executed = __re.exec("aacd22 ");
+
+assert(!__executed, 'The value of !__executed is expected to be true');
+assert.sameValue(__re.lastIndex, 0, 'The value of __re.lastIndex is expected to be 0');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A5_T3.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A5_T3.js
new file mode 100644
index 0000000000..274ae6775f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A5_T3.js
@@ -0,0 +1,26 @@
+// Copyright 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.exec behavior depends on the lastIndex property:
+ ToLength(lastIndex) is the starting point for the search, so
+ negative numbers result in searching from 0.
+es5id: 15.10.6.2_A5_T3
+description: "Set lastIndex to -1 and call /(?:ab|cd)\\d?/g.exec(\"aacd22 \")"
+---*/
+
+var __re = /(?:ab|cd)\d?/g;
+__re.lastIndex=-1;
+var __executed = __re.exec("aacd22 ");
+
+assert.sameValue(__executed[0], "cd2", 'The value of __executed[0] is expected to be "cd2"');
+assert.sameValue(__re.lastIndex, 5, 'The value of __re.lastIndex is expected to be 5');
+
+__re.lastIndex=-100;
+__executed = __re.exec("aacd22 ");
+
+assert.sameValue(__executed[0], "cd2", 'The value of __executed[0] is expected to be "cd2"');
+assert.sameValue(__re.lastIndex, 5, 'The value of __re.lastIndex is expected to be 5');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A6.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A6.js
new file mode 100644
index 0000000000..87f4b0238f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A6.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp.prototype.exec has not prototype property
+es5id: 15.10.6.2_A6
+description: Checking RegExp.prototype.exec.prototype
+---*/
+assert.sameValue(
+ RegExp.prototype.exec.prototype,
+ undefined,
+ 'The value of RegExp.prototype.exec.prototype is expected to equal undefined'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A7.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A7.js
new file mode 100644
index 0000000000..f5ac4392c1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A7.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp.prototype.exec can't be used as constructor
+es5id: 15.10.6.2_A7
+description: Checking if creating the RegExp.prototype.exec object fails
+---*/
+
+var __FACTORY = RegExp.prototype.exec;
+
+try {
+ var __instance = new __FACTORY;
+ throw new Test262Error('#1.1: __FACTORY = RegExp.prototype.exec throw TypeError. Actual: ' + (__instance));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A8.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A8.js
new file mode 100644
index 0000000000..bef663772f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A8.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The RegExp.prototype.exec.length property has the attribute DontEnum
+es5id: 15.10.6.2_A8
+description: >
+ Checking if enumerating the RegExp.prototype.exec.length property
+ fails
+---*/
+assert.sameValue(
+ RegExp.prototype.exec.hasOwnProperty('length'),
+ true,
+ 'RegExp.prototype.exec.hasOwnProperty(\'length\') must return true'
+);
+
+assert.sameValue(
+ RegExp.prototype.exec.propertyIsEnumerable('length'),
+ false,
+ 'RegExp.prototype.exec.propertyIsEnumerable(\'length\') must return false'
+);
+
+var count=0;
+
+for (var p in RegExp.prototype.exec){
+ if (p==="length") {
+ count++;
+ }
+}
+
+assert.sameValue(count, 0, 'The value of count is expected to be 0');
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A9.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A9.js
new file mode 100644
index 0000000000..ec0dda3895
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/S15.10.6.2_A9.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The RegExp.prototype.exec.length property does not have the attribute
+ DontDelete
+es5id: 15.10.6.2_A9
+description: >
+ Checking if deleting the RegExp.prototype.exec.length property
+ fails
+---*/
+assert.sameValue(
+ RegExp.prototype.exec.hasOwnProperty('length'),
+ true,
+ 'RegExp.prototype.exec.hasOwnProperty(\'length\') must return true'
+);
+
+assert.sameValue(
+ delete RegExp.prototype.exec.length,
+ true,
+ 'The value of `delete RegExp.prototype.exec.length` is expected to be true'
+);
+
+assert.sameValue(
+ RegExp.prototype.exec.hasOwnProperty('length'),
+ false,
+ 'RegExp.prototype.exec.hasOwnProperty(\'length\') must return false'
+);
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/duplicate-named-groups-properties.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/duplicate-named-groups-properties.js
new file mode 100644
index 0000000000..890f8302b3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/duplicate-named-groups-properties.js
@@ -0,0 +1,39 @@
+// |reftest| skip -- regexp-duplicate-named-groups is not supported
+// Copyright 2022 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Properties on groups object with duplicate named capture groups
+esid: prod-GroupSpecifier
+features: [regexp-duplicate-named-groups]
+includes: [compareArray.js]
+---*/
+
+const matcher = /(?:(?<x>a)|(?<y>a)(?<x>b))(?:(?<z>c)|(?<z>d))/;
+
+const threeMatchResult = matcher.exec("abc");
+assert.sameValue(threeMatchResult.groups.x, "b", "group x matches b");
+assert.sameValue(threeMatchResult.groups.y, "a", "group y matches a");
+assert.sameValue(threeMatchResult.groups.z, "c", "group z matches c");
+assert.compareArray(
+ Object.keys(threeMatchResult.groups),
+ ["x", "y", "z"],
+ "Properties of groups are ordered in RegExp source order despite y matching before x in this alternative"
+);
+
+const twoMatchResult = matcher.exec("ad");
+assert.sameValue(twoMatchResult.groups.x, "a", "group x matches a");
+assert.sameValue(twoMatchResult.groups.y, undefined, "group y does not match");
+assert.sameValue(twoMatchResult.groups.z, "d", "group z matches d");
+assert.compareArray(
+ Object.keys(twoMatchResult.groups),
+ ["x", "y", "z"],
+ "y is still present on groups object, in the right order, despite not matching"
+);
+
+const iteratedMatcher = /(?:(?:(?<x>a)|(?<x>b)|c)\k<x>){2}/;
+
+const matchedInPrevIterationResult = iteratedMatcher.exec("aac");
+assert.sameValue(matchedInPrevIterationResult.groups.x, undefined, "group x does not match in the last iteration");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/duplicate-named-indices-groups-properties.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/duplicate-named-indices-groups-properties.js
new file mode 100644
index 0000000000..ca0faac957
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/duplicate-named-indices-groups-properties.js
@@ -0,0 +1,39 @@
+// |reftest| skip -- regexp-duplicate-named-groups is not supported
+// Copyright 2022 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Properties on indices.groups object with duplicate named capture groups
+esid: prod-GroupSpecifier
+features: [regexp-duplicate-named-groups, regexp-match-indices]
+includes: [compareArray.js]
+---*/
+
+const matcher = /(?:(?<x>a)|(?<y>a)(?<x>b))(?:(?<z>c)|(?<z>d))/d;
+
+const threeMatchResult = matcher.exec("abc");
+assert.compareArray(threeMatchResult.indices.groups.x, [1, 2], "group x matches b");
+assert.compareArray(threeMatchResult.indices.groups.y, [0, 1], "group y matches a");
+assert.compareArray(threeMatchResult.indices.groups.z, [2, 3], "group z matches c");
+assert.compareArray(
+ Object.keys(threeMatchResult.indices.groups),
+ ["x", "y", "z"],
+ "Properties of groups are ordered in RegExp source order despite y matching before x in this alternative"
+);
+
+const twoMatchResult = matcher.exec("ad");
+assert.compareArray(twoMatchResult.indices.groups.x, [0, 1], "group x matches a");
+assert.sameValue(twoMatchResult.indices.groups.y, undefined, "group y does not match");
+assert.compareArray(twoMatchResult.indices.groups.z, [1, 2], "group z matches d");
+assert.compareArray(
+ Object.keys(twoMatchResult.indices.groups),
+ ["x", "y", "z"],
+ "y is still present on groups object, in the right order, despite not matching"
+);
+
+const iteratedMatcher = /(?:(?:(?<x>a)|(?<x>b)|c)\k<x>){2}/d;
+
+const matchedInPrevIterationResult = iteratedMatcher.exec("aac");
+assert.sameValue(matchedInPrevIterationResult.indices.groups.x, undefined, "group x does not match in the last iteration");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/failure-g-lastindex-reset.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/failure-g-lastindex-reset.js
new file mode 100644
index 0000000000..8b3dd5e333
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/failure-g-lastindex-reset.js
@@ -0,0 +1,54 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ lastIndex is read and reset to 0 when global is set and the match fails.
+es6id: 21.2.5.2.2
+info: |
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let flags be R.[[OriginalFlags]].
+ 5. If flags contains "g", let global be true, else let global be false.
+ [...]
+ 7. If global is false and sticky is false, let lastIndex be 0.
+ 8. Else, let lastIndex be ? ToLength(? Get(R, "lastIndex")).
+ [...]
+ 12. Repeat, while matchSucceeded is false
+ [...]
+ c. If r is failure, then
+ i. If sticky is true, then
+ 1. Perform ? Set(R, "lastIndex", 0, true).
+ 2. Return null.
+ ii. Let lastIndex be AdvanceStringIndex(S, lastIndex, fullUnicode).
+---*/
+
+var lastIndexReads;
+var result;
+
+var r = /a/g;
+
+function reset(value) {
+ r.lastIndex = {
+ valueOf: function() {
+ lastIndexReads++;
+ return value;
+ }
+ };
+ lastIndexReads = 0;
+}
+
+reset(42); // lastIndex beyond end of string.
+result = r.exec('abc');
+assert.sameValue(result, null);
+assert.sameValue(r.lastIndex, 0);
+assert.sameValue(lastIndexReads, 1);
+
+reset(-1); // No match.
+result = r.exec('nbc');
+assert.sameValue(result, null);
+assert.sameValue(r.lastIndex, 0);
+assert.sameValue(lastIndexReads, 1);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/failure-lastindex-access.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/failure-lastindex-access.js
new file mode 100644
index 0000000000..9925767e23
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/failure-lastindex-access.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: lastIndex is read but not written when global and sticky are unset.
+es6id: 21.2.5.2.2
+info: |
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ 4. Let lastIndex be ? ToLength(? Get(R, "lastIndex")).
+ [...]
+ 8. If global is false and sticky is false, let lastIndex be 0.
+ [...]
+ 12. Repeat, while matchSucceeded is false
+ [...]
+ c. If r is failure, then
+ i. If sticky is true, then
+ 1. Perform ? Set(R, "lastIndex", 0, true).
+ 2. Return null.
+---*/
+
+var gets = 0;
+var counter = {
+ valueOf: function() {
+ gets++;
+ return 0;
+ }
+};
+
+var r = /a/;
+r.lastIndex = counter;
+
+var result = r.exec('nbc');
+assert.sameValue(result, null);
+assert.sameValue(r.lastIndex, counter);
+assert.sameValue(gets, 1);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/failure-lastindex-set.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/failure-lastindex-set.js
new file mode 100644
index 0000000000..f5ff21f355
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/failure-lastindex-set.js
@@ -0,0 +1,74 @@
+// Copyright (C) 2021 Richard Gibson. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ lastIndex is set to 0 after exhausting the string when global and/or sticky are set.
+esid: sec-regexpbuiltinexec
+info: |
+ RegExpBuiltinExec (
+ _R_: an initialized RegExp instance,
+ _S_: a String,
+ )
+ ...
+ 1. Let _length_ be the number of code units in _S_.
+ 2. Let _lastIndex_ be ℝ(? ToLength(? Get(_R_, *"lastIndex"*))).
+ 3. Let _flags_ be _R_.[[OriginalFlags]].
+ 4. If _flags_ contains *"g"*, let _global_ be *true*; else let _global_ be *false*.
+ 5. If _flags_ contains *"y"*, let _sticky_ be *true*; else let _sticky_ be *false*.
+ ...
+ 9. Let _matchSucceeded_ be *false*.
+ 10. Repeat, while _matchSucceeded_ is *false*,
+ a. If _lastIndex_ &gt; _length_, then
+ i. If _global_ is *true* or _sticky_ is *true*, then
+ 1. Perform ? Set(_R_, *"lastIndex"*, *+0*<sub>𝔽</sub>, *true*).
+ ii. Return *null*.
+features: [exponentiation]
+---*/
+
+var R_g = /./g, R_y = /./y, R_gy = /./gy;
+
+var S = "test";
+
+var lastIndex;
+var bigLastIndexes = [
+ Infinity,
+ Number.MAX_VALUE,
+ Number.MAX_SAFE_INTEGER,
+ Number.MAX_SAFE_INTEGER - 1,
+ 2**32 + 4,
+ 2**32 + 3,
+ 2**32 + 2,
+ 2**32 + 1,
+ 2**32,
+ 2**32 - 1,
+ 5
+];
+for ( var i = 0; i < bigLastIndexes.length; i++ ) {
+ lastIndex = bigLastIndexes[i];
+ R_g.lastIndex = lastIndex;
+ R_y.lastIndex = lastIndex;
+ R_gy.lastIndex = lastIndex;
+
+ assert.sameValue(R_g.exec(S), null,
+ "global RegExp instance must fail to match against '" + S +
+ "' at lastIndex " + lastIndex);
+ assert.sameValue(R_y.exec(S), null,
+ "sticky RegExp instance must fail to match against '" + S +
+ "' at lastIndex " + lastIndex);
+ assert.sameValue(R_gy.exec(S), null,
+ "global sticky RegExp instance must fail to match against '" + S +
+ "' at lastIndex " + lastIndex);
+
+ assert.sameValue(R_g.lastIndex, 0,
+ "global RegExp instance lastIndex must be reset after " + lastIndex +
+ " exceeds string length");
+ assert.sameValue(R_y.lastIndex, 0,
+ "sticky RegExp instance lastIndex must be reset after " + lastIndex +
+ " exceeds string length");
+ assert.sameValue(R_gy.lastIndex, 0,
+ "global sticky RegExp instance lastIndex must be reset after " + lastIndex +
+ " exceeds string length");
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/name.js
new file mode 100644
index 0000000000..89d0243a20
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.2
+description: >
+ RegExp.prototype.exec.name is "exec".
+info: |
+ RegExp.prototype.exec ( string )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(RegExp.prototype.exec.name, "exec");
+
+verifyNotEnumerable(RegExp.prototype.exec, "name");
+verifyNotWritable(RegExp.prototype.exec, "name");
+verifyConfigurable(RegExp.prototype.exec, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/not-a-constructor.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/not-a-constructor.js
new file mode 100644
index 0000000000..c4492952dd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ RegExp.prototype.exec does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(RegExp.prototype.exec),
+ false,
+ 'isConstructor(RegExp.prototype.exec) must return false'
+);
+
+assert.throws(TypeError, () => {
+ let re = new RegExp(''); new re.exec();
+}, '`let re = new RegExp(\'\'); new re.exec()` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/success-g-lastindex-no-access.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/success-g-lastindex-no-access.js
new file mode 100644
index 0000000000..0642cd4fe8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/success-g-lastindex-no-access.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: lastIndex is accessed when global is set.
+es6id: 21.2.5.2.2
+info: |
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let flags be R.[[OriginalFlags]].
+ 5. If flags contains "g", let global be true, else let global be false.
+ [...]
+ 15. If global is true or sticky is true, then
+ a. Perform ? Set(R, "lastIndex", e, true).
+---*/
+
+var lastIndexReads = 0;
+
+var r = /./g;
+r.lastIndex = {
+ valueOf: function() {
+ lastIndexReads++;
+ return 0;
+ }
+};
+
+var result = r.exec('abc');
+assert.sameValue(result.length, 1);
+assert.sameValue(result[0], 'a');
+assert.sameValue(r.lastIndex, 1);
+assert.sameValue(lastIndexReads, 1);
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/success-lastindex-access.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/success-lastindex-access.js
new file mode 100644
index 0000000000..30f3c62d3f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/success-lastindex-access.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: lastIndex read but not written when global and sticky are unset.
+es6id: 21.2.5.2.2
+info: |
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ? ToLength(? Get(R, "lastIndex")).
+ 5. Let flags be R.[[OriginalFlags]].
+ 6. If flags contains "g", let global be true, else let global be false.
+ [...]
+ 15. If global is true or sticky is true, then
+ a. Perform ? Set(R, "lastIndex", e, true).
+---*/
+
+var gets = 0;
+var counter = {
+ valueOf: function() {
+ gets++;
+ return 0;
+ }
+};
+
+var r = /./;
+r.lastIndex = counter;
+
+var result = r.exec('abc');
+
+assert.notSameValue(result, null);
+assert.sameValue(result.length, 1);
+assert.sameValue(result[0], 'a');
+assert.sameValue(r.lastIndex, counter);
+assert.sameValue(gets, 1);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/u-captured-value.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/u-captured-value.js
new file mode 100644
index 0000000000..40b419e1c4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/u-captured-value.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Encoding of `capturedValue`
+es6id: 21.2.5.2.2
+info: |
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 12. Let flags be the value of R’s [[OriginalFlags]] internal slot.
+ 13. If flags contains "u", let fullUnicode be true, else let fullUnicode be
+ false.
+ [...]
+ 28. For each integer i such that i > 0 and i ≤ n
+ a. Let captureI be ith element of r's captures List.
+ b. If captureI is undefined, let capturedValue be undefined.
+ c. Else if fullUnicode is true,
+ i. Assert: captureI is a List of code points.
+ ii. Let capturedValue be a string whose code units are the
+ UTF16Encoding (10.1.1) of the code points of captureI.
+ [...]
+ e. Perform CreateDataProperty(A, ToString(i) , capturedValue).
+ 29. Return A.
+---*/
+
+var match = /./u.exec('𝌆');
+
+assert(match !== null);
+assert.sameValue(match.length, 1);
+assert.sameValue(match[0].length, 2);
+assert.sameValue(match[0][0], '\ud834');
+assert.sameValue(match[0][1], '\udf06');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/u-lastindex-adv.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/u-lastindex-adv.js
new file mode 100644
index 0000000000..405fc8cd43
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/u-lastindex-adv.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Advancement of lastIndex
+es6id: 21.2.5.2.2
+info: |
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 12. Let flags be the value of R’s [[OriginalFlags]] internal slot.
+ 13. If flags contains "u", let fullUnicode be true, else let fullUnicode be
+ false.
+ [...]
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ c. If r is failure, then
+ [...]
+ ii. Let lastIndex be AdvanceStringIndex(S, lastIndex, fullUnicode).
+---*/
+
+assert.sameValue(/\udf06/u.exec('\ud834\udf06'), null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/u-lastindex-value.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/u-lastindex-value.js
new file mode 100644
index 0000000000..5c31efb0ef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/u-lastindex-value.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Definition of `lastIndex` property value
+es6id: 21.2.5.2.2
+info: |
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 12. Let flags be the value of R’s [[OriginalFlags]] internal slot.
+ 13. If flags contains "u", let fullUnicode be true, else let fullUnicode be
+ false.
+ [...]
+ 16. Let e be r's endIndex value.
+ 17. If fullUnicode is true, then
+ a. e is an index into the Input character list, derived from S, matched
+ by matcher. Let eUTF be the smallest index into S that corresponds
+ to the character at element e of Input. If e is greater than or
+ equal to the length of Input, then eUTF is the number of code units
+ in S.
+ b. Let e be eUTF.
+ 18. If global is true or sticky is true,
+ a. Let setStatus be Set(R, "lastIndex", e, true).
+ b. ReturnIfAbrupt(setStatus).
+---*/
+
+var r = /./ug;
+r.exec('𝌆');
+assert.sameValue(r.lastIndex, 2);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/y-fail-lastindex-no-write.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/y-fail-lastindex-no-write.js
new file mode 100644
index 0000000000..5c353da177
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/y-fail-lastindex-no-write.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Match failure with non-writable `lastIndex` property
+es6id: 21.2.5.2
+info: |
+ 21.2.5.2 RegExp.prototype.exec ( string )
+
+ [...]
+ 6. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ b. Let r be matcher(S, lastIndex).
+ c. If r is failure, then
+ i. If sticky is true, then
+ 1. Let setStatus be Set(R, "lastIndex", 0, true).
+ 2. ReturnIfAbrupt(setStatus).
+---*/
+
+var r = /c/y;
+Object.defineProperty(r, 'lastIndex', {
+ writable: false
+});
+
+assert.throws(TypeError, function() {
+ r.exec('abc');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/y-fail-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/y-fail-lastindex.js
new file mode 100644
index 0000000000..f0da74c13f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/y-fail-lastindex.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Resets the `lastIndex` property to zero after a match failure
+es6id: 21.2.5.2
+info: |
+ 21.2.5.2 RegExp.prototype.exec ( string )
+
+ [...]
+ 6. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ b. Let r be matcher(S, lastIndex).
+ c. If r is failure, then
+ i. If sticky is true, then
+ 1. Let setStatus be Set(R, "lastIndex", 0, true).
+---*/
+
+var r = /c/y;
+r.lastIndex = 1;
+
+r.exec('abc');
+
+assert.sameValue(r.lastIndex, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/y-fail-return.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/y-fail-return.js
new file mode 100644
index 0000000000..54767c3f16
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/y-fail-return.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Stops match execution after first match failure
+es6id: 21.2.5.2
+info: |
+ 21.2.5.2 RegExp.prototype.exec ( string )
+
+ [...]
+ 6. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ b. Let r be matcher(S, lastIndex).
+ c. If r is failure, then
+ i. If sticky is true, then
+ [...]
+ 3. Return null.
+---*/
+
+assert.sameValue(/b/y.exec('ab'), null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/y-init-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/y-init-lastindex.js
new file mode 100644
index 0000000000..ca5b7ea03b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/y-init-lastindex.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Honors initial value of the `lastIndex` property
+es6id: 21.2.5.2
+info: |
+ 21.2.5.2 RegExp.prototype.exec ( string )
+
+ [...]
+ 6. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ 9. ReturnIfAbrupt(sticky).
+ 10. If global is false and sticky is false, let lastIndex be 0.
+---*/
+
+var r = /./y;
+var match;
+r.lastIndex = 1;
+
+match = r.exec('abc');
+
+assert(match !== null);
+assert.sameValue(match.length, 1);
+assert.sameValue(match[0], 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/exec/y-set-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/exec/y-set-lastindex.js
new file mode 100644
index 0000000000..ff58a9aa61
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/exec/y-set-lastindex.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Sets the `lastIndex` property to the end index of the first match
+es6id: 21.2.5.2
+info: |
+ 21.2.5.2 RegExp.prototype.exec ( string )
+
+ [...]
+ 6. Return RegExpBuiltinExec(R, S).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 18. If global is true or sticky is true,
+ a. Let setStatus be Set(R, "lastIndex", e, true).
+---*/
+
+var r = /abc/y;
+r.exec('abc');
+
+assert.sameValue(r.lastIndex, 3);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-dotall.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-dotall.js
new file mode 100644
index 0000000000..7b6afe6f54
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-dotall.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2017 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.flags
+description: Boolean coercion of the dotAll property
+info: |
+ get RegExp.prototype.flags
+
+ ...
+ 10. Let dotAll be ToBoolean(? Get(R, "dotAll")).
+ ...
+features: [Symbol, regexp-dotall]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, "flags").get;
+
+var r = {};
+
+r.dotAll = undefined;
+assert.sameValue(get.call(r), "", "dotAll: undefined");
+
+r.dotAll = null;
+assert.sameValue(get.call(r), "", "dotAll: null");
+
+r.dotAll = NaN;
+assert.sameValue(get.call(r), "", "dotAll: NaN");
+
+r.dotAll = "";
+assert.sameValue(get.call(r), "", "dotAll: the empty string");
+
+r.dotAll = "string";
+assert.sameValue(get.call(r), "s", "dotAll: string");
+
+r.dotAll = 86;
+assert.sameValue(get.call(r), "s", "dotAll: 86");
+
+r.dotAll = Symbol();
+assert.sameValue(get.call(r), "s", "dotAll: Symbol()");
+
+r.dotAll = [];
+assert.sameValue(get.call(r), "s", "dotAll: []");
+
+r.dotAll = {};
+assert.sameValue(get.call(r), "s", "dotAll: {}");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-global.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-global.js
new file mode 100644
index 0000000000..1ad31f0647
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-global.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2017 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.flags
+description: Boolean coercion of the global property
+info: |
+ get RegExp.prototype.flags
+
+ ...
+ 4. Let global be ToBoolean(? Get(R, "global")).
+ ...
+features: [Symbol]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, "flags").get;
+
+var r = {};
+
+r.global = undefined;
+assert.sameValue(get.call(r), "", "global: undefined");
+
+r.global = null;
+assert.sameValue(get.call(r), "", "global: null");
+
+r.global = NaN;
+assert.sameValue(get.call(r), "", "global: NaN");
+
+r.global = "";
+assert.sameValue(get.call(r), "", "global: the empty string");
+
+r.global = "string";
+assert.sameValue(get.call(r), "g", "global: string");
+
+r.global = 86;
+assert.sameValue(get.call(r), "g", "global: 86");
+
+r.global = Symbol();
+assert.sameValue(get.call(r), "g", "global: Symbol()");
+
+r.global = [];
+assert.sameValue(get.call(r), "g", "global: []");
+
+r.global = {};
+assert.sameValue(get.call(r), "g", "global: {}");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-hasIndices.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-hasIndices.js
new file mode 100644
index 0000000000..7e791b33a3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-hasIndices.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2021 Ron Buckton and Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.flags
+description: Boolean coercion of the hasIndices property
+info: |
+ get RegExp.prototype.flags
+
+ ...
+ 10. Let hasIndices be ToBoolean(? Get(R, "hasIndices")).
+ ...
+features: [Symbol, regexp-match-indices]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, "flags").get;
+
+var r = {};
+
+r.hasIndices = undefined;
+assert.sameValue(get.call(r), "", "hasIndices: undefined");
+
+r.hasIndices = null;
+assert.sameValue(get.call(r), "", "hasIndices: null");
+
+r.hasIndices = NaN;
+assert.sameValue(get.call(r), "", "hasIndices: NaN");
+
+r.hasIndices = "";
+assert.sameValue(get.call(r), "", "hasIndices: the empty string");
+
+r.hasIndices = "string";
+assert.sameValue(get.call(r), "d", "hasIndices: string");
+
+r.hasIndices = 86;
+assert.sameValue(get.call(r), "d", "hasIndices: 86");
+
+r.hasIndices = Symbol();
+assert.sameValue(get.call(r), "d", "hasIndices: Symbol()");
+
+r.hasIndices = [];
+assert.sameValue(get.call(r), "d", "hasIndices: []");
+
+r.hasIndices = {};
+assert.sameValue(get.call(r), "d", "hasIndices: {}");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-ignoreCase.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-ignoreCase.js
new file mode 100644
index 0000000000..076b7feca2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-ignoreCase.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2017 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.flags
+description: Boolean coercion of the ignoreCase property
+info: |
+ get RegExp.prototype.flags
+
+ ...
+ 6. Let ignoreCase be ToBoolean(? Get(R, "ignoreCase")).
+ ...
+features: [Symbol]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, "flags").get;
+
+var r = {};
+
+r.ignoreCase = undefined;
+assert.sameValue(get.call(r), "", "ignoreCase: undefined");
+
+r.ignoreCase = null;
+assert.sameValue(get.call(r), "", "ignoreCase: null");
+
+r.ignoreCase = NaN;
+assert.sameValue(get.call(r), "", "ignoreCase: NaN");
+
+r.ignoreCase = "";
+assert.sameValue(get.call(r), "", "ignoreCase: the empty string");
+
+r.ignoreCase = "string";
+assert.sameValue(get.call(r), "i", "ignoreCase: string");
+
+r.ignoreCase = 86;
+assert.sameValue(get.call(r), "i", "ignoreCase: 86");
+
+r.ignoreCase = Symbol();
+assert.sameValue(get.call(r), "i", "ignoreCase: Symbol()");
+
+r.ignoreCase = [];
+assert.sameValue(get.call(r), "i", "ignoreCase: []");
+
+r.ignoreCase = {};
+assert.sameValue(get.call(r), "i", "ignoreCase: {}");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-multiline.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-multiline.js
new file mode 100644
index 0000000000..976c94aa13
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-multiline.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2017 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.flags
+description: Boolean coercion of the multiline property
+info: |
+ get RegExp.prototype.flags
+
+ ...
+ 8. Let multiline be ToBoolean(? Get(R, "multiline")).
+ ...
+features: [Symbol]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, "flags").get;
+
+var r = {};
+
+r.multiline = undefined;
+assert.sameValue(get.call(r), "", "multiline: undefined");
+
+r.multiline = null;
+assert.sameValue(get.call(r), "", "multiline: null");
+
+r.multiline = NaN;
+assert.sameValue(get.call(r), "", "multiline: NaN");
+
+r.multiline = "";
+assert.sameValue(get.call(r), "", "multiline: the empty string");
+
+r.multiline = "string";
+assert.sameValue(get.call(r), "m", "multiline: string");
+
+r.multiline = 86;
+assert.sameValue(get.call(r), "m", "multiline: 86");
+
+r.multiline = Symbol();
+assert.sameValue(get.call(r), "m", "multiline: Symbol()");
+
+r.multiline = [];
+assert.sameValue(get.call(r), "m", "multiline: []");
+
+r.multiline = {};
+assert.sameValue(get.call(r), "m", "multiline: {}");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-sticky.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-sticky.js
new file mode 100644
index 0000000000..6ebd0cf5e9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-sticky.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2017 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.flags
+description: Boolean coercion of the sticky property
+info: |
+ get RegExp.prototype.flags
+
+ ...
+ 14. Let sticky be ToBoolean(? Get(R, "sticky")).
+ ...
+features: [Symbol]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, "flags").get;
+
+var r = {};
+
+r.sticky = undefined;
+assert.sameValue(get.call(r), "", "sticky: undefined");
+
+r.sticky = null;
+assert.sameValue(get.call(r), "", "sticky: null");
+
+r.sticky = NaN;
+assert.sameValue(get.call(r), "", "sticky: NaN");
+
+r.sticky = "";
+assert.sameValue(get.call(r), "", "sticky: the empty string");
+
+r.sticky = "string";
+assert.sameValue(get.call(r), "y", "sticky: string");
+
+r.sticky = 86;
+assert.sameValue(get.call(r), "y", "sticky: 86");
+
+r.sticky = Symbol();
+assert.sameValue(get.call(r), "y", "sticky: Symbol()");
+
+r.sticky = [];
+assert.sameValue(get.call(r), "y", "sticky: []");
+
+r.sticky = {};
+assert.sameValue(get.call(r), "y", "sticky: {}");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-unicode.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-unicode.js
new file mode 100644
index 0000000000..e6c2ed48a7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/coercion-unicode.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2017 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.flags
+description: Boolean coercion of the unicode property
+info: |
+ get RegExp.prototype.flags
+
+ ...
+ 12. Let unicode be ToBoolean(? Get(R, "unicode")).
+ ...
+features: [Symbol]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, "flags").get;
+
+var r = {};
+
+r.unicode = undefined;
+assert.sameValue(get.call(r), "", "unicode: undefined");
+
+r.unicode = null;
+assert.sameValue(get.call(r), "", "unicode: null");
+
+r.unicode = NaN;
+assert.sameValue(get.call(r), "", "unicode: NaN");
+
+r.unicode = "";
+assert.sameValue(get.call(r), "", "unicode: the empty string");
+
+r.unicode = "string";
+assert.sameValue(get.call(r), "u", "unicode: string");
+
+r.unicode = 86;
+assert.sameValue(get.call(r), "u", "unicode: 86");
+
+r.unicode = Symbol();
+assert.sameValue(get.call(r), "u", "unicode: Symbol()");
+
+r.unicode = [];
+assert.sameValue(get.call(r), "u", "unicode: []");
+
+r.unicode = {};
+assert.sameValue(get.call(r), "u", "unicode: {}");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/get-order.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/get-order.js
new file mode 100644
index 0000000000..4b8e8acc52
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/get-order.js
@@ -0,0 +1,51 @@
+// Copyright (C) 2017 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.flags
+description: Gets are performed in specified order
+info: |
+ get RegExp.prototype.flags
+
+ [...]
+ 4. let hasIndices be ToBoolean(? Get(R, "hasIndices"))
+ 6. Let global be ToBoolean(? Get(R, "global")).
+ 8. Let ignoreCase be ToBoolean(? Get(R, "ignoreCase")).
+ 10. Let multiline be ToBoolean(? Get(R, "multiline")).
+ 12. Let dotAll be ToBoolean(? Get(R, "dotAll")).
+ 14. Let unicode be ToBoolean(? Get(R, "unicode")).
+ 18. Let sticky be ToBoolean(? Get(R, "sticky")).
+features: [regexp-dotall, regexp-match-indices]
+---*/
+
+var calls = '';
+var re = {
+ get hasIndices() {
+ calls += 'd';
+ },
+ get global() {
+ calls += 'g';
+ },
+ get ignoreCase() {
+ calls += 'i';
+ },
+ get multiline() {
+ calls += 'm';
+ },
+ get dotAll() {
+ calls += 's';
+ },
+ get unicode() {
+ calls += 'u';
+ },
+ get sticky() {
+ calls += 'y';
+ },
+};
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'flags').get;
+
+get.call(re);
+assert.sameValue(calls, 'dgimsuy');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/length.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/length.js
new file mode 100644
index 0000000000..6ceb16cd22
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/length.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.flags
+description: >
+ get RegExp.prototype.flags.length is 0.
+info: |
+ get RegExp.prototype.flags
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this
+ value is equal to the largest number of named arguments shown in the
+ subclause headings for the function description, including optional
+ parameters. However, rest parameters shown using the form “...name”
+ are not included in the default argument count.
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'flags').get;
+
+verifyProperty(get, 'length', {
+ value: 0,
+ writable: false,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/name.js
new file mode 100644
index 0000000000..0ea73c639d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/name.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.flags
+description: >
+ get RegExp.prototype.flags.name is "get flags".
+info: |
+ get RegExp.prototype.flags
+
+ 17 ECMAScript Standard Built-in Objects
+
+ Functions that are specified as get or set accessor functions of built-in
+ properties have "get " or "set " prepended to the property name string.
+
+ Unless otherwise specified, the name property of a built-in function object,
+ if it exists, has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'flags').get;
+
+verifyProperty(get, 'name', {
+ value: 'get flags',
+ writable: false,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/prop-desc.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/prop-desc.js
new file mode 100644
index 0000000000..ad0bf43336
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/prop-desc.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2017 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.flags
+description: >
+ get RegExp.prototype.flags property descriptor
+info: |
+ get RegExp.prototype.flags
+
+ RegExp.prototype.flags is an accessor property whose set accessor
+ function is undefined
+includes: [propertyHelper.js]
+---*/
+
+var d = Object.getOwnPropertyDescriptor(RegExp.prototype, 'flags');
+
+assert.sameValue(typeof d.get, 'function', 'typeof d.get');
+assert.sameValue(d.set, undefined, 'd.set');
+
+verifyProperty(RegExp.prototype, 'flags', {
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/rethrow.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/rethrow.js
new file mode 100644
index 0000000000..b6ca38a3f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/rethrow.js
@@ -0,0 +1,79 @@
+// Copyright (C) 2017 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.flags
+description: Rethrows exceptions raised in property gets
+info: |
+ get RegExp.prototype.flags
+
+ [...]
+ 4. let hasIndices be ToBoolean(? Get(R, "hasIndices"))
+ 6. Let global be ToBoolean(? Get(R, "global")).
+ 8. Let ignoreCase be ToBoolean(? Get(R, "ignoreCase")).
+ 10. Let multiline be ToBoolean(? Get(R, "multiline")).
+ 12. Let dotAll be ToBoolean(? Get(R, "dotAll")).
+ 14. Let unicode be ToBoolean(? Get(R, "unicode")).
+ 18. Let sticky be ToBoolean(? Get(R, "sticky")).
+features: [regexp-dotall, regexp-match-indices]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'flags').get;
+
+assert.throws(Test262Error, function() {
+ get.call({
+ get hasIndices() {
+ throw new Test262Error();
+ },
+ });
+}, 'Let hasIndices be ToBoolean(? Get(R, "hasIndices"))');
+
+assert.throws(Test262Error, function() {
+ get.call({
+ get global() {
+ throw new Test262Error();
+ },
+ });
+}, 'Let global be ToBoolean(? Get(R, "global"))');
+
+assert.throws(Test262Error, function() {
+ get.call({
+ get ignoreCase() {
+ throw new Test262Error();
+ },
+ });
+}, 'Let ignoreCase be ToBoolean(? Get(R, "ignoreCase"))');
+
+assert.throws(Test262Error, function() {
+ get.call({
+ get multiline() {
+ throw new Test262Error();
+ },
+ });
+}, 'Let multiline be ToBoolean(? Get(R, "multiline"))');
+
+assert.throws(Test262Error, function() {
+ get.call({
+ get dotAll() {
+ throw new Test262Error();
+ },
+ });
+}, 'Let dotAll be ToBoolean(? Get(R, "dotAll"))');
+
+assert.throws(Test262Error, function() {
+ get.call({
+ get unicode() {
+ throw new Test262Error();
+ },
+ });
+}, 'Let unicode be ToBoolean(? Get(R, "unicode"))');
+
+assert.throws(Test262Error, function() {
+ get.call({
+ get sticky() {
+ throw new Test262Error();
+ },
+ });
+}, 'Let sticky be ToBoolean(? Get(R, "sticky"))');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/return-order.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/return-order.js
new file mode 100644
index 0000000000..437f27daeb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/return-order.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.flags
+description: >
+ RegExp.prototype.flags come in a single order, independent of source order
+info: |
+ 4. Let global be ToBoolean(? Get(R, "global")).
+ 5. If global is true, append "g" as the last code unit of result.
+ 6. Let global be ToBoolean(? Get(R, "global")).
+ 7. If global is true, append "g" as the last code unit of result.
+ 8. Let ignoreCase be ToBoolean(? Get(R, "ignoreCase")).
+ 9. If ignoreCase is true, append "i" as the last code unit of result.
+ 10. Let multiline be ToBoolean(? Get(R, "multiline")).
+ 11. If multiline is true, append "m" as the last code unit of result.
+ 12. Let dotAll be ToBoolean(? Get(R, "dotAll")).
+ 13. If dotAll is true, append "s" as the last code unit of result.
+ 14. Let unicode be ToBoolean(? Get(R, "unicode")).
+ 15. If unicode is true, append "u" as the last code unit of result.
+ 16. Let sticky be ToBoolean(? Get(R, "sticky")).
+ 17. If sticky is true, append "y" as the last code unit of result.
+features: [regexp-dotall, regexp-match-indices]
+---*/
+
+assert.sameValue(new RegExp("", "dgimsuy").flags, "dgimsuy", "dgimsuy => dgimsuy");
+assert.sameValue(new RegExp("", "yusmigd").flags, "dgimsuy", "yusmigd => dgimsuy");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/this-val-non-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/this-val-non-obj.js
new file mode 100644
index 0000000000..305e729589
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/this-val-non-obj.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2017 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.flags
+description: A TypeError is thrown when the `this` value is not an Object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+features: [Symbol]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'flags').get;
+
+assert.throws(TypeError, function() {
+ get.call(undefined);
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+ get.call(null);
+}, 'null');
+
+assert.throws(TypeError, function() {
+ get.call(4);
+}, 'number');
+
+assert.throws(TypeError, function() {
+ get.call('string');
+}, 'string');
+
+assert.throws(TypeError, function() {
+ get.call(false);
+}, 'boolean');
+
+assert.throws(TypeError, function() {
+ get.call(Symbol());
+}, 'symbol');
+
+assert.throws(TypeError, function() {
+ get.call(4n);
+}, 'bigint');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/this-val-regexp-prototype.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/this-val-regexp-prototype.js
new file mode 100644
index 0000000000..a182860c73
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/this-val-regexp-prototype.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2016 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.flags
+description: >
+ Return "" when the `this` value is the RegExp.prototype object
+info: |
+ 3. Let result be the empty String.
+ 4. Let global be ToBoolean(? Get(R, "global")).
+ 5. If global is true, append "g" as the last code unit of result.
+ 6. Let ignoreCase be ToBoolean(? Get(R, "ignoreCase")).
+ 7. If ignoreCase is true, append "i" as the last code unit of result.
+ 8. Let multiline be ToBoolean(? Get(R, "multiline")).
+ 9. If multiline is true, append "m" as the last code unit of result.
+ 10. Let dotAll be ToBoolean(? Get(R, "dotAll")).
+ 11. If dotAll is true, append "s" as the last code unit of result.
+ 12. Let unicode be ToBoolean(? Get(R, "unicode")).
+ 13. If unicode is true, append "u" as the last code unit of result.
+ 14. Let sticky be ToBoolean(? Get(R, "sticky")).
+ 15. If sticky is true, append "y" as the last code unit of result.
+ 16. Return result.
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'flags').get;
+
+assert.sameValue(get.call(RegExp.prototype), '');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/flags/this-val-regexp.js b/js/src/tests/test262/built-ins/RegExp/prototype/flags/this-val-regexp.js
new file mode 100644
index 0000000000..48ffaf6938
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/flags/this-val-regexp.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2017 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.flags
+description: >
+ RegExp.prototype.flags returns RegExp flags as a string
+info: |
+ 3. Let result be the empty String.
+ 4. Let global be ToBoolean(? Get(R, "global")).
+ 5. If global is true, append "g" as the last code unit of result.
+ 6. Let ignoreCase be ToBoolean(? Get(R, "ignoreCase")).
+ 7. If ignoreCase is true, append "i" as the last code unit of result.
+ 8. Let multiline be ToBoolean(? Get(R, "multiline")).
+ 9. If multiline is true, append "m" as the last code unit of result.
+ 10. Let dotAll be ToBoolean(? Get(R, "dotAll")).
+ 11. If dotAll is true, append "s" as the last code unit of result.
+ 12. Let unicode be ToBoolean(? Get(R, "unicode")).
+ 13. If unicode is true, append "u" as the last code unit of result.
+ 14. Let unicodeSets be ! ToBoolean(? Get(R, "unicodeSets")).
+ 15. If unicodeSets is true, append "v" as the last code unit of result.
+ 16. Let sticky be ToBoolean(? Get(R, "sticky")).
+ 17. If sticky is true, append "y" as the last code unit of result.
+ 18. Return result.
+features: [regexp-dotall, regexp-match-indices, regexp-v-flag]
+---*/
+
+assert.sameValue(/./.flags, '', 'no flags');
+assert.sameValue(/./d.flags, 'd', 'hasIndices');
+assert.sameValue(/./g.flags, 'g', 'global');
+assert.sameValue(/./i.flags, 'i', 'ignoreCase');
+assert.sameValue(/./m.flags, 'm', 'multiline');
+assert.sameValue(/./s.flags, 's', 'dotAll');
+assert.sameValue(/./u.flags, 'u', 'unicode');
+assert.sameValue(/./v.flags, 'v', 'unicodeSets');
+assert.sameValue(/./y.flags, 'y', 'sticky');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/global/15.10.7.2-2.js b/js/src/tests/test262/built-ins/RegExp/prototype/global/15.10.7.2-2.js
new file mode 100644
index 0000000000..c615203c44
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/global/15.10.7.2-2.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.10.7.2-2
+description: >
+ RegExp.prototype.global is an accessor property whose set accessor
+ function is undefined
+---*/
+
+ var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, 'global');
+
+
+assert.sameValue(typeof desc.get, 'function', 'typeof desc.get');
+assert.sameValue(desc.set, undefined, 'desc.set');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/global/S15.10.7.2_A10.js b/js/src/tests/test262/built-ins/RegExp/prototype/global/S15.10.7.2_A10.js
new file mode 100644
index 0000000000..9f1722c642
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/global/S15.10.7.2_A10.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The RegExp.prototype global property does not have a set accessor
+es5id: 15.10.7.2_A10
+description: Checking if varying the global property fails
+includes: [propertyHelper.js]
+---*/
+
+var __re = RegExp.prototype;
+
+assert.sameValue(__re.hasOwnProperty('global'), true, '__re.hasOwnProperty(\'global\') must return true');
+
+var __sample = /^|^/;
+var __obj = __sample.global;
+
+verifyNotWritable(__sample, "global", "global", "shifted");
+
+assert.sameValue(__sample.global, __obj, 'The value of __sample.global is expected to equal the value of __obj');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/global/S15.10.7.2_A8.js b/js/src/tests/test262/built-ins/RegExp/prototype/global/S15.10.7.2_A8.js
new file mode 100644
index 0000000000..c2f69b59ae
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/global/S15.10.7.2_A8.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The RegExp.prototype global property has the attribute DontEnum
+es5id: 15.10.7.2_A8
+description: >
+ Checking if enumerating the global property of RegExp.prototype
+ fails
+---*/
+
+var __re = RegExp.prototype;
+
+assert.sameValue(__re.hasOwnProperty('global'), true, '__re.hasOwnProperty(\'global\') must return true');
+
+assert.sameValue(
+ __re.propertyIsEnumerable('global'),
+ false,
+ '__re.propertyIsEnumerable(\'global\') must return false'
+);
+
+var count = 0
+for (var p in __re){
+ if (p==="global") {
+ count++
+ }
+}
+
+assert.sameValue(count, 0, 'The value of count is expected to be 0');
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/global/S15.10.7.2_A9.js b/js/src/tests/test262/built-ins/RegExp/prototype/global/S15.10.7.2_A9.js
new file mode 100644
index 0000000000..2a2f0f14c0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/global/S15.10.7.2_A9.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The RegExp.prototype global property does not have the attribute
+ DontDelete
+es5id: 15.10.7.2_A9
+description: Checking if deleting the global property succeeds
+---*/
+
+var __re = RegExp.prototype;
+
+assert.sameValue(__re.hasOwnProperty('global'), true, '__re.hasOwnProperty(\'global\') must return true');
+assert.sameValue(delete __re.global, true, 'The value of `delete __re.global` is expected to be true');
+assert.sameValue(__re.hasOwnProperty('global'), false, '__re.hasOwnProperty(\'global\') must return false');
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/global/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/global/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/global/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/global/cross-realm.js b/js/src/tests/test262/built-ins/RegExp/prototype/global/cross-realm.js
new file mode 100644
index 0000000000..b903f21996
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/global/cross-realm.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.global
+description: A TypeError is thrown when the "this" value is an invalid cross-realm Object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+ b. Otherwise, throw a TypeError exception.
+features: [cross-realm]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'global').get;
+var other = $262.createRealm().global;
+var otherRegExpProto = other.RegExp.prototype;
+var otherRegExpGetter = Object.getOwnPropertyDescriptor(otherRegExpProto, 'global').get;
+
+assert.throws(TypeError, function() {
+ get.call(otherRegExpProto);
+}, 'cross-realm RegExp.prototype');
+
+assert.throws(other.TypeError, function() {
+ otherRegExpGetter.call(RegExp.prototype);
+}, 'cross-realm RegExp.prototype getter method against primary realm RegExp.prototype');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/global/length.js b/js/src/tests/test262/built-ins/RegExp/prototype/global/length.js
new file mode 100644
index 0000000000..d2802441f3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/global/length.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.4
+description: >
+ get RegExp.prototype.global.length is 0.
+info: |
+ get RegExp.prototype.global
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this
+ value is equal to the largest number of named arguments shown in the
+ subclause headings for the function description, including optional
+ parameters. However, rest parameters shown using the form “...name”
+ are not included in the default argument count.
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "global");
+
+assert.sameValue(desc.get.length, 0);
+
+verifyNotEnumerable(desc.get, "length");
+verifyNotWritable(desc.get, "length");
+verifyConfigurable(desc.get, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/global/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/global/name.js
new file mode 100644
index 0000000000..ba8ace9def
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/global/name.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 21.2.5.4
+description: >
+ RegExp.prototype.global name
+info: |
+ 17 ECMAScript Standard Built-in Objects
+
+ Functions that are specified as get or set accessor functions of built-in
+ properties have "get " or "set " prepended to the property name string.
+includes: [propertyHelper.js]
+---*/
+
+var descriptor = Object.getOwnPropertyDescriptor(RegExp.prototype, 'global');
+
+assert.sameValue(
+ descriptor.get.name,
+ 'get global'
+);
+
+verifyNotEnumerable(descriptor.get, 'name');
+verifyNotWritable(descriptor.get, 'name');
+verifyConfigurable(descriptor.get, 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/global/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/global/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/global/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/global/this-val-invalid-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/global/this-val-invalid-obj.js
new file mode 100644
index 0000000000..3e51f470cd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/global/this-val-invalid-obj.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.global
+description: A TypeError is thrown when the "this" value is an invalid Object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+ b. Otherwise, throw a TypeError exception.
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'global').get;
+
+assert.throws(TypeError, function() {
+ get.call({});
+}, 'ordinary object');
+
+assert.throws(TypeError, function() {
+ get.call([]);
+}, 'array exotic object');
+
+assert.throws(TypeError, function() {
+ get.call(arguments);
+}, 'arguments object');
+
+assert.throws(TypeError, function() {
+ get.call(() => {});
+}, 'function object');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/global/this-val-non-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/global/this-val-non-obj.js
new file mode 100644
index 0000000000..daf345583d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/global/this-val-non-obj.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.global
+description: A TypeError is thrown when the "this" value is not an Object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+features: [Symbol]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'global').get;
+var symbol = Symbol();
+
+assert.throws(TypeError, function() {
+ get.call(undefined);
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+ get.call(null);
+}, 'null');
+
+assert.throws(TypeError, function() {
+ get.call(3);
+}, 'number');
+
+assert.throws(TypeError, function() {
+ get.call('string');
+}, 'string');
+
+assert.throws(TypeError, function() {
+ get.call(true);
+}, 'boolean');
+
+assert.throws(TypeError, function() {
+ get.call(symbol);
+}, 'symbol');
+
+assert.throws(TypeError, function() {
+ get.call(4n);
+}, 'bigint');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/global/this-val-regexp-prototype.js b/js/src/tests/test262/built-ins/RegExp/prototype/global/this-val-regexp-prototype.js
new file mode 100644
index 0000000000..9d899b1021
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/global/this-val-regexp-prototype.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.global
+description: >
+ Return value of `undefined` when the "this" value is the RegExp prototype
+ object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'global').get;
+
+assert.sameValue(get.call(RegExp.prototype), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/cross-realm.js b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/cross-realm.js
new file mode 100644
index 0000000000..93d85a4160
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/cross-realm.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2021 Ron Buckton and the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.hasindices
+description: Invoked on a cross-realm object
+info: |
+ get RegExp.prototype.hasIndices
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+ b. Otherwise, throw a TypeError exception.
+features: [regexp-match-indices, cross-realm]
+---*/
+
+var hasIndices = Object.getOwnPropertyDescriptor(RegExp.prototype, 'hasIndices').get;
+var other = $262.createRealm().global;
+var otherRegExpProto = other.RegExp.prototype;
+var otherRegExpGetter = Object.getOwnPropertyDescriptor(otherRegExpProto, 'hasIndices').get;
+
+assert.throws(TypeError, function() {
+ hasIndices.call(otherRegExpProto);
+}, 'cross-realm RegExp.prototype');
+
+assert.throws(other.TypeError, function() {
+ otherRegExpGetter.call(RegExp.prototype);
+}, 'cross-realm RegExp.prototype getter method against primary realm RegExp.prototype');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/length.js b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/length.js
new file mode 100644
index 0000000000..2a6c54f440
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/length.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2021 Ron Buckton and André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.hasindices
+description: >
+ get RegExp.prototype.hasIndices.length is 0.
+info: |
+ get RegExp.prototype.hasIndices
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this
+ value is equal to the largest number of named arguments shown in the
+ subclause headings for the function description, including optional
+ parameters. However, rest parameters shown using the form “...name”
+ are not included in the default argument count.
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [regexp-match-indices]
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "hasIndices");
+
+assert.sameValue(desc.get.length, 0);
+
+verifyProperty(desc.get, "length", {
+ enumerable: false,
+ writable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/name.js
new file mode 100644
index 0000000000..9649fd3133
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/name.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2021 Ron buckton and the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.hasindices
+description: >
+ RegExp.prototype.hasIndices name
+info: |
+ 17 ECMAScript Standard Built-in Objects
+
+ Functions that are specified as get or set accessor functions of built-in
+ properties have "get " or "set " prepended to the property name string.
+includes: [propertyHelper.js]
+features: [regexp-match-indices]
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "hasIndices");
+
+assert.sameValue(
+ desc.get.name,
+ "get hasIndices"
+);
+
+verifyProperty(desc.get, "name", {
+ enumerable: false,
+ writable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/prop-desc.js b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/prop-desc.js
new file mode 100644
index 0000000000..27a593b5c5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/prop-desc.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 Ron Buckton and the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.hasIndices
+description: >
+ `pending` property descriptor
+info: |
+ RegExp.prototype.hasIndices is an accessor property whose set accessor
+ function is undefined.
+
+ 17 ECMAScript Standard Built-in Objects
+
+ Every accessor property described in clauses 18 through 26 and in Annex B.2 has the attributes
+ { [[Enumerable]]: false, [[Configurable]]: true } unless otherwise specified. If only a get
+ accessor function is described, the set accessor function is the default value, undefined. If
+ only a set accessor is described the get accessor is the default value, undefined.
+includes: [propertyHelper.js]
+features: [regexp-match-indices]
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "hasIndices");
+
+assert.sameValue(desc.set, undefined);
+assert.sameValue(typeof desc.get, "function");
+
+verifyProperty(RegExp.prototype, "hasIndices", {
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/this-val-invalid-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/this-val-invalid-obj.js
new file mode 100644
index 0000000000..44bb0c8880
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/this-val-invalid-obj.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2021 Ron Buckton and the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.hasindices
+description: Invoked on an object without an [[OriginalFlags]] internal slot
+info: |
+ get RegExp.prototype.hasIndices
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+ b. Otherwise, throw a TypeError exception.
+features: [regexp-match-indices]
+---*/
+
+var hasIndices = Object.getOwnPropertyDescriptor(RegExp.prototype, 'hasIndices').get;
+
+assert.throws(TypeError, function() {
+ hasIndices.call({});
+}, 'ordinary object');
+
+assert.throws(TypeError, function() {
+ hasIndices.call([]);
+}, 'array exotic object');
+
+assert.throws(TypeError, function() {
+ hasIndices.call(arguments);
+}, 'arguments object');
+
+assert.throws(TypeError, function() {
+ hasIndices.call(() => {});
+}, 'function object');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/this-val-non-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/this-val-non-obj.js
new file mode 100644
index 0000000000..ac6f7d78e3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/this-val-non-obj.js
@@ -0,0 +1,46 @@
+// Copyright (C) 2021 Ron Buckton and the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.hasindices
+description: >
+ `hasIndices` accessor invoked on a non-object value
+info: |
+ get RegExp.prototype.hasIndices
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+features: [Symbol, regexp-match-indices]
+---*/
+
+var hasIndices = Object.getOwnPropertyDescriptor(RegExp.prototype, "hasIndices").get;
+
+assert.throws(TypeError, function() {
+ hasIndices.call(undefined);
+}, "undefined");
+
+assert.throws(TypeError, function() {
+ hasIndices.call(null);
+}, "null");
+
+assert.throws(TypeError, function() {
+ hasIndices.call(true);
+}, "true");
+
+assert.throws(TypeError, function() {
+ hasIndices.call("string");
+}, "string");
+
+assert.throws(TypeError, function() {
+ hasIndices.call(Symbol("s"));
+}, "symbol");
+
+assert.throws(TypeError, function() {
+ hasIndices.call(4);
+}, "number");
+
+assert.throws(TypeError, function() {
+ hasIndices.call(4n);
+}, "bigint");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/this-val-regexp-prototype.js b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/this-val-regexp-prototype.js
new file mode 100644
index 0000000000..8bdd4394c6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/this-val-regexp-prototype.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2021 Ron Buckton and the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.hasIndices
+description: >
+ Return value of `undefined` when the "this" value is the RegExp prototype
+ object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+features: [regexp-match-indices]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, "hasIndices").get;
+
+assert.sameValue(get.call(RegExp.prototype), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/this-val-regexp.js b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/this-val-regexp.js
new file mode 100644
index 0000000000..b029c46a47
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/hasIndices/this-val-regexp.js
@@ -0,0 +1,49 @@
+// Copyright (C) 2021 Ron Buckton and the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.hasindices
+description: >
+ `hasIndices` accessor function invoked on a RegExp instance
+info: |
+ 21.2.5.12 get RegExp.prototype.hasIndices
+
+ 4. Let flags be the value of R’s [[OriginalFlags]] internal slot.
+ 5. If flags contains the code unit "s", return true.
+ 6. Return false.
+features: [regexp-match-indices]
+---*/
+
+assert.sameValue(/./.hasIndices, false, "/./.hasIndices");
+assert.sameValue(/./i.hasIndices, false, "/./i.hasIndices");
+assert.sameValue(/./g.hasIndices, false, "/./g.hasIndices");
+assert.sameValue(/./y.hasIndices, false, "/./y.hasIndices");
+assert.sameValue(/./m.hasIndices, false, "/./m.hasIndices");
+assert.sameValue(/./s.hasIndices, false, "/./s.hasIndices");
+assert.sameValue(/./u.hasIndices, false, "/./u.hasIndices");
+
+assert.sameValue(/./d.hasIndices, true, "/./d.hasIndices");
+assert.sameValue(/./di.hasIndices, true, "/./di.hasIndices");
+assert.sameValue(/./dg.hasIndices, true, "/./dg.hasIndices");
+assert.sameValue(/./dy.hasIndices, true, "/./dy.hasIndices");
+assert.sameValue(/./dm.hasIndices, true, "/./dm.hasIndices");
+assert.sameValue(/./ds.hasIndices, true, "/./ds.hasIndices");
+assert.sameValue(/./du.hasIndices, true, "/./du.hasIndices");
+
+assert.sameValue(new RegExp(".", "").hasIndices, false, "new RegExp('.', '').hasIndices");
+assert.sameValue(new RegExp(".", "i").hasIndices, false, "new RegExp('.', 'i').hasIndices");
+assert.sameValue(new RegExp(".", "g").hasIndices, false, "new RegExp('.', 'g').hasIndices");
+assert.sameValue(new RegExp(".", "y").hasIndices, false, "new RegExp('.', 'y').hasIndices");
+assert.sameValue(new RegExp(".", "m").hasIndices, false, "new RegExp('.', 'm').hasIndices");
+assert.sameValue(new RegExp(".", "s").hasIndices, false, "new RegExp('.', 's').hasIndices");
+assert.sameValue(new RegExp(".", "u").hasIndices, false, "new RegExp('.', 'u').hasIndices");
+
+assert.sameValue(new RegExp(".", "d").hasIndices, true, "new RegExp('.', 'd').hasIndices");
+assert.sameValue(new RegExp(".", "di").hasIndices, true, "new RegExp('.', 'di').hasIndices");
+assert.sameValue(new RegExp(".", "dg").hasIndices, true, "new RegExp('.', 'dg').hasIndices");
+assert.sameValue(new RegExp(".", "dy").hasIndices, true, "new RegExp('.', 'dy').hasIndices");
+assert.sameValue(new RegExp(".", "dm").hasIndices, true, "new RegExp('.', 'dm').hasIndices");
+assert.sameValue(new RegExp(".", "ds").hasIndices, true, "new RegExp('.', 'ds').hasIndices");
+assert.sameValue(new RegExp(".", "du").hasIndices, true, "new RegExp('.', 'du').hasIndices");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/15.10.7.3-2.js b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/15.10.7.3-2.js
new file mode 100644
index 0000000000..125ec41eb4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/15.10.7.3-2.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.10.7.3-2
+description: >
+ RegExp.prototype.ignoreCase is an accessor property whose set
+ accessor function is undefined
+---*/
+
+ var d = Object.getOwnPropertyDescriptor(RegExp.prototype, 'ignoreCase');
+
+
+assert.sameValue(typeof d.get, 'function', 'typeof d.get');
+assert.sameValue(d.set, undefined, 'd.set');
+assert.sameValue(d.enumerable, false, 'd.enumerable');
+assert.sameValue(d.configurable, true, 'd.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/S15.10.7.3_A10.js b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/S15.10.7.3_A10.js
new file mode 100644
index 0000000000..17c3ecb5bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/S15.10.7.3_A10.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The RegExp.prototype ignoreCase property does not have a set accessor
+es5id: 15.10.7.3_A10
+description: Checking if varying the ignoreCase property fails
+includes: [propertyHelper.js]
+---*/
+
+var __re = RegExp.prototype;
+
+assert.sameValue(__re.hasOwnProperty('ignoreCase'), true, '__re.hasOwnProperty(\'ignoreCase\') must return true');
+
+var __sample = /a|b|c/;
+var __obj = __sample.ignoreCase;
+
+verifyNotWritable(__sample, "ignoreCase", "ignoreCase", "shifted");
+
+assert.sameValue(
+ __sample.ignoreCase,
+ __obj,
+ 'The value of __sample.ignoreCase is expected to equal the value of __obj'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/S15.10.7.3_A8.js b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/S15.10.7.3_A8.js
new file mode 100644
index 0000000000..a70df8a51e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/S15.10.7.3_A8.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The RegExp.prototype ignoreCase property has the attribute DontEnum
+es5id: 15.10.7.3_A8
+description: >
+ Checking if enumerating the ignoreCase property of
+ RegExp.prototype fails
+---*/
+
+var __re = RegExp.prototype;
+
+assert.sameValue(__re.hasOwnProperty('ignoreCase'), true, '__re.hasOwnProperty(\'ignoreCase\') must return true');
+
+assert.sameValue(
+ __re.propertyIsEnumerable('ignoreCase'),
+ false,
+ '__re.propertyIsEnumerable(\'ignoreCase\') must return false'
+);
+
+var count = 0
+for (var p in __re){
+ if (p==="ignoreCase") {
+ count++
+ }
+}
+
+assert.sameValue(count, 0, 'The value of count is expected to be 0');
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/S15.10.7.3_A9.js b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/S15.10.7.3_A9.js
new file mode 100644
index 0000000000..70edcce662
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/S15.10.7.3_A9.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The RegExp.prototype ignoreCase property does not have the attribute
+ DontDelete
+es5id: 15.10.7.3_A9
+description: Checking if deleting the ignoreCase property succeeds
+---*/
+
+var __re = RegExp.prototype;
+
+assert.sameValue(__re.hasOwnProperty('ignoreCase'), true, '__re.hasOwnProperty(\'ignoreCase\') must return true');
+assert.sameValue(delete __re.ignoreCase, true, 'The value of `delete __re.ignoreCase` is expected to be true');
+assert.sameValue(__re.hasOwnProperty('ignoreCase'), false, '__re.hasOwnProperty(\'ignoreCase\') must return false');
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/cross-realm.js b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/cross-realm.js
new file mode 100644
index 0000000000..8a56805273
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/cross-realm.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.ignorecase
+description: A TypeError is thrown when the "this" value is an invalid cross-realm Object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+ b. Otherwise, throw a TypeError exception.
+features: [cross-realm]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'ignoreCase').get;
+var other = $262.createRealm().global;
+var otherRegExpProto = other.RegExp.prototype;
+var otherRegExpGetter = Object.getOwnPropertyDescriptor(otherRegExpProto, 'ignoreCase').get;
+
+assert.throws(TypeError, function() {
+ get.call(otherRegExpProto);
+}, 'cross-realm RegExp.prototype');
+
+assert.throws(other.TypeError, function() {
+ otherRegExpGetter.call(RegExp.prototype);
+}, 'cross-realm RegExp.prototype getter method against primary realm RegExp.prototype');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/length.js b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/length.js
new file mode 100644
index 0000000000..3707ec5ad1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/length.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.5
+description: >
+ get RegExp.prototype.ignoreCase.length is 0.
+info: |
+ get RegExp.prototype.ignoreCase
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this
+ value is equal to the largest number of named arguments shown in the
+ subclause headings for the function description, including optional
+ parameters. However, rest parameters shown using the form “...name”
+ are not included in the default argument count.
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "ignoreCase");
+
+assert.sameValue(desc.get.length, 0);
+
+verifyNotEnumerable(desc.get, "length");
+verifyNotWritable(desc.get, "length");
+verifyConfigurable(desc.get, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/name.js
new file mode 100644
index 0000000000..1f3894cbbe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/name.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 21.2.5.5
+description: >
+ RegExp.prototype.ignoreCase name
+info: |
+ 17 ECMAScript Standard Built-in Objects
+
+ Functions that are specified as get or set accessor functions of built-in
+ properties have "get " or "set " prepended to the property name string.
+includes: [propertyHelper.js]
+---*/
+
+var descriptor = Object.getOwnPropertyDescriptor(RegExp.prototype, 'ignoreCase');
+
+assert.sameValue(
+ descriptor.get.name,
+ 'get ignoreCase'
+);
+
+verifyNotEnumerable(descriptor.get, 'name');
+verifyNotWritable(descriptor.get, 'name');
+verifyConfigurable(descriptor.get, 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/this-val-invalid-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/this-val-invalid-obj.js
new file mode 100644
index 0000000000..4ffb9390e5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/this-val-invalid-obj.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.ignorecase
+description: A TypeError is thrown when the "this" value is an invalid Object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+ b. Otherwise, throw a TypeError exception.
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'ignoreCase').get;
+
+assert.throws(TypeError, function() {
+ get.call({});
+}, 'ordinary object');
+
+assert.throws(TypeError, function() {
+ get.call([]);
+}, 'array exotic object');
+
+assert.throws(TypeError, function() {
+ get.call(arguments);
+}, 'arguments object');
+
+assert.throws(TypeError, function() {
+ get.call(() => {});
+}, 'function object');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/this-val-non-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/this-val-non-obj.js
new file mode 100644
index 0000000000..00ac21cc25
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/this-val-non-obj.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.ignorecase
+description: A TypeError is thrown when the "this" value is not an Object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+features: [Symbol]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'ignoreCase').get;
+var symbol = Symbol();
+
+assert.throws(TypeError, function() {
+ get.call(undefined);
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+ get.call(null);
+}, 'null');
+
+assert.throws(TypeError, function() {
+ get.call(3);
+}, 'number');
+
+assert.throws(TypeError, function() {
+ get.call('string');
+}, 'string');
+
+assert.throws(TypeError, function() {
+ get.call(true);
+}, 'boolean');
+
+assert.throws(TypeError, function() {
+ get.call(symbol);
+}, 'symbol');
+
+assert.throws(TypeError, function() {
+ get.call(4n);
+}, 'bigint');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/this-val-regexp-prototype.js b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/this-val-regexp-prototype.js
new file mode 100644
index 0000000000..51157d86b0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/ignoreCase/this-val-regexp-prototype.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.ignorecase
+description: >
+ Return value of `undefined` when the "this" value is the RegExp prototype
+ object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'ignoreCase').get;
+
+assert.sameValue(get.call(RegExp.prototype), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/multiline/15.10.7.4-2.js b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/15.10.7.4-2.js
new file mode 100644
index 0000000000..d554e1046c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/15.10.7.4-2.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.10.7.4-2
+description: >
+ RegExp.prototype.multiline is an accessor property whose set
+ accessor function is undefined
+---*/
+
+ var d = Object.getOwnPropertyDescriptor(RegExp.prototype, 'multiline');
+
+
+assert.sameValue(typeof d.get, 'function', 'typeof d.get');
+assert.sameValue(d.set, undefined, 'd.set');
+assert.sameValue(d.enumerable, false, 'd.enumerable');
+assert.sameValue(d.configurable, true, 'd.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/multiline/S15.10.7.4_A10.js b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/S15.10.7.4_A10.js
new file mode 100644
index 0000000000..b5d5653e08
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/S15.10.7.4_A10.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The RegExp.prototype multiline property does not have a set accessor
+es5id: 15.10.7.4_A10
+description: Checking if varying the multiline property fails
+includes: [propertyHelper.js]
+---*/
+
+var __re = RegExp.prototype;
+
+assert.sameValue(__re.hasOwnProperty('multiline'), true, '__re.hasOwnProperty(\'multiline\') must return true');
+
+var __sample = /\n/;
+var __obj = __sample.multiline;
+
+verifyNotWritable(__sample, "multiline", "multiline", "shifted");
+
+assert.sameValue(__sample.multiline, __obj, 'The value of __sample.multiline is expected to equal the value of __obj');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/multiline/S15.10.7.4_A8.js b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/S15.10.7.4_A8.js
new file mode 100644
index 0000000000..f4a2868a7b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/S15.10.7.4_A8.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The RegExp.prototype multiline property has the attribute DontEnum
+es5id: 15.10.7.4_A8
+description: >
+ Checking if enumerating the multiline property of RegExp.prototype
+ fails
+---*/
+
+var __re = RegExp.prototype;
+
+assert.sameValue(__re.hasOwnProperty('multiline'), true, '__re.hasOwnProperty(\'multiline\') must return true');
+
+assert.sameValue(
+ __re.propertyIsEnumerable('multiline'),
+ false,
+ '__re.propertyIsEnumerable(\'multiline\') must return false'
+);
+
+var count = 0
+for (var p in __re){
+ if (p==="multiline") {
+ count++
+ }
+}
+
+assert.sameValue(count, 0, 'The value of count is expected to be 0');
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/multiline/S15.10.7.4_A9.js b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/S15.10.7.4_A9.js
new file mode 100644
index 0000000000..89a576a978
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/S15.10.7.4_A9.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The RegExp.prototype multiline property does not have the attribute
+ DontDelete
+es5id: 15.10.7.4_A9
+description: Checking if deleting the multiline property succeeds
+---*/
+
+var __re = RegExp.prototype;
+
+assert.sameValue(__re.hasOwnProperty('multiline'), true, '__re.hasOwnProperty(\'multiline\') must return true');
+assert.sameValue(delete __re.multiline, true, 'The value of `delete __re.multiline` is expected to be true');
+assert.sameValue(__re.hasOwnProperty('multiline'), false, '__re.hasOwnProperty(\'multiline\') must return false');
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/multiline/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/multiline/cross-realm.js b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/cross-realm.js
new file mode 100644
index 0000000000..ef0b1bb2e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/cross-realm.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.multiline
+description: A TypeError is thrown when the "this" value is an invalid cross-realm Object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+ b. Otherwise, throw a TypeError exception.
+features: [cross-realm]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'multiline').get;
+var other = $262.createRealm().global;
+var otherRegExpProto = other.RegExp.prototype;
+var otherRegExpGetter = Object.getOwnPropertyDescriptor(otherRegExpProto, 'multiline').get;
+
+assert.throws(TypeError, function() {
+ get.call(otherRegExpProto);
+}, 'cross-realm RegExp.prototype');
+
+assert.throws(other.TypeError, function() {
+ otherRegExpGetter.call(RegExp.prototype);
+}, 'cross-realm RegExp.prototype getter method against primary realm RegExp.prototype');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/multiline/length.js b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/length.js
new file mode 100644
index 0000000000..08105090e0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/length.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.7
+description: >
+ get RegExp.prototype.multiline.length is 0.
+info: |
+ get RegExp.prototype.multiline
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this
+ value is equal to the largest number of named arguments shown in the
+ subclause headings for the function description, including optional
+ parameters. However, rest parameters shown using the form “...name”
+ are not included in the default argument count.
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "multiline");
+
+assert.sameValue(desc.get.length, 0);
+
+verifyNotEnumerable(desc.get, "length");
+verifyNotWritable(desc.get, "length");
+verifyConfigurable(desc.get, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/multiline/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/name.js
new file mode 100644
index 0000000000..674dec6f70
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/name.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 21.2.5.7
+description: >
+ RegExp.prototype.multiline name
+info: |
+ 17 ECMAScript Standard Built-in Objects
+
+ Functions that are specified as get or set accessor functions of built-in
+ properties have "get " or "set " prepended to the property name string.
+includes: [propertyHelper.js]
+---*/
+
+var descriptor = Object.getOwnPropertyDescriptor(RegExp.prototype, 'multiline');
+
+assert.sameValue(
+ descriptor.get.name,
+ 'get multiline'
+);
+
+verifyNotEnumerable(descriptor.get, 'name');
+verifyNotWritable(descriptor.get, 'name');
+verifyConfigurable(descriptor.get, 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/multiline/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/multiline/this-val-invalid-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/this-val-invalid-obj.js
new file mode 100644
index 0000000000..f2d3a6e69b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/this-val-invalid-obj.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.multiline
+description: A TypeError is thrown when the "this" value is an invalid Object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+ b. Otherwise, throw a TypeError exception.
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'multiline').get;
+
+assert.throws(TypeError, function() {
+ get.call({});
+}, 'ordinary object');
+
+assert.throws(TypeError, function() {
+ get.call([]);
+}, 'array exotic object');
+
+assert.throws(TypeError, function() {
+ get.call(arguments);
+}, 'arguments object');
+
+assert.throws(TypeError, function() {
+ get.call(() => {});
+}, 'function object');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/multiline/this-val-non-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/this-val-non-obj.js
new file mode 100644
index 0000000000..4ae30ee5b3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/this-val-non-obj.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.multiline
+description: A TypeError is thrown when the "this" value is not an Object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+features: [Symbol]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'multiline').get;
+var symbol = Symbol();
+
+assert.throws(TypeError, function() {
+ get.call(undefined);
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+ get.call(null);
+}, 'null');
+
+assert.throws(TypeError, function() {
+ get.call(3);
+}, 'number');
+
+assert.throws(TypeError, function() {
+ get.call('string');
+}, 'string');
+
+assert.throws(TypeError, function() {
+ get.call(true);
+}, 'boolean');
+
+assert.throws(TypeError, function() {
+ get.call(symbol);
+}, 'symbol');
+
+assert.throws(TypeError, function() {
+ get.call(4n);
+}, 'bigint');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/multiline/this-val-regexp-prototype.js b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/this-val-regexp-prototype.js
new file mode 100644
index 0000000000..bbc533b46a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/multiline/this-val-regexp-prototype.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.multiline
+description: >
+ Return value of `undefined` when the "this" value is the RegExp prototype
+ object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'multiline').get;
+
+assert.sameValue(get.call(RegExp.prototype), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/no-regexp-matcher.js b/js/src/tests/test262/built-ins/RegExp/prototype/no-regexp-matcher.js
new file mode 100644
index 0000000000..27fc38ac8a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/no-regexp-matcher.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-properties-of-the-regexp-prototype-object
+description: >
+ The RegExp prototype object does not have a [[RegExpMatcher]] internal slot
+info: |
+ The RegExp prototype object is an ordinary object. It is not a RegExp
+ instance and does not have a [[RegExpMatcher]] internal slot or any of the
+ other internal slots of RegExp instance objects.
+
+ 21.2.5.2 RegExp.prototype.exec
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have a [[RegExpMatcher]] internal slot, throw a TypeError
+ exception.
+---*/
+
+assert.throws(TypeError, function() {
+ RegExp.prototype.exec('');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/source/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/source/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/source/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/source/cross-realm.js b/js/src/tests/test262/built-ins/RegExp/prototype/source/cross-realm.js
new file mode 100644
index 0000000000..faf9123f36
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/source/cross-realm.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.source
+description: A TypeError is thrown when the "this" value is an invalid cross-realm Object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return "(?:)".
+ b. Otherwise, throw a TypeError exception.
+features: [cross-realm]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'source').get;
+var other = $262.createRealm().global;
+var otherRegExpProto = other.RegExp.prototype;
+var otherRegExpGetter = Object.getOwnPropertyDescriptor(otherRegExpProto, 'source').get;
+
+assert.throws(TypeError, function() {
+ get.call(otherRegExpProto);
+}, 'cross-realm RegExp.prototype');
+
+assert.throws(other.TypeError, function() {
+ otherRegExpGetter.call(RegExp.prototype);
+}, 'cross-realm RegExp.prototype getter method against primary realm RegExp.prototype');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/source/length.js b/js/src/tests/test262/built-ins/RegExp/prototype/source/length.js
new file mode 100644
index 0000000000..522f81227d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/source/length.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.source
+description: >
+ get RegExp.prototype.source.length is 0.
+info: |
+ get RegExp.prototype.source
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this
+ value is equal to the largest number of named arguments shown in the
+ subclause headings for the function description, including optional
+ parameters. However, rest parameters shown using the form “...name”
+ are not included in the default argument count.
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'source').get;
+
+verifyProperty(get, 'length', {
+ value: 0,
+ writable: false,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/source/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/source/name.js
new file mode 100644
index 0000000000..501762bb55
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/source/name.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.source
+description: >
+ get RegExp.prototype.source.name is "get source".
+info: |
+ get RegExp.prototype.source
+
+ 17 ECMAScript Standard Built-in Objects
+
+ Functions that are specified as get or set accessor functions of built-in
+ properties have "get " or "set " prepended to the property name string.
+
+ Unless otherwise specified, the name property of a built-in function object,
+ if it exists, has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'source').get;
+
+verifyProperty(get, 'name', {
+ value: 'get source',
+ writable: false,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/source/prop-desc.js b/js/src/tests/test262/built-ins/RegExp/prototype/source/prop-desc.js
new file mode 100644
index 0000000000..00d66114f4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/source/prop-desc.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.source
+description: >
+ RegExp.prototype.source is an accessor property whose set accessor
+ function is undefined
+includes: [propertyHelper.js]
+---*/
+
+var d = Object.getOwnPropertyDescriptor(RegExp.prototype, 'source');
+
+assert.sameValue(typeof d.get, 'function', 'typeof d.get');
+assert.sameValue(d.set, undefined, 'd.set');
+
+verifyProperty(RegExp.prototype, 'source', {
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/source/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/source/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/source/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/source/this-val-invalid-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/source/this-val-invalid-obj.js
new file mode 100644
index 0000000000..862a2d354e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/source/this-val-invalid-obj.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.source
+description: A TypeError is thrown when the "this" value is an invalid Object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return "(?:)".
+ b. Otherwise, throw a TypeError exception.
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'source').get;
+
+assert.throws(TypeError, function() {
+ get.call({});
+}, 'ordinary object');
+
+assert.throws(TypeError, function() {
+ get.call([]);
+}, 'array exotic object');
+
+assert.throws(TypeError, function() {
+ get.call(arguments);
+}, 'arguments object');
+
+assert.throws(TypeError, function() {
+ get.call(() => {});
+}, 'function object');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/source/this-val-non-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/source/this-val-non-obj.js
new file mode 100644
index 0000000000..9b0cbec7f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/source/this-val-non-obj.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.source
+description: A TypeError is thrown when the "this" value is not an Object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+features: [Symbol]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'source').get;
+var symbol = Symbol();
+
+assert.throws(TypeError, function() {
+ get.call(undefined);
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+ get.call(null);
+}, 'null');
+
+assert.throws(TypeError, function() {
+ get.call(3);
+}, 'number');
+
+assert.throws(TypeError, function() {
+ get.call('string');
+}, 'string');
+
+assert.throws(TypeError, function() {
+ get.call(true);
+}, 'boolean');
+
+assert.throws(TypeError, function() {
+ get.call(symbol);
+}, 'symbol');
+
+assert.throws(TypeError, function() {
+ get.call(4n);
+}, 'bigint');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/source/this-val-regexp-prototype.js b/js/src/tests/test262/built-ins/RegExp/prototype/source/this-val-regexp-prototype.js
new file mode 100644
index 0000000000..ca630d5f12
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/source/this-val-regexp-prototype.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.source
+description: >
+ Return "(?:)" when the `this` value is the RegExp.prototype object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return "(?:)".
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'source').get;
+
+assert.sameValue(get.call(RegExp.prototype), '(?:)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/source/value-empty.js b/js/src/tests/test262/built-ins/RegExp/prototype/source/value-empty.js
new file mode 100644
index 0000000000..50dbaf263d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/source/value-empty.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.source
+description: >
+ Return value can be used to create an equivalent RegExp when the
+ [[OriginalSource]] internal slot is the empty string
+
+ 21.2.3.2.4 Runtime Semantics: EscapeRegExpPattern
+
+ [...] the internal procedure that would result from evaluating S as a
+ Pattern[~U] (Pattern[+U] if F contains "u") must behave identically to the
+ internal procedure given by the constructed object's [[RegExpMatcher]]
+ internal slot.
+info: |
+ [...]
+ 5. Let src be R.[[OriginalSource]].
+ 6. Let flags be R.[[OriginalFlags]].
+ 7. Return EscapeRegExpPattern(src, flags).
+---*/
+
+var re = eval('/' + new RegExp('').source + '/');
+
+assert.sameValue(re.test(''), true);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/source/value-line-terminator.js b/js/src/tests/test262/built-ins/RegExp/prototype/source/value-line-terminator.js
new file mode 100644
index 0000000000..bc52096f4d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/source/value-line-terminator.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.source
+description: >
+ Return value can be used to create an equivalent RegExp when the
+ [[OriginalSource]] internal slot contains a LineTerminator
+info: |
+ [...]
+ 5. Let src be R.[[OriginalSource]].
+ 6. Let flags be R.[[OriginalFlags]].
+ 7. Return EscapeRegExpPattern(src, flags).
+
+ 21.2.3.2.4 Runtime Semantics: EscapeRegExpPattern
+
+ [...] the internal procedure that would result from evaluating S as a
+ Pattern[~U] (Pattern[+U] if F contains "u") must behave identically to the
+ internal procedure given by the constructed object's [[RegExpMatcher]]
+ internal slot.
+---*/
+
+var re = eval('/' + new RegExp('\n').source + '/');
+
+assert.sameValue(re.test('\n'), true, 'input: "\\n"');
+assert.sameValue(re.test('_\n_'), true, 'input: "_\\n_"');
+assert.sameValue(re.test('\\n'), false, 'input: "\\\\n"');
+assert.sameValue(re.test('\r'), false, 'input: "\\r"');
+assert.sameValue(re.test('n'), false, 'input: "n"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/source/value-slash.js b/js/src/tests/test262/built-ins/RegExp/prototype/source/value-slash.js
new file mode 100644
index 0000000000..e0a6f23492
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/source/value-slash.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.source
+description: Return value can be used to create an equivalent RegExp
+info: |
+ [...]
+ 5. Let src be R.[[OriginalSource]].
+ 6. Let flags be R.[[OriginalFlags]].
+ 7. Return EscapeRegExpPattern(src, flags).
+
+ 21.2.3.2.4 Runtime Semantics: EscapeRegExpPattern
+
+ [...] The code points / or any LineTerminator occurring in the pattern
+ shall be escaped in S as necessary to ensure that the String value
+ formed by concatenating the Strings "/", S, "/", and F can be parsed
+ (in an appropriate lexical context) as a RegularExpressionLiteral that
+ behaves identically to the constructed regular expression.
+---*/
+
+var re = eval('/' + new RegExp('/').source + '/');
+
+assert(re.test('/'), 'input: "/"');
+assert(re.test('_/_'), 'input: "_/_"');
+assert(!re.test('\\'), 'input: "\\"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/source/value-u.js b/js/src/tests/test262/built-ins/RegExp/prototype/source/value-u.js
new file mode 100644
index 0000000000..e7847b7287
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/source/value-u.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.source
+description: >
+ Return value can be used to create an equivalent RegExp when the
+ [[OriginalFlags]] internal slot contains the `u` flag
+info: |
+ [...]
+ 5. Let src be R.[[OriginalSource]].
+ 6. Let flags be R.[[OriginalFlags]].
+ 7. Return EscapeRegExpPattern(src, flags).
+
+ 21.2.3.2.4 Runtime Semantics: EscapeRegExpPattern
+
+ [...] the internal procedure that would result from evaluating S as a
+ Pattern[~U] (Pattern[+U] if F contains "u") must behave identically to the
+ internal procedure given by the constructed object's [[RegExpMatcher]]
+ internal slot.
+---*/
+
+var re;
+
+re = eval('/' + /\ud834\udf06/u.source + '/u');
+
+assert.sameValue(re.test('\ud834\udf06'), true);
+assert.sameValue(re.test('𝌆'), true);
+
+re = eval('/' + /\u{1d306}/u.source + '/u');
+
+assert.sameValue(re.test('\ud834\udf06'), true);
+assert.sameValue(re.test('𝌆'), true);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/source/value.js b/js/src/tests/test262/built-ins/RegExp/prototype/source/value.js
new file mode 100644
index 0000000000..5fdb1df936
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/source/value.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.source
+description: Return value can be used to create an equivalent RegExp
+info: |
+ [...]
+ 5. Let src be R.[[OriginalSource]].
+ 6. Let flags be R.[[OriginalFlags]].
+ 7. Return EscapeRegExpPattern(src, flags).
+
+ 21.2.3.2.4 Runtime Semantics: EscapeRegExpPattern
+
+ [...] the internal procedure that would result from evaluating S as a
+ Pattern[~U] (Pattern[+U] if F contains "u") must behave identically to the
+ internal procedure given by the constructed object's [[RegExpMatcher]]
+ internal slot.
+---*/
+
+var re = eval('/' + /ab{2,4}c$/.source + '/');
+
+assert(re.test('abbc'), 'input: abbc');
+assert(re.test('abbbc'), 'input: abbbc');
+assert(re.test('abbbbc'), 'input: abbbbc');
+assert(re.test('xabbc'), 'input: xabbc');
+assert(re.test('xabbbc'), 'input: xabbbc');
+assert(re.test('xabbbbc'), 'input: xabbbbc');
+
+assert.sameValue(re.test('ac'), false, 'input: ac');
+assert.sameValue(re.test('abc'), false, 'input: abc');
+assert.sameValue(re.test('abbcx'), false, 'input: abbcx');
+assert.sameValue(re.test('bbc'), false, 'input: bbc');
+assert.sameValue(re.test('abb'), false, 'input: abb');
+assert.sameValue(re.test('abbbbbc'), false, 'input: abbbbbc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/sticky/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/sticky/cross-realm.js b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/cross-realm.js
new file mode 100644
index 0000000000..65b3b244c5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/cross-realm.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Invoked on a cross-realm object without an [[OriginalFlags]] internal slot
+es6id: 21.2.5.12
+info: |
+ 21.2.5.12 get RegExp.prototype.sticky
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, throw a TypeError
+ exception.
+features: [cross-realm]
+---*/
+
+var sticky = Object.getOwnPropertyDescriptor(RegExp.prototype, 'sticky').get;
+var other = $262.createRealm().global;
+var otherRegExpProto = other.RegExp.prototype;
+var otherRegExpGetter = Object.getOwnPropertyDescriptor(otherRegExpProto, 'sticky').get;
+
+assert.throws(TypeError, function() {
+ sticky.call(otherRegExpProto);
+}, 'cross-realm RegExp.prototype');
+
+assert.throws(other.TypeError, function() {
+ otherRegExpGetter.call(RegExp.prototype);
+}, 'cross-realm RegExp.prototype getter method against primary realm RegExp.prototype');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/sticky/length.js b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/length.js
new file mode 100644
index 0000000000..220cf0a901
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/length.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.12
+description: >
+ get RegExp.prototype.sticky.length is 0.
+info: |
+ get RegExp.prototype.sticky
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this
+ value is equal to the largest number of named arguments shown in the
+ subclause headings for the function description, including optional
+ parameters. However, rest parameters shown using the form “...name”
+ are not included in the default argument count.
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "sticky");
+
+assert.sameValue(desc.get.length, 0);
+
+verifyNotEnumerable(desc.get, "length");
+verifyNotWritable(desc.get, "length");
+verifyConfigurable(desc.get, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/sticky/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/name.js
new file mode 100644
index 0000000000..8fa5b1ac0f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/name.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 21.2.5.12
+description: >
+ RegExp.prototype.sticky name
+info: |
+ 17 ECMAScript Standard Built-in Objects
+
+ Functions that are specified as get or set accessor functions of built-in
+ properties have "get " or "set " prepended to the property name string.
+includes: [propertyHelper.js]
+---*/
+
+var descriptor = Object.getOwnPropertyDescriptor(RegExp.prototype, 'sticky');
+
+assert.sameValue(
+ descriptor.get.name,
+ 'get sticky'
+);
+
+verifyNotEnumerable(descriptor.get, 'name');
+verifyNotWritable(descriptor.get, 'name');
+verifyConfigurable(descriptor.get, 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/sticky/prop-desc.js b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/prop-desc.js
new file mode 100644
index 0000000000..349219513b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/prop-desc.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 21.2.5.12
+description: >
+ `sticky` property descriptor
+info: |
+ RegExp.prototype.sticky is an accessor property whose set accessor
+ function is undefined.
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, 'sticky');
+
+assert.sameValue(desc.set, undefined);
+assert.sameValue(typeof desc.get, 'function');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/sticky/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/sticky/this-val-invalid-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/this-val-invalid-obj.js
new file mode 100644
index 0000000000..41aaee539b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/this-val-invalid-obj.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Invoked on an object without an [[OriginalFlags]] internal slot
+es6id: 21.2.5.12
+info: |
+ 21.2.5.12 get RegExp.prototype.sticky
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, throw a TypeError
+ exception.
+---*/
+
+var sticky = Object.getOwnPropertyDescriptor(RegExp.prototype, 'sticky').get;
+
+assert.throws(TypeError, function() {
+ sticky.call({});
+}, 'ordinary object');
+
+assert.throws(TypeError, function() {
+ sticky.call([]);
+}, 'array exotic object');
+
+assert.throws(TypeError, function() {
+ sticky.call(arguments);
+}, 'arguments object');
+
+assert.throws(TypeError, function() {
+ sticky.call(() => {});
+}, 'function object');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/sticky/this-val-non-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/this-val-non-obj.js
new file mode 100644
index 0000000000..b0e67154fd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/this-val-non-obj.js
@@ -0,0 +1,46 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ `sticky` accessor invoked on a non-object value
+es6id: 21.2.5.12
+info: |
+ 21.2.5.12 get RegExp.prototype.sticky
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+features: [Symbol]
+---*/
+
+var sticky = Object.getOwnPropertyDescriptor(RegExp.prototype, 'sticky').get;
+
+assert.throws(TypeError, function() {
+ sticky.call(undefined);
+});
+
+assert.throws(TypeError, function() {
+ sticky.call(null);
+});
+
+assert.throws(TypeError, function() {
+ sticky.call(true);
+});
+
+assert.throws(TypeError, function() {
+ sticky.call('string');
+});
+
+assert.throws(TypeError, function() {
+ sticky.call(Symbol('s'));
+});
+
+assert.throws(TypeError, function() {
+ sticky.call(4);
+});
+
+assert.throws(TypeError, function() {
+ sticky.call(4n);
+}, 'bigint');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/sticky/this-val-regexp-prototype.js b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/this-val-regexp-prototype.js
new file mode 100644
index 0000000000..d3c9fc454e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/this-val-regexp-prototype.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.sticky
+description: >
+ Return value of `undefined` when the "this" value is the RegExp prototype
+ object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'sticky').get;
+
+assert.sameValue(get.call(RegExp.prototype), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/sticky/this-val-regexp.js b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/this-val-regexp.js
new file mode 100644
index 0000000000..4308d25afb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/sticky/this-val-regexp.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ `sticky` accessor function invoked on a RegExp instance
+es6id: 21.2.5.12
+info: |
+ 21.2.5.12 get RegExp.prototype.sticky
+
+ 4. Let flags be the value of R’s [[OriginalFlags]] internal slot.
+ 5. If flags contains the code unit "y", return true.
+ 6. Return false.
+---*/
+
+assert.sameValue(/./.sticky, false);
+assert.sameValue(/./i.sticky, false);
+assert.sameValue(/./g.sticky, false);
+assert.sameValue(/./gi.sticky, false);
+
+assert.sameValue(/./y.sticky, true);
+assert.sameValue(/./iy.sticky, true);
+assert.sameValue(/./yg.sticky, true);
+assert.sameValue(/./iyg.sticky, true);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A10.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A10.js
new file mode 100644
index 0000000000..0a8d503e08
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A10.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The RegExp.prototype.test.length property has the attribute ReadOnly
+es5id: 15.10.6.3_A10
+description: Checking if varying the RegExp.prototype.test.length property fails
+includes: [propertyHelper.js]
+---*/
+assert.sameValue(
+ RegExp.prototype.test.hasOwnProperty('length'),
+ true,
+ 'RegExp.prototype.test.hasOwnProperty(\'length\') must return true'
+);
+
+var __obj = RegExp.prototype.test.length;
+
+verifyNotWritable(RegExp.prototype.test, "length", null, function(){return "shifted";});
+
+assert.sameValue(
+ RegExp.prototype.test.length,
+ __obj,
+ 'The value of RegExp.prototype.test.length is expected to equal the value of __obj'
+);
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A11.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A11.js
new file mode 100644
index 0000000000..3dbaa2d9ab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A11.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The length property of the test method is 1
+es5id: 15.10.6.3_A11
+description: Checking RegExp.prototype.test.length
+---*/
+assert.sameValue(
+ RegExp.prototype.test.hasOwnProperty("length"),
+ true,
+ 'RegExp.prototype.test.hasOwnProperty("length") must return true'
+);
+
+assert.sameValue(RegExp.prototype.test.length, 1, 'The value of RegExp.prototype.test.length is expected to be 1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T1.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T1.js
new file mode 100644
index 0000000000..6a64ab568d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T1.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T1
+description: RegExp is /1|12/ and tested string is "123"
+---*/
+
+var __string = "123";
+var __re = /1|12/;
+
+assert.sameValue(
+ __re.test(__string),
+ __re.exec(__string) !== null,
+ '__re.test(""123"") must return __re.exec(__string) !== null'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T10.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T10.js
new file mode 100644
index 0000000000..52d27fd635
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T10.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T10
+description: RegExp is /1|12/ and tested string is 1.01
+---*/
+
+var __string = 1.01;
+var __re = /1|12/;
+
+assert.sameValue(
+ __re.test(__string),
+ __re.exec(__string) !== null,
+ '__re.test(1.01) must return __re.exec(__string) !== null'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T11.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T11.js
new file mode 100644
index 0000000000..3c0caf4afb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T11.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T11
+description: RegExp is /2|12/ and tested string is new Number(1.012)
+---*/
+
+var __string = new Number(1.012);
+var __re = /2|12/;
+
+assert.sameValue(
+ __re.test(__string),
+ __re.exec(__string) !== null,
+ '__re.test(new Number(1.012)) must return __re.exec(__string) !== null'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T12.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T12.js
new file mode 100644
index 0000000000..55adc94424
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T12.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T12
+description: >
+ RegExp is /\.14/ and tested string is {toString:function(){return
+ Math.PI;}}
+---*/
+
+var __string = {toString:function(){return Math.PI;}};
+var __re = /\.14/;
+
+assert.sameValue(
+ __re.test(__string),
+ __re.exec(__string) !== null,
+ '__re.test({toString:function(){return Math.PI;}}) must return __re.exec(__string) !== null'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T13.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T13.js
new file mode 100644
index 0000000000..93b0405274
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T13.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T13
+description: RegExp is /t[a-b|q-s]/ and tested string is true
+---*/
+
+var __string = true;
+var __re = /t[a-b|q-s]/;
+
+assert.sameValue(
+ __re.test(__string),
+ __re.exec(__string) !== null,
+ '__re.test(true) must return __re.exec(__string) !== null'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T14.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T14.js
new file mode 100644
index 0000000000..95460d84fb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T14.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T14
+description: RegExp is /AL|se/ and tested string is new Boolean
+---*/
+
+var __string = new Boolean;
+var __re = /AL|se/;
+
+assert.sameValue(
+ __re.test(__string),
+ __re.exec(__string) !== null,
+ '__re.test(new Boolean) must return __re.exec(__string) !== null'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T15.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T15.js
new file mode 100644
index 0000000000..7017b295d3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T15.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T15
+description: >
+ RegExp is /LS/i and tested string is {toString:function(){return
+ false;}}
+---*/
+
+var __string = {toString:function(){return false;}};
+var __re = /LS/i;
+
+assert.sameValue(
+ __re.test(__string),
+ __re.exec(__string) !== null,
+ '__re.test({toString:function(){return false;}}) must return __re.exec(__string) !== null'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T16.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T16.js
new file mode 100644
index 0000000000..5bd90f169c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T16.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T16
+description: RegExp is /undefined/ and call test() without arguments
+---*/
+
+var __re = /undefined/;
+
+assert.sameValue(__re.test(), __re.exec() !== null, '__re.test() must return __re.exec() !== null');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T17.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T17.js
new file mode 100644
index 0000000000..2d2f52b5cb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T17.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T17
+description: RegExp is /ll|l/ and tested string is null
+---*/
+
+var __re = /ll|l/;
+
+assert.sameValue(__re.test(null), __re.exec(null) !== null, '__re.test(null) must return __re.exec(null) !== null');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T18.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T18.js
new file mode 100644
index 0000000000..0726b40eda
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T18.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T18
+description: RegExp is /nd|ne/ and tested string is undefined
+---*/
+
+var __re = /nd|ne/;
+
+assert.sameValue(
+ __re.test(undefined),
+ __re.exec(undefined) !== null,
+ '__re.test(undefined) must return __re.exec(undefined) !== null'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T19.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T19.js
new file mode 100644
index 0000000000..a767ea20c6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T19.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T19
+description: RegExp is /e{1}/ and tested string is void 0
+---*/
+
+var __re = /e{1}/;
+
+assert.sameValue(
+ __re.test(void 0),
+ __re.exec(void 0) !== null,
+ '__re.test(void 0) must return __re.exec(void 0) !== null'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T2.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T2.js
new file mode 100644
index 0000000000..abe89629f4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T2
+description: >
+ RegExp is /((1)|(12))((3)|(23))/ and tested string is new
+ String("123")
+---*/
+
+var __string = new String("123");
+var __re = /((1)|(12))((3)|(23))/;
+
+assert.sameValue(
+ __re.test(__string),
+ __re.exec(__string) !== null,
+ '__re.test("new String("123")") must return __re.exec(__string) !== null'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T20.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T20.js
new file mode 100644
index 0000000000..50fcf0443c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T20.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T20
+description: RegExp is /[a-f]d/ and tested string is x, where x is undefined
+---*/
+
+var __re = /[a-f]d/;
+
+assert.sameValue(__re.test(x), __re.exec(x) !== null, '__re.test() must return __re.exec(x) !== null');
+
+var x;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T21.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T21.js
new file mode 100644
index 0000000000..1af7dfac0c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T21.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T21
+description: >
+ RegExp is /[a-z]n/ and tested string is x, where x is
+ function(){}()
+---*/
+
+var __re = /[a-z]n/;
+
+assert.sameValue(
+ __re.test(function(){}()),
+ __re.exec(function(){}()) !== null,
+ '__re.test(function(){}()) must return __re.exec(function(){}()) !== null'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T22.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T22.js
new file mode 100644
index 0000000000..cadeb79c93
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T22.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ RegExp.prototype.test behavior depends on the lastIndex property:
+ ToLength(lastIndex) is the starting point for the search, so
+ negative numbers result in searching from 0.
+es5id: 15.10.6.3_A1_T22
+description: "Set lastIndex to -1 and call /(?:ab|cd)\\d?/g.test(\"aacd22 \")"
+---*/
+
+var __re = /(?:ab|cd)\d?/g;
+__re.lastIndex=-1;
+var __executed = __re.test("aacd22 ");
+
+assert(!!__executed, 'The value of !!__executed is expected to be true');
+assert.sameValue(__re.lastIndex, 5, 'The value of __re.lastIndex is expected to be 5');
+
+__re.lastIndex=-100;
+__executed = __re.test("aacd22 ");
+
+assert(!!__executed, 'The value of !!__executed is expected to be true');
+assert.sameValue(__re.lastIndex, 5, 'The value of __re.lastIndex is expected to be 5');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T3.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T3.js
new file mode 100644
index 0000000000..fe59bc5001
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T3
+description: >
+ RegExp is /a[a-z]{2,4}/ and tested string is new
+ Object("abcdefghi")
+---*/
+
+var __string = new Object("abcdefghi");
+var __re = /a[a-z]{2,4}/;
+
+assert.sameValue(
+ __re.test(__string),
+ __re.exec(__string) !== null,
+ '__re.test("new Object("abcdefghi")") must return __re.exec(__string) !== null'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T4.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T4.js
new file mode 100644
index 0000000000..e4b4a1676b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T4.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T4
+description: >
+ RegExp is /a[a-z]{2,4}?/ and tested string is
+ {toString:function(){return "abcdefghi";}}
+---*/
+
+var __string = {toString:function(){return "abcdefghi";}};
+var __re = /a[a-z]{2,4}?/;
+
+assert.sameValue(
+ __re.test(__string),
+ __re.exec(__string) !== null,
+ '__re.test({toString:function(){return "abcdefghi";}}) must return __re.exec(__string) !== null'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T5.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T5.js
new file mode 100644
index 0000000000..d15cd52808
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T5.js
@@ -0,0 +1,22 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T5
+description: >
+ RegExp is /(aa|aabaac|ba|b|c)* / and tested string is
+ {toString:function(){return {};}, valueOf:function(){return
+ "aabaac";}}
+---*/
+
+var __string = {toString:function(){return {};}, valueOf:function(){return "aabaac";}};
+var __re = /(aa|aabaac|ba|b|c)*/;
+
+assert.sameValue(
+ __re.test(__string),
+ __re.exec(__string) !== null,
+ '__re.test("{toString:function(){return {};}, valueOf:function(){return "aabaac";}}) must return __re.exec(__string) !== null'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T6.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T6.js
new file mode 100644
index 0000000000..dad55d3c3a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T6.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T6
+description: >
+ RegExp is /(z)((a+)?(b+)?(c))* / and tested string is
+ (function(){return "zaacbbbcac"})()
+---*/
+
+var __re = /(z)((a+)?(b+)?(c))*/;
+
+assert.sameValue(
+ __re.test((function(){return "zaacbbbcac"})()),
+ __re.exec((function(){return "zaacbbbcac"})()) !== null,
+ '__re.test((function(){return "zaacbbbcac"})()) must return __re.exec((function(){return "zaacbbbcac"})()) !== null'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T7.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T7.js
new file mode 100644
index 0000000000..43abe4e04b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T7.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T7
+description: >
+ RegExp is /[a-z]/ and tested string is {toString:function(){throw
+ "intostr";}}
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[a-z]/.test({toString:function(){throw "intostr";}}) throw "intostr". Actual: ' + (/[a-z]/.test({toString:function(){throw "intostr";}})));
+} catch (e) {
+ assert.sameValue(e, "intostr", 'The value of e is expected to be "intostr"');
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T8.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T8.js
new file mode 100644
index 0000000000..a068a2da63
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T8.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T8
+description: >
+ RegExp is /[a-z]/ and tested string is {toString:void 0,
+ valueOf:function(){throw "invalof";}}
+---*/
+
+try {
+ throw new Test262Error('#1.1: /[a-z]/.test({toString:void 0, valueOf:function(){throw "invalof";}}) throw "invalof". Actual: ' + (/[a-z]/.test({toString:void 0, valueOf:function(){throw "invalof";}})));
+} catch (e) {
+ assert.sameValue(e, "invalof", 'The value of e is expected to be "invalof"');
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T9.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T9.js
new file mode 100644
index 0000000000..dad72cb614
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A1_T9.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Equivalent to the expression RegExp.prototype.exec(string) != null
+es5id: 15.10.6.3_A1_T9
+description: RegExp is /1|12/ and tested string is function object
+---*/
+
+var __string;
+var __re = /1|12/;
+
+assert.sameValue(
+ __re.test(__string),
+ __re.exec(__string) !== null,
+ '__re.test() must return __re.exec(__string) !== null'
+);
+
+function __string(){}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T1.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T1.js
new file mode 100644
index 0000000000..aa7c948527
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T1.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.3_A2_T1
+description: The tested object is new Object
+---*/
+
+var __instance = new Object;
+
+__instance.test = RegExp.prototype.test;
+
+try {
+ throw new Test262Error('#1.1: __instance = new Object; __instance.test = RegExp.prototype.test; __instance.test("message to investigate"). Actual: ' + (__instance.test("message to investigate")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T10.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T10.js
new file mode 100644
index 0000000000..d674d38ae8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T10.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.3_A2_T10
+description: The tested object is undefined
+---*/
+
+var test = RegExp.prototype.test;
+
+try {
+ throw new Test262Error('#1.1: test = RegExp.prototype.test; test("message to investigate"). Actual: ' + (test("message to investigate")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T2.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T2.js
new file mode 100644
index 0000000000..0690647f9e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T2.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.3_A2_T2
+description: The tested object is Math
+---*/
+
+var __instance = Math;
+
+__instance.test = RegExp.prototype.test;
+
+try {
+ __instance.test("message to investigate");
+ throw new Test262Error('#1.1: __instance = Math; __instance.test = RegExp.prototype.test; __instance.test("message to investigate")');
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T3.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T3.js
new file mode 100644
index 0000000000..e304938ad0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T3.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.3_A2_T3
+description: The tested object is function object
+---*/
+
+__instance.test = RegExp.prototype.test;
+
+try {
+ __instance.test("message to investigate");
+ throw new Test262Error('#1.1: __instance.test = RegExp.prototype.test; __instance.test("message to investigate"); function __instance(){}');
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+function __instance(){};
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T4.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T4.js
new file mode 100644
index 0000000000..b22f6dc1b4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T4.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.3_A2_T4
+description: The tested object is new String("[a-b]")
+---*/
+
+var __instance = new String("[a-b]");
+
+__instance.test = RegExp.prototype.test;
+
+ try {
+ throw new Test262Error('#1.1: __instance = new String("[a-b]"); __instance.test = RegExp.prototype.test; test("message to investigate"). Actual: ' + (__instance.test("message to investigate")));
+ } catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+ }
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T5.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T5.js
new file mode 100644
index 0000000000..47fcde5b88
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T5.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.3_A2_T5
+description: The tested object is new Boolean(false)
+---*/
+
+var __instance = new Boolean(false);
+
+__instance.test = RegExp.prototype.test;
+
+ try {
+ throw new Test262Error('#1.1: __instance = new Boolean(false); __instance.test = RegExp.prototype.test; test("message to investigate"). Actual: ' + (__instance.test("message to investigate")));
+ } catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+ }
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T6.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T6.js
new file mode 100644
index 0000000000..3f72ae9523
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T6.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.3_A2_T6
+description: The tested object is new Number(1.0)
+---*/
+
+var __instance = new Number(1.0);
+
+__instance.test = RegExp.prototype.test;
+
+try {
+ throw new Test262Error('#1.1: __instance = new Number(1.0); __instance.test = RegExp.prototype.test; __instance["test"]("message to investigate"). Actual: ' + (__instance["test"]("message to investigate")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T7.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T7.js
new file mode 100644
index 0000000000..19794986f5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T7.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.3_A2_T7
+description: The tested object is false
+---*/
+
+var __instance = false;
+
+Object.prototype.test = RegExp.prototype.test;
+
+try {
+ throw new Test262Error('#1.1: __instance = false; Object.prototype.test = RegExp.prototype.test; __instance.test("message to investigate"). Actual: ' + (__instance.test("message to investigate")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T8.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T8.js
new file mode 100644
index 0000000000..a50d1fcedd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T8.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.3_A2_T8
+description: The tested object is "."
+---*/
+
+var __instance = ".";
+
+Object.prototype.test = RegExp.prototype.test;
+
+try {
+ throw new Test262Error('#1.1: __instance = "."; Object.prototype.test = RegExp.prototype.test; __instance.test("message to investigate"). Actual: ' + (__instance.test("message to investigate")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T9.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T9.js
new file mode 100644
index 0000000000..0ff585e300
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A2_T9.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A TypeError exception is thrown if the this value is not an object for
+ which the value of the internal [[Class]] property is "RegExp"
+es5id: 15.10.6.3_A2_T9
+description: The tested object is 1.0
+---*/
+
+var __instance = 1.0;
+
+Object.prototype.test = RegExp.prototype.test;
+
+try {
+ throw new Test262Error('#1.1: __instance = 1.0; Object.prototype.test = RegExp.prototype.test; __instance.test("message to investigate"). Actual: ' + (__instance.test("message to investigate")));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A6.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A6.js
new file mode 100644
index 0000000000..2888978604
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A6.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp.prototype.test has not prototype property
+es5id: 15.10.6.3_A6
+description: Checking RegExp.prototype.test.prototype
+---*/
+assert.sameValue(
+ RegExp.prototype.test.prototype,
+ undefined,
+ 'The value of RegExp.prototype.test.prototype is expected to equal undefined'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A7.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A7.js
new file mode 100644
index 0000000000..db7364bd31
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A7.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp.prototype.test can't be used as constructor
+es5id: 15.10.6.3_A7
+description: Checking if creating the RegExp.prototype.test object fails
+---*/
+
+var __FACTORY = RegExp.prototype.test;
+
+try {
+ var __instance = new __FACTORY;
+ throw new Test262Error('#1.1: __FACTORY = RegExp.prototype.test throw TypeError. Actual: ' + (__instance));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A8.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A8.js
new file mode 100644
index 0000000000..e956dacab2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A8.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The RegExp.prototype.test.length property has the attribute DontEnum
+es5id: 15.10.6.3_A8
+description: >
+ Checking if enumerating the RegExp.prototype.test.length property
+ fails
+---*/
+assert.sameValue(
+ RegExp.prototype.test.hasOwnProperty('length'),
+ true,
+ 'RegExp.prototype.test.hasOwnProperty(\'length\') must return true'
+);
+
+assert.sameValue(
+ RegExp.prototype.test.propertyIsEnumerable('length'),
+ false,
+ 'RegExp.prototype.test.propertyIsEnumerable(\'length\') must return false'
+);
+
+var count=0;
+
+for (var p in RegExp.prototype.test){
+ if (p==="length") {
+ count++;
+ }
+}
+
+assert.sameValue(count, 0, 'The value of count is expected to be 0');
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A9.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A9.js
new file mode 100644
index 0000000000..7667d3f3a3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/S15.10.6.3_A9.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The RegExp.prototype.test.length property does not have the attribute
+ DontDelete
+es5id: 15.10.6.3_A9
+description: Checking if deleting RegExp.prototype.test.length property fails
+---*/
+assert.sameValue(
+ RegExp.prototype.exec.hasOwnProperty('length'),
+ true,
+ 'RegExp.prototype.exec.hasOwnProperty(\'length\') must return true'
+);
+
+assert.sameValue(
+ delete RegExp.prototype.exec.length,
+ true,
+ 'The value of `delete RegExp.prototype.exec.length` is expected to be true'
+);
+
+assert.sameValue(
+ RegExp.prototype.exec.hasOwnProperty('length'),
+ false,
+ 'RegExp.prototype.exec.hasOwnProperty(\'length\') must return false'
+);
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/name.js
new file mode 100644
index 0000000000..7ee8a9a2e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.13
+description: >
+ RegExp.prototype.test.name is "test".
+info: |
+ RegExp.prototype.test( S )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(RegExp.prototype.test.name, "test");
+
+verifyNotEnumerable(RegExp.prototype.test, "name");
+verifyNotWritable(RegExp.prototype.test, "name");
+verifyConfigurable(RegExp.prototype.test, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/not-a-constructor.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/not-a-constructor.js
new file mode 100644
index 0000000000..ee6ce0aeaf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ RegExp.prototype.test does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(RegExp.prototype.test),
+ false,
+ 'isConstructor(RegExp.prototype.test) must return false'
+);
+
+assert.throws(TypeError, () => {
+ let re = new RegExp(''); new re.test();
+}, '`let re = new RegExp(\'\'); new re.test()` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/y-fail-lastindex-no-write.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/y-fail-lastindex-no-write.js
new file mode 100644
index 0000000000..0746d299c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/y-fail-lastindex-no-write.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Match failure with non-writable `lastIndex` property
+es6id: 21.2.5.13
+info: |
+ 21.2.5.13 RegExp.prototype.test( S )
+
+ [...]
+ 5. Let match be RegExpExec(R, string).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ b. Let r be matcher(S, lastIndex).
+ c. If r is failure, then
+ i. If sticky is true, then
+ 1. Let setStatus be Set(R, "lastIndex", 0, true).
+ 2. ReturnIfAbrupt(setStatus).
+---*/
+
+var r = /c/y;
+Object.defineProperty(r, 'lastIndex', {
+ writable: false
+});
+
+assert.throws(TypeError, function() {
+ r.test('abc');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/y-fail-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/y-fail-lastindex.js
new file mode 100644
index 0000000000..ec9e0a51b2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/y-fail-lastindex.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Resets the `lastIndex` property to zero after a match failure
+es6id: 21.2.5.13
+info: |
+ 21.2.5.13 RegExp.prototype.test( S )
+
+ [...]
+ 5. Let match be RegExpExec(R, string).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ b. Let r be matcher(S, lastIndex).
+ c. If r is failure, then
+ i. If sticky is true, then
+ 1. Let setStatus be Set(R, "lastIndex", 0, true).
+---*/
+
+var r = /c/y;
+r.lastIndex = 1;
+
+r.test('abc');
+
+assert.sameValue(r.lastIndex, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/y-fail-return.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/y-fail-return.js
new file mode 100644
index 0000000000..17c627c804
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/y-fail-return.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Stops match execution after first match failure
+es6id: 21.2.5.13
+info: |
+ 21.2.5.13 RegExp.prototype.test( S )
+
+ [...]
+ 5. Let match be RegExpExec(R, string).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 15. Repeat, while matchSucceeded is false
+ [...]
+ b. Let r be matcher(S, lastIndex).
+ c. If r is failure, then
+ i. If sticky is true, then
+ [...]
+ 3. Return null.
+---*/
+
+assert.sameValue(/b/y.test('ab'), false);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/y-init-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/y-init-lastindex.js
new file mode 100644
index 0000000000..2d66352dce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/y-init-lastindex.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Honors initial value of the `lastIndex` property
+es6id: 21.2.5.13
+info: |
+ 21.2.5.13 RegExp.prototype.test( S )
+
+ [...]
+ 5. Let match be RegExpExec(R, string).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 4. Let lastIndex be ToLength(Get(R,"lastIndex")).
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ 9. ReturnIfAbrupt(sticky).
+ 10. If global is false and sticky is false, let lastIndex be 0.
+---*/
+
+var r = /./y;
+r.lastIndex = 1;
+
+assert.sameValue(r.test('a'), false);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/test/y-set-lastindex.js b/js/src/tests/test262/built-ins/RegExp/prototype/test/y-set-lastindex.js
new file mode 100644
index 0000000000..17f01468a5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/test/y-set-lastindex.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Sets the `lastIndex` property to the end index of the first match
+es6id: 21.2.5.13
+info: |
+ 21.2.5.13 RegExp.prototype.test( S )
+
+ [...]
+ 5. Let match be RegExpExec(R, string).
+
+ 21.2.5.2.2 Runtime Semantics: RegExpBuiltinExec ( R, S )
+
+ [...]
+ 8. Let sticky be ToBoolean(Get(R, "sticky")).
+ [...]
+ 18. If global is true or sticky is true,
+ a. Let setStatus be Set(R, "lastIndex", e, true).
+---*/
+
+var r = /abc/y;
+
+r.test('abc');
+
+assert.sameValue(r.lastIndex, 3);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A10.js b/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A10.js
new file mode 100644
index 0000000000..34498afafc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A10.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The RegExp.prototype.toString.length property has the attribute ReadOnly
+es5id: 15.10.6.4_A10
+description: >
+ Checking if varying the RegExp.prototype.toString.length property
+ fails
+includes: [propertyHelper.js]
+---*/
+assert.sameValue(
+ RegExp.prototype.toString.hasOwnProperty('length'),
+ true,
+ 'RegExp.prototype.toString.hasOwnProperty(\'length\') must return true'
+);
+
+var __obj = RegExp.prototype.toString.length;
+
+verifyNotWritable(RegExp.prototype.toString, "length", null, function(){return "shifted";});
+
+assert.sameValue(
+ RegExp.prototype.toString.length,
+ __obj,
+ 'The value of RegExp.prototype.toString.length is expected to equal the value of __obj'
+);
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A11.js b/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A11.js
new file mode 100644
index 0000000000..ba322bd577
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A11.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The length property of the toString method is 1
+es5id: 15.10.6.4_A11
+description: Checking RegExp.prototype.toString.length
+---*/
+assert.sameValue(
+ RegExp.prototype.toString.hasOwnProperty("length"),
+ true,
+ 'RegExp.prototype.toString.hasOwnProperty("length") must return true'
+);
+
+assert.sameValue(
+ RegExp.prototype.toString.length,
+ 0,
+ 'The value of RegExp.prototype.toString.length is expected to be 0'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A6.js b/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A6.js
new file mode 100644
index 0000000000..42adb4757d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A6.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp.prototype.toString has not prototype property
+es5id: 15.10.6.4_A6
+description: Checking RegExp.prototype.toString.prototype
+includes: [isConstructor.js]
+features: [Reflect.construct]
+---*/
+assert.sameValue(
+ RegExp.prototype.toString.prototype,
+ undefined,
+ 'The value of RegExp.prototype.toString.prototype is expected to equal undefined'
+);
+
+assert.sameValue(
+ isConstructor(RegExp.prototype.toString),
+ false,
+ 'isConstructor(RegExp.prototype.toString) must return false'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A7.js b/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A7.js
new file mode 100644
index 0000000000..334fcc1f4d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A7.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: RegExp.prototype.toString can't be used as constructor
+es5id: 15.10.6.4_A7
+description: Checking if creating the RegExp.prototype.toString object fails
+includes: [isConstructor.js]
+features: [Reflect.construct]
+---*/
+
+var __FACTORY = RegExp.prototype.toString;
+
+try {
+ var __instance = new __FACTORY;
+ throw new Test262Error('#1.1: __FACTORY = RegExp.prototype.toString throw TypeError. Actual: ' + (__instance));
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+
+assert.sameValue(
+ isConstructor(RegExp.prototype.toString),
+ false,
+ 'isConstructor(RegExp.prototype.toString) must return false'
+);
+
+// TODO: Convert to assert.throws() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A8.js b/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A8.js
new file mode 100644
index 0000000000..fe8d29d512
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A8.js
@@ -0,0 +1,35 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The RegExp.prototype.toString.length property has the attribute DontEnum
+es5id: 15.10.6.4_A8
+description: >
+ Checking if enumerating the RegExp.prototype.toString.length
+ property fails
+---*/
+assert.sameValue(
+ RegExp.prototype.toString.hasOwnProperty('length'),
+ true,
+ 'RegExp.prototype.toString.hasOwnProperty(\'length\') must return true'
+);
+
+assert.sameValue(
+ RegExp.prototype.toString.propertyIsEnumerable('length'),
+ false,
+ 'RegExp.prototype.toString.propertyIsEnumerable(\'length\') must return false'
+);
+
+var count=0;
+
+for (var p in RegExp.prototype.toString){
+ if (p==="length") {
+ count++;
+ }
+}
+
+assert.sameValue(count, 0, 'The value of count is expected to be 0');
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A9.js b/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A9.js
new file mode 100644
index 0000000000..34f1cdffc9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/toString/S15.10.6.4_A9.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The RegExp.prototype.toString.length property does not have the attribute
+ DontDelete
+es5id: 15.10.6.4_A9
+description: >
+ Checking if deleting the RegExp.prototype.toString.length property
+ fails
+---*/
+assert.sameValue(
+ RegExp.prototype.toString.hasOwnProperty('length'),
+ true,
+ 'RegExp.prototype.toString.hasOwnProperty(\'length\') must return true'
+);
+
+assert.sameValue(
+ delete RegExp.prototype.toString.length,
+ true,
+ 'The value of `delete RegExp.prototype.toString.length` is expected to be true'
+);
+
+assert.sameValue(
+ RegExp.prototype.toString.hasOwnProperty('length'),
+ false,
+ 'RegExp.prototype.toString.hasOwnProperty(\'length\') must return false'
+);
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/toString/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/toString/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/toString/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/toString/called-as-function.js b/js/src/tests/test262/built-ins/RegExp/prototype/toString/called-as-function.js
new file mode 100644
index 0000000000..0b64826c37
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/toString/called-as-function.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-regexp.prototype.tostring
+description: >
+ `this` value is resolved using strict mode semantics,
+ throwing TypeError if called as top-level function.
+info: |
+ RegExp.prototype.toString ( )
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+
+ ToObject ( argument )
+
+ Argument Type: Undefined
+ Result: Throw a TypeError exception.
+---*/
+
+["source", "flags"].forEach(function(key) {
+ Object.defineProperty(this, key, {
+ get: function() {
+ throw new Test262Error(key + " lookup should not be performed");
+ },
+ });
+}, this);
+
+var toString = RegExp.prototype.toString;
+assert.throws(TypeError, function() {
+ toString();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/toString/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/toString/name.js
new file mode 100644
index 0000000000..91fe5a8809
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/toString/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.5.14
+description: >
+ RegExp.prototype.toString.name is "toString".
+info: |
+ RegExp.prototype.toString ( )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(RegExp.prototype.toString.name, "toString");
+
+verifyNotEnumerable(RegExp.prototype.toString, "name");
+verifyNotWritable(RegExp.prototype.toString, "name");
+verifyConfigurable(RegExp.prototype.toString, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/toString/not-a-constructor.js b/js/src/tests/test262/built-ins/RegExp/prototype/toString/not-a-constructor.js
new file mode 100644
index 0000000000..f064aaf64d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/toString/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ RegExp.prototype.toString does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(RegExp.prototype.toString),
+ false,
+ 'isConstructor(RegExp.prototype.toString) must return false'
+);
+
+assert.throws(TypeError, () => {
+ let re = new RegExp(''); new re.toString();
+}, '`let re = new RegExp(\'\'); new re.toString()` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/toString/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/toString/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/toString/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicode/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicode/cross-realm.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/cross-realm.js
new file mode 100644
index 0000000000..dd86e4d5ad
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/cross-realm.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Invoked on a cross-realm object without an [[OriginalFlags]] internal slot
+es6id: 21.2.5.15
+info: |
+ 21.2.5.15 get RegExp.prototype.unicode
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, throw a TypeError
+ exception.
+features: [cross-realm]
+---*/
+
+var unicode = Object.getOwnPropertyDescriptor(RegExp.prototype, 'unicode').get;
+var other = $262.createRealm().global;
+var otherRegExpProto = other.RegExp.prototype;
+var otherRegExpGetter = Object.getOwnPropertyDescriptor(otherRegExpProto, 'unicode').get;
+
+assert.throws(TypeError, function() {
+ unicode.call(otherRegExpProto);
+}, 'cross-realm RegExp.prototype');
+
+assert.throws(other.TypeError, function() {
+ otherRegExpGetter.call(RegExp.prototype);
+}, 'cross-realm RegExp.prototype getter method against primary realm RegExp.prototype');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicode/length.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/length.js
new file mode 100644
index 0000000000..127e2d0428
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/length.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 21.2.5.15
+description: >
+ "length" property of `unicode` accessor function
+info: |
+ ES6 section 17: Every built-in Function object, including constructors, has
+ a length property whose value is an integer. Unless otherwise specified,
+ this value is equal to the largest number of named arguments shown in the
+ subclause headings for the function description, including optional
+ parameters.
+
+ [...]
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+var getter = Object.getOwnPropertyDescriptor(RegExp.prototype, 'unicode').get;
+
+assert.sameValue(getter.length, 0);
+
+verifyNotEnumerable(getter, 'length');
+verifyNotWritable(getter, 'length');
+verifyConfigurable(getter, 'length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicode/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/name.js
new file mode 100644
index 0000000000..1e1858b46d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/name.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 21.2.5.15
+description: >
+ "name" property of `unicode` accessor function
+info: |
+ The value of the name property of this function is "get ".
+
+ ES6 section 17:
+
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value is a
+ String.
+
+ [...]
+
+ Functions that are specified as get or set accessor functions of built-in
+ properties have "get " or "set " prepended to the property name string.
+
+ [...]
+
+ Unless otherwise specified, the name property of a built-in
+ Function object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+var getter = Object.getOwnPropertyDescriptor(RegExp.prototype, 'unicode').get;
+
+assert.sameValue(getter.name, 'get unicode');
+
+verifyNotEnumerable(getter, 'name');
+verifyNotWritable(getter, 'name');
+verifyConfigurable(getter, 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicode/prop-desc.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/prop-desc.js
new file mode 100644
index 0000000000..c4c89d7e6e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/prop-desc.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 21.2.5.15
+description: >
+ `unicode` property descriptor
+info: |
+ RegExp.prototype.unicode is an accessor property whose set accessor
+ function is undefined.
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, 'unicode');
+
+assert.sameValue(desc.set, undefined);
+assert.sameValue(typeof desc.get, 'function');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicode/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicode/this-val-invalid-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/this-val-invalid-obj.js
new file mode 100644
index 0000000000..1a8bcb012a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/this-val-invalid-obj.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Invoked on an object without an [[OriginalFlags]] internal slot
+es6id: 21.2.5.15
+info: |
+ 21.2.5.15 get RegExp.prototype.unicode
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, throw a TypeError
+ exception.
+---*/
+
+var unicode = Object.getOwnPropertyDescriptor(RegExp.prototype, 'unicode').get;
+
+assert.throws(TypeError, function() {
+ unicode.call({});
+}, 'ordinary object');
+
+assert.throws(TypeError, function() {
+ unicode.call([]);
+}, 'array exotic object');
+
+assert.throws(TypeError, function() {
+ unicode.call(arguments);
+}, 'arguments object');
+
+assert.throws(TypeError, function() {
+ unicode.call(() => {});
+}, 'function object');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicode/this-val-non-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/this-val-non-obj.js
new file mode 100644
index 0000000000..d5a8130c1a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/this-val-non-obj.js
@@ -0,0 +1,46 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ `unicode` accessor invoked on a non-object value
+es6id: 21.2.5.15
+info: |
+ 21.2.5.15 get RegExp.prototype.unicode
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+features: [Symbol]
+---*/
+
+var unicode = Object.getOwnPropertyDescriptor(RegExp.prototype, 'unicode').get;
+
+assert.throws(TypeError, function() {
+ unicode.call(undefined);
+});
+
+assert.throws(TypeError, function() {
+ unicode.call(null);
+});
+
+assert.throws(TypeError, function() {
+ unicode.call(true);
+});
+
+assert.throws(TypeError, function() {
+ unicode.call('string');
+});
+
+assert.throws(TypeError, function() {
+ unicode.call(Symbol('s'));
+});
+
+assert.throws(TypeError, function() {
+ unicode.call(4);
+});
+
+assert.throws(TypeError, function() {
+ unicode.call(4n);
+}, 'bigint');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicode/this-val-regexp-prototype.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/this-val-regexp-prototype.js
new file mode 100644
index 0000000000..4b7d407c00
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/this-val-regexp-prototype.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.unicode
+description: >
+ Return value of `undefined` when the "this" value is the RegExp prototype
+ object
+info: |
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, 'unicode').get;
+
+assert.sameValue(get.call(RegExp.prototype), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicode/this-val-regexp.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/this-val-regexp.js
new file mode 100644
index 0000000000..abc61293f2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicode/this-val-regexp.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ `unicode` accessor function invoked on a RegExp instance
+es6id: 21.2.5.15
+info: |
+ 21.2.5.15 get RegExp.prototype.unicode
+
+ [...]
+ 4. Let flags be the value of R’s [[OriginalFlags]] internal slot.
+ 5. If flags contains the code unit "u", return true.
+ 6. Return false.
+---*/
+
+assert.sameValue(/./.unicode, false);
+assert.sameValue(/./i.unicode, false);
+assert.sameValue(/./g.unicode, false);
+assert.sameValue(/./gi.unicode, false);
+
+assert.sameValue(/./u.unicode, true);
+assert.sameValue(/./iu.unicode, true);
+assert.sameValue(/./ug.unicode, true);
+assert.sameValue(/./iug.unicode, true);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-01.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-01.js
new file mode 100644
index 0000000000..f0e4f208f9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-01.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[(]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-02.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-02.js
new file mode 100644
index 0000000000..a22587504c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-02.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[)]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-03.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-03.js
new file mode 100644
index 0000000000..488a979c3f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-03.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[[]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-04.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-04.js
new file mode 100644
index 0000000000..0b1556f050
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-04.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[{]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-05.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-05.js
new file mode 100644
index 0000000000..9fd5e7dd22
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-05.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[}]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-06.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-06.js
new file mode 100644
index 0000000000..4e1efd8b35
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-06.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[/]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-07.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-07.js
new file mode 100644
index 0000000000..18dd730ddc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-07.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[-]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-08.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-08.js
new file mode 100644
index 0000000000..a89f44af32
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-08.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[|]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-09.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-09.js
new file mode 100644
index 0000000000..9ed867d9b2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-09.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[&&]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-10.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-10.js
new file mode 100644
index 0000000000..866acdd44e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-10.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[!!]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-11.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-11.js
new file mode 100644
index 0000000000..4cad46b6b4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-11.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[##]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-12.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-12.js
new file mode 100644
index 0000000000..04909cbc0b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-12.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[$$]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-13.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-13.js
new file mode 100644
index 0000000000..424f52d063
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-13.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[%%]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-14.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-14.js
new file mode 100644
index 0000000000..6694bbee88
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-14.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[**]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-15.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-15.js
new file mode 100644
index 0000000000..ec71a8d130
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-15.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[++]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-16.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-16.js
new file mode 100644
index 0000000000..7599abcbaa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-16.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[,,]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-17.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-17.js
new file mode 100644
index 0000000000..95c93e4329
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-17.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[..]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-18.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-18.js
new file mode 100644
index 0000000000..fe505f4759
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-18.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[::]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-19.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-19.js
new file mode 100644
index 0000000000..70fd4c9177
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-19.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[;;]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-20.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-20.js
new file mode 100644
index 0000000000..4a07e47ea1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-20.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[<<]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-21.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-21.js
new file mode 100644
index 0000000000..84d944a0b3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-21.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[==]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-22.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-22.js
new file mode 100644
index 0000000000..386c331472
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-22.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[>>]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-23.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-23.js
new file mode 100644
index 0000000000..2d0935f53b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-23.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[??]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-24.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-24.js
new file mode 100644
index 0000000000..9241b85cf9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-24.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[@@]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-25.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-25.js
new file mode 100644
index 0000000000..7d16515876
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-25.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[``]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-26.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-26.js
new file mode 100644
index 0000000000..7d3c0d49ba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-26.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[~~]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-27.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-27.js
new file mode 100644
index 0000000000..2d2a4b1729
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-27.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[^^^]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-28.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-28.js
new file mode 100644
index 0000000000..dc5a0ad292
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-28.js
@@ -0,0 +1,20 @@
+// |reftest| error:SyntaxError
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Some previously valid patterns with the `u` flag are now expected to
+ throw an early SyntaxError with the `v` flag.
+ https://github.com/tc39/proposal-regexp-v-flag#how-is-the-v-flag-different-from-the-u-flag
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/[_^^]/v;
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/browser.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/cross-realm.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/cross-realm.js
new file mode 100644
index 0000000000..977e85cfa6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/cross-realm.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2022 Mathias Bynens, Ron Buckton, and the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.unicodeSets
+description: RegExp#unicodeSets invoked on a cross-realm object
+info: |
+ get RegExp.prototype.unicodeSets -> RegExpHasFlag
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+ b. Otherwise, throw a TypeError exception.
+features: [regexp-v-flag, cross-realm]
+---*/
+
+var unicodeSets = Object.getOwnPropertyDescriptor(RegExp.prototype, 'unicodeSets').get;
+var other = $262.createRealm().global;
+var otherRegExpProto = other.RegExp.prototype;
+var otherRegExpGetter = Object.getOwnPropertyDescriptor(otherRegExpProto, 'unicodeSets').get;
+
+assert.throws(TypeError, function() {
+ unicodeSets.call(otherRegExpProto);
+}, 'cross-realm RegExp.prototype');
+
+assert.throws(other.TypeError, function() {
+ otherRegExpGetter.call(RegExp.prototype);
+}, 'cross-realm RegExp.prototype getter method against primary realm RegExp.prototype');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/length.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/length.js
new file mode 100644
index 0000000000..47d429c6f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/length.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2022 Mathias Bynens, Ron Buckton, and André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.unicodeSets
+description: >
+ get RegExp.prototype.unicodeSets.length is 0.
+info: |
+ get RegExp.prototype.unicodeSets
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this
+ value is equal to the largest number of named arguments shown in the
+ subclause headings for the function description, including optional
+ parameters. However, rest parameters shown using the form “...name”
+ are not included in the default argument count.
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [regexp-v-flag]
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "unicodeSets");
+
+assert.sameValue(desc.get.length, 0);
+
+verifyProperty(desc.get, "length", {
+ enumerable: false,
+ writable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/name.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/name.js
new file mode 100644
index 0000000000..b67dbd8bec
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/name.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2022 Mathias Bynens, Ron Buckton, and the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.unicodeSets
+description: >
+ RegExp.prototype.unicodeSets name
+info: |
+ 17 ECMAScript Standard Built-in Objects
+
+ Functions that are specified as get or set accessor functions of built-in
+ properties have "get " or "set " prepended to the property name string.
+includes: [propertyHelper.js]
+features: [regexp-v-flag]
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "unicodeSets");
+
+assert.sameValue(
+ desc.get.name,
+ "get unicodeSets"
+);
+
+verifyProperty(desc.get, "name", {
+ enumerable: false,
+ writable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/prop-desc.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/prop-desc.js
new file mode 100644
index 0000000000..a78ecb36f3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/prop-desc.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2022 Mathias Bynens, Ron Buckton, and the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-get-regexp.prototype.unicodeSets
+description: >
+ `pending` property descriptor
+info: |
+ RegExp.prototype.unicodeSets is an accessor property whose set accessor
+ function is undefined.
+
+ 17 ECMAScript Standard Built-in Objects
+
+ Every accessor property described in clauses 18 through 26 and in Annex B.2 has the attributes
+ { [[Enumerable]]: false, [[Configurable]]: true } unless otherwise specified. If only a get
+ accessor function is described, the set accessor function is the default value, undefined. If
+ only a set accessor is described the get accessor is the default value, undefined.
+includes: [propertyHelper.js]
+features: [regexp-v-flag]
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "unicodeSets");
+
+assert.sameValue(desc.set, undefined);
+assert.sameValue(typeof desc.get, "function");
+
+verifyProperty(RegExp.prototype, "unicodeSets", {
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/shell.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/this-val-invalid-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/this-val-invalid-obj.js
new file mode 100644
index 0000000000..def04a6521
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/this-val-invalid-obj.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2022 Mathias Bynens, Ron Buckton, and the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.unicodeSets
+description: Invoked on an object without an [[OriginalFlags]] internal slot
+info: |
+ get RegExp.prototype.unicodeSets -> RegExpHasFlag
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+ b. Otherwise, throw a TypeError exception.
+features: [regexp-v-flag]
+---*/
+
+var unicodeSets = Object.getOwnPropertyDescriptor(RegExp.prototype, 'unicodeSets').get;
+
+assert.throws(TypeError, function() {
+ unicodeSets.call({});
+}, 'ordinary object');
+
+assert.throws(TypeError, function() {
+ unicodeSets.call([]);
+}, 'array exotic object');
+
+assert.throws(TypeError, function() {
+ unicodeSets.call(arguments);
+}, 'arguments object');
+
+assert.throws(TypeError, function() {
+ unicodeSets.call(() => {});
+}, 'function object');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/this-val-non-obj.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/this-val-non-obj.js
new file mode 100644
index 0000000000..a3b0e4528c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/this-val-non-obj.js
@@ -0,0 +1,46 @@
+// Copyright (C) 2022 Mathias Bynens, Ron Buckton, and the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.unicodeSets
+description: >
+ `unicodeSets` accessor invoked on a non-object value
+info: |
+ get RegExp.prototype.unicodeSets -> RegExpHasFlag
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+features: [Symbol, regexp-v-flag]
+---*/
+
+var unicodeSets = Object.getOwnPropertyDescriptor(RegExp.prototype, "unicodeSets").get;
+
+assert.throws(TypeError, function() {
+ unicodeSets.call(undefined);
+}, "undefined");
+
+assert.throws(TypeError, function() {
+ unicodeSets.call(null);
+}, "null");
+
+assert.throws(TypeError, function() {
+ unicodeSets.call(true);
+}, "true");
+
+assert.throws(TypeError, function() {
+ unicodeSets.call("string");
+}, "string");
+
+assert.throws(TypeError, function() {
+ unicodeSets.call(Symbol("s"));
+}, "symbol");
+
+assert.throws(TypeError, function() {
+ unicodeSets.call(4);
+}, "number");
+
+assert.throws(TypeError, function() {
+ unicodeSets.call(4n);
+}, "bigint");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/this-val-regexp-prototype.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/this-val-regexp-prototype.js
new file mode 100644
index 0000000000..251cc17eb6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/this-val-regexp-prototype.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2022 Mathias Bynens, Ron Buckton, and the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.unicodeSets
+description: >
+ Return value of `undefined` when the "this" value is the RegExp prototype
+ object
+info: |
+ get RegExp.prototype.unicodeSets -> RegExpHasFlag
+
+ 1. Let R be the this value.
+ 2. If Type(R) is not Object, throw a TypeError exception.
+ 3. If R does not have an [[OriginalFlags]] internal slot, then
+ a. If SameValue(R, %RegExpPrototype%) is true, return undefined.
+features: [regexp-v-flag]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(RegExp.prototype, "unicodeSets").get;
+
+assert.sameValue(get.call(RegExp.prototype), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/this-val-regexp.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/this-val-regexp.js
new file mode 100644
index 0000000000..e2c782d190
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/this-val-regexp.js
@@ -0,0 +1,53 @@
+// Copyright (C) 2022 Mathias Bynens, Ron Buckton, and the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-get-regexp.prototype.unicodeSets
+description: >
+ `unicodeSets` accessor function invoked on a RegExp instance
+info: |
+ get RegExp.prototype.unicodeSets -> RegExpHasFlag
+
+ 4. Let flags be the value of R’s [[OriginalFlags]] internal slot.
+ 5. If flags contains the code unit "s", return true.
+ 6. Return false.
+features: [regexp-v-flag]
+---*/
+
+assert.sameValue(/./.unicodeSets, false, "/./.unicodeSets");
+assert.sameValue(/./d.unicodeSets, false, "/./d.unicodeSets");
+assert.sameValue(/./g.unicodeSets, false, "/./g.unicodeSets");
+assert.sameValue(/./i.unicodeSets, false, "/./i.unicodeSets");
+assert.sameValue(/./m.unicodeSets, false, "/./m.unicodeSets");
+assert.sameValue(/./s.unicodeSets, false, "/./s.unicodeSets");
+assert.sameValue(/./u.unicodeSets, false, "/./u.unicodeSets");
+assert.sameValue(/./y.unicodeSets, false, "/./y.unicodeSets");
+
+assert.sameValue(/./v.unicodeSets, true, "/./v.unicodeSets");
+assert.sameValue(/./vd.unicodeSets, true, "/./vd.unicodeSets");
+assert.sameValue(/./vg.unicodeSets, true, "/./vg.unicodeSets");
+assert.sameValue(/./vi.unicodeSets, true, "/./vi.unicodeSets");
+assert.sameValue(/./vm.unicodeSets, true, "/./vm.unicodeSets");
+assert.sameValue(/./vs.unicodeSets, true, "/./vs.unicodeSets");
+// Note: `/vu` throws an early parse error and is tested separately.
+assert.sameValue(/./vy.unicodeSets, true, "/./vy.unicodeSets");
+
+assert.sameValue(new RegExp(".", "").unicodeSets, false, "new RegExp('.', '').unicodeSets");
+assert.sameValue(new RegExp(".", "d").unicodeSets, false, "new RegExp('.', 'd').unicodeSets");
+assert.sameValue(new RegExp(".", "g").unicodeSets, false, "new RegExp('.', 'g').unicodeSets");
+assert.sameValue(new RegExp(".", "i").unicodeSets, false, "new RegExp('.', 'i').unicodeSets");
+assert.sameValue(new RegExp(".", "m").unicodeSets, false, "new RegExp('.', 'm').unicodeSets");
+assert.sameValue(new RegExp(".", "s").unicodeSets, false, "new RegExp('.', 's').unicodeSets");
+assert.sameValue(new RegExp(".", "u").unicodeSets, false, "new RegExp('.', 'u').unicodeSets");
+assert.sameValue(new RegExp(".", "y").unicodeSets, false, "new RegExp('.', 'y').unicodeSets");
+
+assert.sameValue(new RegExp(".", "v").unicodeSets, true, "new RegExp('.', 'v').unicodeSets");
+assert.sameValue(new RegExp(".", "vd").unicodeSets, true, "new RegExp('.', 'vd').unicodeSets");
+assert.sameValue(new RegExp(".", "vg").unicodeSets, true, "new RegExp('.', 'vg').unicodeSets");
+assert.sameValue(new RegExp(".", "vi").unicodeSets, true, "new RegExp('.', 'vi').unicodeSets");
+assert.sameValue(new RegExp(".", "vm").unicodeSets, true, "new RegExp('.', 'vm').unicodeSets");
+assert.sameValue(new RegExp(".", "vs").unicodeSets, true, "new RegExp('.', 'vs').unicodeSets");
+// Note: `new RegExp(pattern, 'vu')` throws a runtime error and is tested separately.
+assert.sameValue(new RegExp(".", "vy").unicodeSets, true, "new RegExp('.', 'vy').unicodeSets");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/uv-flags-constructor.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/uv-flags-constructor.js
new file mode 100644
index 0000000000..1974aaa7c8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/uv-flags-constructor.js
@@ -0,0 +1,16 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Setting the `u` and `v` flag at the same time produces an error.
+esid: sec-parsepattern
+features: [regexp-v-flag]
+---*/
+
+assert.throws(SyntaxError, function() {
+ new RegExp(".", "uv");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/uv-flags.js b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/uv-flags.js
new file mode 100644
index 0000000000..9432dda9b0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/prototype/unicodeSets/uv-flags.js
@@ -0,0 +1,18 @@
+// |reftest| error:SyntaxError
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Setting the `u` and `v` flag at the same time produces an error.
+esid: sec-parsepattern
+negative:
+ phase: parse
+ type: SyntaxError
+features: [regexp-v-flag]
+---*/
+
+$DONOTEVALUATE();
+
+/./uv;
diff --git a/js/src/tests/test262/built-ins/RegExp/quantifier-integer-limit.js b/js/src/tests/test262/built-ins/RegExp/quantifier-integer-limit.js
new file mode 100644
index 0000000000..68a2f8cc55
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/quantifier-integer-limit.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-quantifier
+description: >
+ MV of DecimalDigits evaluates to 2 ** 53 - 1.
+ (although DecimalDigits could be arbitrary large integer)
+info: |
+ Quantifier
+
+ The production QuantifierPrefix :: { DecimalDigits } evaluates as follows:
+
+ 1. Let i be the MV of DecimalDigits (see 11.8.3).
+ 2. Return the two results i and i.
+
+ The production QuantifierPrefix :: { DecimalDigits, } evaluates as follows:
+
+ 1. Let i be the MV of DecimalDigits.
+ 2. Return the two results i and ∞.
+
+ The production QuantifierPrefix :: { DecimalDigits, DecimalDigits } evaluates as follows:
+
+ 1. Let i be the MV of the first DecimalDigits.
+ 2. Let j be the MV of the second DecimalDigits.
+ 3. Return the two results i and j.
+---*/
+
+var re1 = new RegExp("b{" + Number.MAX_SAFE_INTEGER + "}", "u");
+assert(!re1.test(""));
+
+var re2 = new RegExp("b{" + Number.MAX_SAFE_INTEGER + ",}?");
+assert(!re2.test("a"));
+
+var re3 = new RegExp("b{" + Number.MAX_SAFE_INTEGER + "," + Number.MAX_SAFE_INTEGER + "}");
+assert(!re3.test("b"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/regexp-class-chars.js b/js/src/tests/test262/built-ins/RegExp/regexp-class-chars.js
new file mode 100644
index 0000000000..b78cef9627
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/regexp-class-chars.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2019 Mike Pennisi. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: RegularExpressionClassChars may include the forward slash character
+info: |
+ 11.8.5Regular Expression Literals
+
+ RegularExpressionClass ::
+ [ RegularExpressionClassChars ]
+
+ RegularExpressionClassChars ::
+ [empty]
+ RegularExpressionClassChars RegularExpressionClassChar
+
+ RegularExpressionClassChar ::
+ RegularExpressionNonTerminator but not one of ] or \
+ RegularExpressionBackslashSequence
+
+ RegularExpressionNonTerminator ::
+ SourceCharacterbut not LineTerminator
+esid: sec-literals-regular-expression-literals
+---*/
+
+assert(/[/]/.test("/"), "Forward slash");
+assert.sameValue(/[/]/.test("x"), false, "Forward slash");
+
+assert(/[//]/.test("/"), "Forward slash - repeated");
+assert.sameValue(/[//]/.test("x"), false, "Forward slash - repeated");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/shell.js b/js/src/tests/test262/built-ins/RegExp/shell.js
new file mode 100644
index 0000000000..eda1477282
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/shell.js
@@ -0,0 +1,24 @@
+// GENERATED, DO NOT EDIT
+// file: isConstructor.js
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: |
+ Test if a given function is a constructor function.
+defines: [isConstructor]
+features: [Reflect.construct]
+---*/
+
+function isConstructor(f) {
+ if (typeof f !== "function") {
+ throw new Test262Error("isConstructor invoked with a non-function value");
+ }
+
+ try {
+ Reflect.construct(function(){}, [], f);
+ } catch (e) {
+ return false;
+ }
+ return true;
+}
diff --git a/js/src/tests/test262/built-ins/RegExp/u180e.js b/js/src/tests/test262/built-ins/RegExp/u180e.js
new file mode 100644
index 0000000000..00714b6183
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/u180e.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2017 Leonardo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-CharacterClassEscape
+description: >
+ U+180E is no longer a Unicode `Space_Separator` symbol as of Unicode v6.3.0.
+info: |
+ 21.2.2.12 CharacterClassEscape
+
+ ...
+
+ The production CharacterClassEscape::s evaluates as follows:
+
+ Return the set of characters containing the characters that are on the
+ right-hand side of the WhiteSpace or LineTerminator productions.
+
+ The production CharacterClassEscape::S evaluates as follows:
+
+ Return the set of all characters not included in the set returned by
+ CharacterClassEscape::s .
+features: [u180e]
+---*/
+
+assert.sameValue("\u180E".replace(/\s+/g, "42"), "\u180E", "\\s should not match U+180E");
+assert.sameValue("\u180E".replace(/\S+/g, "42"), "42", "\\S matches U+180E");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/browser.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/browser.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/browser.js
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-class-escape.js
new file mode 100644
index 0000000000..d8f74db909
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-class-escape.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]--\d]+$/v,
+ expression: "[[0-9]--\d]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-class.js
new file mode 100644
index 0000000000..3b209decb3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-class.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]--[0-9]]+$/v,
+ expression: "[[0-9]--[0-9]]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-property-escape.js
new file mode 100644
index 0000000000..1f11986a68
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character-property-escape.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]--\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[[0-9]--\p{ASCII_Hex_Digit}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character.js
new file mode 100644
index 0000000000..8e98a440ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-character.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]--_]+$/v,
+ expression: "[[0-9]--_]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-property-of-strings-escape.js
new file mode 100644
index 0000000000..0496408b2d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-property-of-strings-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]--\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[[0-9]--\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-string-literal.js
new file mode 100644
index 0000000000..8754cf2c37
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-difference-string-literal.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]--\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[[0-9]--\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "1",
+ "3",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-class-escape.js
new file mode 100644
index 0000000000..c3bd770190
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-class-escape.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d--\d]+$/v,
+ expression: "[\d--\d]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-class.js
new file mode 100644
index 0000000000..bdbdd0beda
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-class.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d--[0-9]]+$/v,
+ expression: "[\d--[0-9]]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-property-escape.js
new file mode 100644
index 0000000000..a3f7473261
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character-property-escape.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d--\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\d--\p{ASCII_Hex_Digit}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character.js
new file mode 100644
index 0000000000..da28fd8943
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-character.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d--_]+$/v,
+ expression: "[\d--_]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-property-of-strings-escape.js
new file mode 100644
index 0000000000..66d4e67311
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-property-of-strings-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d--\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\d--\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-string-literal.js
new file mode 100644
index 0000000000..94cd731fce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-difference-string-literal.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d--\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\d--\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "1",
+ "3",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-class-escape.js
new file mode 100644
index 0000000000..05b3e9ae32
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-class-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d&&\d]+$/v,
+ expression: "[\d&&\d]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-class.js
new file mode 100644
index 0000000000..1c3e68be29
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-class.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d&&[0-9]]+$/v,
+ expression: "[\d&&[0-9]]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-property-escape.js
new file mode 100644
index 0000000000..90bcb40be7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character-property-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d&&\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\d&&\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character.js
new file mode 100644
index 0000000000..1ceb380aa5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-character.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d&&_]+$/v,
+ expression: "[\d&&_]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-property-of-strings-escape.js
new file mode 100644
index 0000000000..9e1d9f8a52
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-property-of-strings-escape.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d&&\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\d&&\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-string-literal.js
new file mode 100644
index 0000000000..08b3b2532e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-intersection-string-literal.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d&&\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\d&&\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "2",
+ "4"
+ ],
+ nonMatchStrings: [
+ "1",
+ "3",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-class-escape.js
new file mode 100644
index 0000000000..23a4d4a8db
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-class-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d\d]+$/v,
+ expression: "[\d\d]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-class.js
new file mode 100644
index 0000000000..4a876061d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-class.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d[0-9]]+$/v,
+ expression: "[\d[0-9]]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-property-escape.js
new file mode 100644
index 0000000000..208b9e0d9c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character-property-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\d\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character.js
new file mode 100644
index 0000000000..aa1e5ab90d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-character.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d_]+$/v,
+ expression: "[\d_]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-property-of-strings-escape.js
new file mode 100644
index 0000000000..b4f2da3da0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-property-of-strings-escape.js
@@ -0,0 +1,52 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\d\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0",
+ "0\uFE0F\u20E3",
+ "1",
+ "1\uFE0F\u20E3",
+ "2",
+ "2\uFE0F\u20E3",
+ "3",
+ "3\uFE0F\u20E3",
+ "4",
+ "4\uFE0F\u20E3",
+ "5",
+ "5\uFE0F\u20E3",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8",
+ "8\uFE0F\u20E3",
+ "9",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-string-literal.js
new file mode 100644
index 0000000000..9430ef5419
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-escape-union-string-literal.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\d\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\d\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-class-escape.js
new file mode 100644
index 0000000000..1f6a807fcb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-class-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]&&\d]+$/v,
+ expression: "[[0-9]&&\d]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-class.js
new file mode 100644
index 0000000000..d0b6d95381
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-class.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]&&[0-9]]+$/v,
+ expression: "[[0-9]&&[0-9]]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-property-escape.js
new file mode 100644
index 0000000000..7ebc4c5fb5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character-property-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]&&\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[[0-9]&&\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character.js
new file mode 100644
index 0000000000..042c1e1782
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-character.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]&&_]+$/v,
+ expression: "[[0-9]&&_]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-property-of-strings-escape.js
new file mode 100644
index 0000000000..608401ff14
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-property-of-strings-escape.js
@@ -0,0 +1,41 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]&&\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[[0-9]&&\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-string-literal.js
new file mode 100644
index 0000000000..15a6d28147
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-intersection-string-literal.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]&&\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[[0-9]&&\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "2",
+ "4"
+ ],
+ nonMatchStrings: [
+ "1",
+ "3",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-class-escape.js
new file mode 100644
index 0000000000..886993514d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-class-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]\d]+$/v,
+ expression: "[[0-9]\d]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-class.js
new file mode 100644
index 0000000000..e24a1d32f8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-class.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9][0-9]]+$/v,
+ expression: "[[0-9][0-9]]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-property-escape.js
new file mode 100644
index 0000000000..6d3159b3e0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character-property-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[[0-9]\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character.js
new file mode 100644
index 0000000000..9c86c50a7c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-character.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]_]+$/v,
+ expression: "[[0-9]_]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-property-of-strings-escape.js
new file mode 100644
index 0000000000..51d7208c33
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-property-of-strings-escape.js
@@ -0,0 +1,52 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[[0-9]\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0",
+ "0\uFE0F\u20E3",
+ "1",
+ "1\uFE0F\u20E3",
+ "2",
+ "2\uFE0F\u20E3",
+ "3",
+ "3\uFE0F\u20E3",
+ "4",
+ "4\uFE0F\u20E3",
+ "5",
+ "5\uFE0F\u20E3",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8",
+ "8\uFE0F\u20E3",
+ "9",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-string-literal.js
new file mode 100644
index 0000000000..9762968ceb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-class-union-string-literal.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[[0-9]\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[[0-9]\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-class-escape.js
new file mode 100644
index 0000000000..03701e5e6e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-class-escape.js
@@ -0,0 +1,34 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_--\d]+$/v,
+ expression: "[_--\d]",
+ matchStrings: [
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-class.js
new file mode 100644
index 0000000000..be1fe8b83e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-class.js
@@ -0,0 +1,34 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_--[0-9]]+$/v,
+ expression: "[_--[0-9]]",
+ matchStrings: [
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-property-escape.js
new file mode 100644
index 0000000000..63f3f32d50
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character-property-escape.js
@@ -0,0 +1,34 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_--\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[_--\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character.js
new file mode 100644
index 0000000000..d8704742e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-character.js
@@ -0,0 +1,33 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_--_]+$/v,
+ expression: "[_--_]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "_",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-property-of-strings-escape.js
new file mode 100644
index 0000000000..1808274560
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-property-of-strings-escape.js
@@ -0,0 +1,34 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_--\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[_--\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-string-literal.js
new file mode 100644
index 0000000000..16adc0fa36
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-difference-string-literal.js
@@ -0,0 +1,34 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_--\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[_--\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-class-escape.js
new file mode 100644
index 0000000000..32db0b5bd2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-class-escape.js
@@ -0,0 +1,33 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_&&\d]+$/v,
+ expression: "[_&&\d]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "_",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-class.js
new file mode 100644
index 0000000000..4df9d43c39
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-class.js
@@ -0,0 +1,33 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_&&[0-9]]+$/v,
+ expression: "[_&&[0-9]]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "_",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-property-escape.js
new file mode 100644
index 0000000000..712352413b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character-property-escape.js
@@ -0,0 +1,33 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_&&\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[_&&\p{ASCII_Hex_Digit}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "_",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character.js
new file mode 100644
index 0000000000..8578b51194
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-character.js
@@ -0,0 +1,34 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_&&_]+$/v,
+ expression: "[_&&_]",
+ matchStrings: [
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-property-of-strings-escape.js
new file mode 100644
index 0000000000..740a5f3ac2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-property-of-strings-escape.js
@@ -0,0 +1,33 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_&&\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[_&&\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "_",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-string-literal.js
new file mode 100644
index 0000000000..7aa02b544c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-intersection-string-literal.js
@@ -0,0 +1,33 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_&&\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[_&&\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "_",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-class-escape.js
new file mode 100644
index 0000000000..dc08e40e3d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-class-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}--\d]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}--\d]",
+ matchStrings: [
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-class.js
new file mode 100644
index 0000000000..8f4210b125
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-class.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}--[0-9]]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}--[0-9]]",
+ matchStrings: [
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-property-escape.js
new file mode 100644
index 0000000000..7be89eb510
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character-property-escape.js
@@ -0,0 +1,52 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}--\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}--\p{ASCII_Hex_Digit}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character.js
new file mode 100644
index 0000000000..96ec7bb58e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-character.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}--_]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}--_]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-property-of-strings-escape.js
new file mode 100644
index 0000000000..e39e83f26e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-property-of-strings-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}--\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}--\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-string-literal.js
new file mode 100644
index 0000000000..3e666325f9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-difference-string-literal.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}--\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}--\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "1",
+ "3",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-class-escape.js
new file mode 100644
index 0000000000..478534e826
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-class-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}&&\d]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}&&\d]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-class.js
new file mode 100644
index 0000000000..9573ad7b47
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-class.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}&&[0-9]]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}&&[0-9]]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-property-escape.js
new file mode 100644
index 0000000000..4dbca1c803
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character-property-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}&&\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}&&\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character.js
new file mode 100644
index 0000000000..d6b0c11257
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-character.js
@@ -0,0 +1,52 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}&&_]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}&&_]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-property-of-strings-escape.js
new file mode 100644
index 0000000000..42e1095769
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-property-of-strings-escape.js
@@ -0,0 +1,52 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}&&\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}&&\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-string-literal.js
new file mode 100644
index 0000000000..13d31bfc37
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-intersection-string-literal.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}&&\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}&&\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "2",
+ "4"
+ ],
+ nonMatchStrings: [
+ "1",
+ "3",
+ "5",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-class-escape.js
new file mode 100644
index 0000000000..ebf6293819
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-class-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}\d]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}\d]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-class.js
new file mode 100644
index 0000000000..7d630307df
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-class.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}[0-9]]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}[0-9]]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-property-escape.js
new file mode 100644
index 0000000000..1bac43ea61
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character-property-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character.js
new file mode 100644
index 0000000000..407534100c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-character.js
@@ -0,0 +1,54 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}_]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}_]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "_",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-property-of-strings-escape.js
new file mode 100644
index 0000000000..5e4a70e916
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-property-of-strings-escape.js
@@ -0,0 +1,63 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0",
+ "0\uFE0F\u20E3",
+ "1",
+ "1\uFE0F\u20E3",
+ "2",
+ "2\uFE0F\u20E3",
+ "3",
+ "3\uFE0F\u20E3",
+ "4",
+ "4\uFE0F\u20E3",
+ "5",
+ "5\uFE0F\u20E3",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8",
+ "8\uFE0F\u20E3",
+ "9",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-string-literal.js
new file mode 100644
index 0000000000..caa9f15f29
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-property-escape-union-string-literal.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{ASCII_Hex_Digit}\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\p{ASCII_Hex_Digit}\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-class-escape.js
new file mode 100644
index 0000000000..11961d19fb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-class-escape.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_\d]+$/v,
+ expression: "[_\d]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-class.js
new file mode 100644
index 0000000000..2207df07a0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-class.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_[0-9]]+$/v,
+ expression: "[_[0-9]]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-property-escape.js
new file mode 100644
index 0000000000..ac27fe22c5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character-property-escape.js
@@ -0,0 +1,54 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[_\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "_",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character.js
new file mode 100644
index 0000000000..d30bb97c4c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-character.js
@@ -0,0 +1,34 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[__]+$/v,
+ expression: "[__]",
+ matchStrings: [
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-property-of-strings-escape.js
new file mode 100644
index 0000000000..15294ce814
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-property-of-strings-escape.js
@@ -0,0 +1,44 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[_\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "_"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-string-literal.js
new file mode 100644
index 0000000000..8de1295fdd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/character-union-string-literal.js
@@ -0,0 +1,37 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[_\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[_\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "2",
+ "4",
+ "9\uFE0F\u20E3",
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-class-escape.js
new file mode 100644
index 0000000000..de856512f5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-class-escape.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}--\d]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}--\d]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-class.js
new file mode 100644
index 0000000000..83a3877a9e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-class.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}--[0-9]]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}--[0-9]]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-property-escape.js
new file mode 100644
index 0000000000..935e52fab7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character-property-escape.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}--\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}--\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character.js
new file mode 100644
index 0000000000..6a2b3dbf22
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-character.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}--_]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}--_]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-property-of-strings-escape.js
new file mode 100644
index 0000000000..2e0d4ba7bd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-property-of-strings-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}--\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}--\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-string-literal.js
new file mode 100644
index 0000000000..da68c78049
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-difference-string-literal.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}--\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}--\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-class-escape.js
new file mode 100644
index 0000000000..29e6302fbb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-class-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}&&\d]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}&&\d]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-class.js
new file mode 100644
index 0000000000..da1469c0c1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-class.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}&&[0-9]]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}&&[0-9]]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-property-escape.js
new file mode 100644
index 0000000000..0fa89e14aa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character-property-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}&&\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}&&\p{ASCII_Hex_Digit}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character.js
new file mode 100644
index 0000000000..815ba85039
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-character.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}&&_]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}&&_]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-property-of-strings-escape.js
new file mode 100644
index 0000000000..c5d769cb7c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-property-of-strings-escape.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}&&\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}&&\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-string-literal.js
new file mode 100644
index 0000000000..abbf43bb71
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-intersection-string-literal.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}&&\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}&&\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-class-escape.js
new file mode 100644
index 0000000000..551a1469d4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-class-escape.js
@@ -0,0 +1,52 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}\d]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}\d]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0",
+ "0\uFE0F\u20E3",
+ "1",
+ "1\uFE0F\u20E3",
+ "2",
+ "2\uFE0F\u20E3",
+ "3",
+ "3\uFE0F\u20E3",
+ "4",
+ "4\uFE0F\u20E3",
+ "5",
+ "5\uFE0F\u20E3",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8",
+ "8\uFE0F\u20E3",
+ "9",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-class.js
new file mode 100644
index 0000000000..754d0cf66d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-class.js
@@ -0,0 +1,52 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}[0-9]]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}[0-9]]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0",
+ "0\uFE0F\u20E3",
+ "1",
+ "1\uFE0F\u20E3",
+ "2",
+ "2\uFE0F\u20E3",
+ "3",
+ "3\uFE0F\u20E3",
+ "4",
+ "4\uFE0F\u20E3",
+ "5",
+ "5\uFE0F\u20E3",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8",
+ "8\uFE0F\u20E3",
+ "9",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-property-escape.js
new file mode 100644
index 0000000000..f09ac6c225
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character-property-escape.js
@@ -0,0 +1,63 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0",
+ "0\uFE0F\u20E3",
+ "1",
+ "1\uFE0F\u20E3",
+ "2",
+ "2\uFE0F\u20E3",
+ "3",
+ "3\uFE0F\u20E3",
+ "4",
+ "4\uFE0F\u20E3",
+ "5",
+ "5\uFE0F\u20E3",
+ "6",
+ "6\uFE0F\u20E3",
+ "7",
+ "7\uFE0F\u20E3",
+ "8",
+ "8\uFE0F\u20E3",
+ "9",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character.js
new file mode 100644
index 0000000000..15311dc344
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-character.js
@@ -0,0 +1,44 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}_]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}_]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3",
+ "_"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-property-of-strings-escape.js
new file mode 100644
index 0000000000..52b4863f36
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-property-of-strings-escape.js
@@ -0,0 +1,43 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-string-literal.js
new file mode 100644
index 0000000000..bcdaebb4e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/property-of-strings-escape-union-string-literal.js
@@ -0,0 +1,46 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\p{Emoji_Keycap_Sequence}\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\p{Emoji_Keycap_Sequence}\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-13.1.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-13.1.js
new file mode 100644
index 0000000000..f7eeb369e4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-13.1.js
@@ -0,0 +1,240 @@
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Test that Unicode property escapes for `RGI_Emoji` (property of strings)
+ match Emoji 13.1 strings.
+info: |
+ Generated by https://github.com/mathiasbynens/caniunicode
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testPropertyOfStrings({
+ regExp: /^\p{RGI_Emoji}+$/v,
+ expression: "\\p{RGI_Emoji}",
+ matchStrings: [
+ "\u2764\uFE0F\u200D\u{1F525}",
+ "\u2764\uFE0F\u200D\u{1FA79}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F468}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}\u{1F3FF}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FB}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FC}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FD}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FE}",
+ "\u{1F469}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}\u{1F3FF}",
+ "\u{1F48F}\u{1F3FB}",
+ "\u{1F48F}\u{1F3FC}",
+ "\u{1F48F}\u{1F3FD}",
+ "\u{1F48F}\u{1F3FE}",
+ "\u{1F48F}\u{1F3FF}",
+ "\u{1F491}\u{1F3FB}",
+ "\u{1F491}\u{1F3FC}",
+ "\u{1F491}\u{1F3FD}",
+ "\u{1F491}\u{1F3FE}",
+ "\u{1F491}\u{1F3FF}",
+ "\u{1F62E}\u200D\u{1F4A8}",
+ "\u{1F635}\u200D\u{1F4AB}",
+ "\u{1F636}\u200D\u{1F32B}\uFE0F",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FF}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FB}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FC}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FD}",
+ "\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D\u{1F9D1}\u{1F3FE}",
+ "\u{1F9D4}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FB}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FB}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FC}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FC}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FD}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FD}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FE}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FE}\u200D\u2642\uFE0F",
+ "\u{1F9D4}\u{1F3FF}\u200D\u2640\uFE0F",
+ "\u{1F9D4}\u{1F3FF}\u200D\u2642\uFE0F"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-14.0.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-14.0.js
new file mode 100644
index 0000000000..066dbd9a94
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-14.0.js
@@ -0,0 +1,135 @@
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Test that Unicode property escapes for `RGI_Emoji` (property of strings)
+ match Emoji 14.0 strings.
+info: |
+ Generated by https://github.com/mathiasbynens/caniunicode
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testPropertyOfStrings({
+ regExp: /^\p{RGI_Emoji}+$/v,
+ expression: "\\p{RGI_Emoji}",
+ matchStrings: [
+ "\u{1F6DD}",
+ "\u{1F6DE}",
+ "\u{1F6DF}",
+ "\u{1F7F0}",
+ "\u{1F91D}\u{1F3FB}",
+ "\u{1F91D}\u{1F3FC}",
+ "\u{1F91D}\u{1F3FD}",
+ "\u{1F91D}\u{1F3FE}",
+ "\u{1F91D}\u{1F3FF}",
+ "\u{1F979}",
+ "\u{1F9CC}",
+ "\u{1FA7B}",
+ "\u{1FA7C}",
+ "\u{1FAA9}",
+ "\u{1FAAA}",
+ "\u{1FAAB}",
+ "\u{1FAAC}",
+ "\u{1FAB7}",
+ "\u{1FAB8}",
+ "\u{1FAB9}",
+ "\u{1FABA}",
+ "\u{1FAC3}",
+ "\u{1FAC3}\u{1F3FB}",
+ "\u{1FAC3}\u{1F3FC}",
+ "\u{1FAC3}\u{1F3FD}",
+ "\u{1FAC3}\u{1F3FE}",
+ "\u{1FAC3}\u{1F3FF}",
+ "\u{1FAC4}",
+ "\u{1FAC4}\u{1F3FB}",
+ "\u{1FAC4}\u{1F3FC}",
+ "\u{1FAC4}\u{1F3FD}",
+ "\u{1FAC4}\u{1F3FE}",
+ "\u{1FAC4}\u{1F3FF}",
+ "\u{1FAC5}",
+ "\u{1FAC5}\u{1F3FB}",
+ "\u{1FAC5}\u{1F3FC}",
+ "\u{1FAC5}\u{1F3FD}",
+ "\u{1FAC5}\u{1F3FE}",
+ "\u{1FAC5}\u{1F3FF}",
+ "\u{1FAD7}",
+ "\u{1FAD8}",
+ "\u{1FAD9}",
+ "\u{1FAE0}",
+ "\u{1FAE1}",
+ "\u{1FAE2}",
+ "\u{1FAE3}",
+ "\u{1FAE4}",
+ "\u{1FAE5}",
+ "\u{1FAE6}",
+ "\u{1FAE7}",
+ "\u{1FAF0}",
+ "\u{1FAF0}\u{1F3FB}",
+ "\u{1FAF0}\u{1F3FC}",
+ "\u{1FAF0}\u{1F3FD}",
+ "\u{1FAF0}\u{1F3FE}",
+ "\u{1FAF0}\u{1F3FF}",
+ "\u{1FAF1}",
+ "\u{1FAF1}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FB}\u200D\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FB}\u200D\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FB}\u200D\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF1}\u{1F3FB}\u200D\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FC}\u200D\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FC}\u200D\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FC}\u200D\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF1}\u{1F3FC}\u200D\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FD}\u200D\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FD}\u200D\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FD}\u200D\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF1}\u{1F3FD}\u200D\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FE}",
+ "\u{1FAF1}\u{1F3FE}\u200D\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FE}\u200D\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FE}\u200D\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FE}\u200D\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FF}",
+ "\u{1FAF1}\u{1F3FF}\u200D\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF1}\u{1F3FF}\u200D\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF1}\u{1F3FF}\u200D\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF1}\u{1F3FF}\u200D\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF2}",
+ "\u{1FAF2}\u{1F3FB}",
+ "\u{1FAF2}\u{1F3FC}",
+ "\u{1FAF2}\u{1F3FD}",
+ "\u{1FAF2}\u{1F3FE}",
+ "\u{1FAF2}\u{1F3FF}",
+ "\u{1FAF3}",
+ "\u{1FAF3}\u{1F3FB}",
+ "\u{1FAF3}\u{1F3FC}",
+ "\u{1FAF3}\u{1F3FD}",
+ "\u{1FAF3}\u{1F3FE}",
+ "\u{1FAF3}\u{1F3FF}",
+ "\u{1FAF4}",
+ "\u{1FAF4}\u{1F3FB}",
+ "\u{1FAF4}\u{1F3FC}",
+ "\u{1FAF4}\u{1F3FD}",
+ "\u{1FAF4}\u{1F3FE}",
+ "\u{1FAF4}\u{1F3FF}",
+ "\u{1FAF5}",
+ "\u{1FAF5}\u{1F3FB}",
+ "\u{1FAF5}\u{1F3FC}",
+ "\u{1FAF5}\u{1F3FD}",
+ "\u{1FAF5}\u{1F3FE}",
+ "\u{1FAF5}\u{1F3FF}",
+ "\u{1FAF6}",
+ "\u{1FAF6}\u{1F3FB}",
+ "\u{1FAF6}\u{1F3FC}",
+ "\u{1FAF6}\u{1F3FD}",
+ "\u{1FAF6}\u{1F3FE}",
+ "\u{1FAF6}\u{1F3FF}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-15.0.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-15.0.js
new file mode 100644
index 0000000000..03c58e25c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-15.0.js
@@ -0,0 +1,54 @@
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Test that Unicode property escapes for `RGI_Emoji` (property of strings)
+ match Emoji 15.0 strings.
+info: |
+ Generated by https://github.com/mathiasbynens/caniunicode
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testPropertyOfStrings({
+ regExp: /^\p{RGI_Emoji}+$/v,
+ expression: "\\p{RGI_Emoji}",
+ matchStrings: [
+ "\u{1F426}\u200D\u2B1B",
+ "\u{1F6DC}",
+ "\u{1FA75}",
+ "\u{1FA76}",
+ "\u{1FA77}",
+ "\u{1FA87}",
+ "\u{1FA88}",
+ "\u{1FAAD}",
+ "\u{1FAAE}",
+ "\u{1FAAF}",
+ "\u{1FABB}",
+ "\u{1FABC}",
+ "\u{1FABD}",
+ "\u{1FABF}",
+ "\u{1FACE}",
+ "\u{1FACF}",
+ "\u{1FADA}",
+ "\u{1FADB}",
+ "\u{1FAE8}",
+ "\u{1FAF7}",
+ "\u{1FAF7}\u{1F3FB}",
+ "\u{1FAF7}\u{1F3FC}",
+ "\u{1FAF7}\u{1F3FD}",
+ "\u{1FAF7}\u{1F3FE}",
+ "\u{1FAF7}\u{1F3FF}",
+ "\u{1FAF8}",
+ "\u{1FAF8}\u{1F3FB}",
+ "\u{1FAF8}\u{1F3FC}",
+ "\u{1FAF8}\u{1F3FD}",
+ "\u{1FAF8}\u{1F3FE}",
+ "\u{1FAF8}\u{1F3FF}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-15.1.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-15.1.js
new file mode 100644
index 0000000000..c2ef032918
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/rgi-emoji-15.1.js
@@ -0,0 +1,141 @@
+// Copyright 2023 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Test that Unicode property escapes for `RGI_Emoji` (property of strings)
+ match Emoji 15.1 strings.
+info: |
+ Generated by https://github.com/mathiasbynens/caniunicode
+esid: sec-static-semantics-unicodematchproperty-p
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testPropertyOfStrings({
+ regExp: /^\p{RGI_Emoji}+$/v,
+ expression: "\\p{RGI_Emoji}",
+ matchStrings: [
+ "\u26D3\uFE0F\u200D\u{1F4A5}",
+ "\u{1F344}\u200D\u{1F7EB}",
+ "\u{1F34B}\u200D\u{1F7E9}",
+ "\u{1F3C3}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FB}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FB}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FB}\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FC}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FC}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FC}\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FD}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FD}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FD}\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FE}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FE}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FE}\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FF}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FF}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F3C3}\u{1F3FF}\u200D\u27A1\uFE0F",
+ "\u{1F426}\u200D\u{1F525}",
+ "\u{1F468}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FB}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FC}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FD}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FE}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F468}\u{1F3FF}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FB}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FC}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FD}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FE}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F469}\u{1F3FF}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F642}\u200D\u2194\uFE0F",
+ "\u{1F642}\u200D\u2195\uFE0F",
+ "\u{1F6B6}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FB}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FB}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FB}\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FC}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FC}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FC}\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FD}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FD}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FD}\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FE}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FE}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FE}\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FF}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FF}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F6B6}\u{1F3FF}\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FB}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FB}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FB}\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FC}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FC}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FC}\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FD}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FD}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FD}\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FE}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FE}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FE}\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FF}\u200D\u2640\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FF}\u200D\u2642\uFE0F\u200D\u27A1\uFE0F",
+ "\u{1F9CE}\u{1F3FF}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u200D\u{1F9D1}\u200D\u{1F9D2}",
+ "\u{1F9D1}\u200D\u{1F9D1}\u200D\u{1F9D2}\u200D\u{1F9D2}",
+ "\u{1F9D1}\u200D\u{1F9D2}",
+ "\u{1F9D1}\u200D\u{1F9D2}\u200D\u{1F9D2}",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FB}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FC}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FD}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FE}\u200D\u{1F9BD}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9AF}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9BC}\u200D\u27A1\uFE0F",
+ "\u{1F9D1}\u{1F3FF}\u200D\u{1F9BD}\u200D\u27A1\uFE0F"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/shell.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/shell.js
new file mode 100644
index 0000000000..591d3924c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/shell.js
@@ -0,0 +1,115 @@
+// GENERATED, DO NOT EDIT
+// file: regExpUtils.js
+// Copyright (C) 2017 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+ Collection of functions used to assert the correctness of RegExp objects.
+defines: [buildString, testPropertyEscapes, testPropertyOfStrings, testExtendedCharacterClass, matchValidator]
+---*/
+
+function buildString(args) {
+ // Use member expressions rather than destructuring `args` for improved
+ // compatibility with engines that only implement assignment patterns
+ // partially or not at all.
+ const loneCodePoints = args.loneCodePoints;
+ const ranges = args.ranges;
+ const CHUNK_SIZE = 10000;
+ let result = Reflect.apply(String.fromCodePoint, null, loneCodePoints);
+ for (let i = 0; i < ranges.length; i++) {
+ const range = ranges[i];
+ const start = range[0];
+ const end = range[1];
+ const codePoints = [];
+ for (let length = 0, codePoint = start; codePoint <= end; codePoint++) {
+ codePoints[length++] = codePoint;
+ if (length === CHUNK_SIZE) {
+ result += Reflect.apply(String.fromCodePoint, null, codePoints);
+ codePoints.length = length = 0;
+ }
+ }
+ result += Reflect.apply(String.fromCodePoint, null, codePoints);
+ }
+ return result;
+}
+
+function printCodePoint(codePoint) {
+ const hex = codePoint
+ .toString(16)
+ .toUpperCase()
+ .padStart(6, "0");
+ return `U+${hex}`;
+}
+
+function printStringCodePoints(string) {
+ const buf = [];
+ for (const symbol of string) {
+ const formatted = printCodePoint(symbol.codePointAt(0));
+ buf.push(formatted);
+ }
+ return buf.join(' ');
+}
+
+function testPropertyEscapes(regExp, string, expression) {
+ if (!regExp.test(string)) {
+ for (const symbol of string) {
+ const formatted = printCodePoint(symbol.codePointAt(0));
+ assert(
+ regExp.test(symbol),
+ `\`${ expression }\` should match ${ formatted } (\`${ symbol }\`)`
+ );
+ }
+ }
+}
+
+function testPropertyOfStrings(args) {
+ // Use member expressions rather than destructuring `args` for improved
+ // compatibility with engines that only implement assignment patterns
+ // partially or not at all.
+ const regExp = args.regExp;
+ const expression = args.expression;
+ const matchStrings = args.matchStrings;
+ const nonMatchStrings = args.nonMatchStrings;
+ const allStrings = matchStrings.join('');
+ if (!regExp.test(allStrings)) {
+ for (const string of matchStrings) {
+ assert(
+ regExp.test(string),
+ `\`${ expression }\` should match ${ string } (${ printStringCodePoints(string) })`
+ );
+ }
+ }
+
+ if (!nonMatchStrings) return;
+
+ const allNonMatchStrings = nonMatchStrings.join('');
+ if (regExp.test(allNonMatchStrings)) {
+ for (const string of nonMatchStrings) {
+ assert(
+ !regExp.test(string),
+ `\`${ expression }\` should not match ${ string } (${ printStringCodePoints(string) })`
+ );
+ }
+ }
+}
+
+// The exact same logic can be used to test extended character classes
+// as enabled through the RegExp `v` flag. This is useful to test not
+// just standalone properties of strings, but also string literals, and
+// set operations.
+const testExtendedCharacterClass = testPropertyOfStrings;
+
+// Returns a function that validates a RegExp match result.
+//
+// Example:
+//
+// var validate = matchValidator(['b'], 1, 'abc');
+// validate(/b/.exec('abc'));
+//
+function matchValidator(expectedEntries, expectedIndex, expectedInput) {
+ return function(match) {
+ assert.compareArray(match, expectedEntries, 'Match entries');
+ assert.sameValue(match.index, expectedIndex, 'Match index');
+ assert.sameValue(match.input, expectedInput, 'Match input');
+ }
+}
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-class-escape.js
new file mode 100644
index 0000000000..02cf2f9e5b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-class-escape.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}--\d]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}--\d]",
+ matchStrings: [
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-class.js
new file mode 100644
index 0000000000..96c4b87b38
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-class.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}--[0-9]]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}--[0-9]]",
+ matchStrings: [
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-property-escape.js
new file mode 100644
index 0000000000..1d337d37a7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character-property-escape.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}--\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}--\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character.js
new file mode 100644
index 0000000000..3e27211dc3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-character.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}--_]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}--_]",
+ matchStrings: [
+ "0",
+ "2",
+ "4",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-property-of-strings-escape.js
new file mode 100644
index 0000000000..5ac2d64bc0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-property-of-strings-escape.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}--\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}--\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "0",
+ "2",
+ "4"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-string-literal.js
new file mode 100644
index 0000000000..ee83c8c1b0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-difference-string-literal.js
@@ -0,0 +1,35 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}--\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}--\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-class-escape.js
new file mode 100644
index 0000000000..8b27faeb1e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-class-escape.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}&&\d]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}&&\d]",
+ matchStrings: [
+ "0",
+ "2",
+ "4"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-class.js
new file mode 100644
index 0000000000..82dd8971f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-class.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}&&[0-9]]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}&&[0-9]]",
+ matchStrings: [
+ "0",
+ "2",
+ "4"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-property-escape.js
new file mode 100644
index 0000000000..91eb444cc6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character-property-escape.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}&&\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}&&\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "2",
+ "4"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character.js
new file mode 100644
index 0000000000..87f8a8c182
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-character.js
@@ -0,0 +1,35 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}&&_]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}&&_]",
+ matchStrings: [],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "7",
+ "9\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-property-of-strings-escape.js
new file mode 100644
index 0000000000..fe4f943999
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-property-of-strings-escape.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}&&\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}&&\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "0",
+ "2",
+ "4",
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-string-literal.js
new file mode 100644
index 0000000000..f6314e94e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-intersection-string-literal.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}&&\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}&&\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "2",
+ "4",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-class-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-class-escape.js
new file mode 100644
index 0000000000..5bbf70287c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-class-escape.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}\d]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}\d]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-class.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-class.js
new file mode 100644
index 0000000000..28d3a42c68
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-class.js
@@ -0,0 +1,42 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}[0-9]]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}[0-9]]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-property-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-property-escape.js
new file mode 100644
index 0000000000..707dd8047a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character-property-escape.js
@@ -0,0 +1,53 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}\p{ASCII_Hex_Digit}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}\p{ASCII_Hex_Digit}]",
+ matchStrings: [
+ "0",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "9\uFE0F\u20E3",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character.js
new file mode 100644
index 0000000000..ddd9eeb7a6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-character.js
@@ -0,0 +1,37 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}_]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}_]",
+ matchStrings: [
+ "0",
+ "2",
+ "4",
+ "9\uFE0F\u20E3",
+ "_"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-property-of-strings-escape.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-property-of-strings-escape.js
new file mode 100644
index 0000000000..3596853330
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-property-of-strings-escape.js
@@ -0,0 +1,46 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-unicode-property-escapes, regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}\p{Emoji_Keycap_Sequence}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}\p{Emoji_Keycap_Sequence}]",
+ matchStrings: [
+ "#\uFE0F\u20E3",
+ "*\uFE0F\u20E3",
+ "0",
+ "0\uFE0F\u20E3",
+ "1\uFE0F\u20E3",
+ "2",
+ "2\uFE0F\u20E3",
+ "3\uFE0F\u20E3",
+ "4",
+ "4\uFE0F\u20E3",
+ "5\uFE0F\u20E3",
+ "6\uFE0F\u20E3",
+ "7\uFE0F\u20E3",
+ "8\uFE0F\u20E3",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-string-literal.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-string-literal.js
new file mode 100644
index 0000000000..8780335787
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/generated/string-literal-union-string-literal.js
@@ -0,0 +1,36 @@
+// Copyright 2022 Mathias Bynens. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+author: Mathias Bynens
+description: >
+ Extended character classes enabled by the RegExp `v` flag support
+ properties of strings, string literals, and set operations
+info: |
+ Generated by https://github.com/mathiasbynens/unicode-property-escapes-tests
+ Unicode v14.0.0
+esid: sec-patterns
+features: [regexp-v-flag]
+includes: [regExpUtils.js]
+---*/
+
+testExtendedCharacterClass({
+ regExp: /^[\q{0|2|4|9\uFE0F\u20E3}\q{0|2|4|9\uFE0F\u20E3}]+$/v,
+ expression: "[\q{0|2|4|9\uFE0F\u20E3}\q{0|2|4|9\uFE0F\u20E3}]",
+ matchStrings: [
+ "0",
+ "2",
+ "4",
+ "9\uFE0F\u20E3"
+ ],
+ nonMatchStrings: [
+ "6\uFE0F\u20E3",
+ "7",
+ "C",
+ "\u2603",
+ "\u{1D306}",
+ "\u{1F1E7}\u{1F1EA}"
+ ],
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicodeSets/shell.js b/js/src/tests/test262/built-ins/RegExp/unicodeSets/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicodeSets/shell.js
diff --git a/js/src/tests/test262/built-ins/RegExp/unicode_character_class_backspace_escape.js b/js/src/tests/test262/built-ins/RegExp/unicode_character_class_backspace_escape.js
new file mode 100644
index 0000000000..aefd40fcb3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicode_character_class_backspace_escape.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: prod-ClassEscapes
+description: >
+ \b escape inside CharacterClass is valid in Unicode patterns (unlike \B).
+info: |
+ ClassEscape[U] ::
+ b
+
+ Static Semantics: CharacterValue
+
+ ClassEscape :: b
+
+ 1. Return the code point value of U+0008 (BACKSPACE).
+---*/
+
+assert(/[\b]/u.test('\u0008'));
+assert(/[\b-A]/u.test('A'));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicode_full_case_folding.js b/js/src/tests/test262/built-ins/RegExp/unicode_full_case_folding.js
new file mode 100644
index 0000000000..48900a67f0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicode_full_case_folding.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2022 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-runtime-semantics-canonicalize-ch
+description: >
+ Case-insensitive Unicode RegExps should not apply full case folding mappings
+info: |
+ Canonicalize ( _rer_, _ch_ )
+ 1. If _rer_.[[Unicode]] is *true* and _rer_.[[IgnoreCase]] is *true*, then
+ a. If the file `CaseFolding.txt` of the Unicode Character Database provides
+ a simple or common case folding mapping for _ch_, return the result of
+ applying that mapping to _ch_.
+ b. Return _ch_.
+
+ See https://unicode.org/Public/UCD/latest/ucd/CaseFolding.txt for the case
+ folding mappings.
+---*/
+
+assert(/[\u0390]/ui.test("\u1fd3"), "\\u0390 does not match \\u1fd3");
+assert(/[\u1fd3]/ui.test("\u0390"), "\\u1fd3 does not match \\u0390");
+assert(/[\u03b0]/ui.test("\u1fe3"), "\\u03b0 does not match \\u1fe3");
+assert(/[\u1fe3]/ui.test("\u03b0"), "\\u1fe3 does not match \\u03b0");
+assert(/[\ufb05]/ui.test("\ufb06"), "\\ufb05 does not match \\ufb06");
+assert(/[\ufb06]/ui.test("\ufb05"), "\\ufb06 does not match \\ufb05");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicode_identity_escape.js b/js/src/tests/test262/built-ins/RegExp/unicode_identity_escape.js
new file mode 100644
index 0000000000..1c5b47ad5e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicode_identity_escape.js
@@ -0,0 +1,55 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: IdentityEscape for Unicode RegExp
+info: |
+ IdentityEscape for Unicode RegExps is restricted to SyntaxCharacter and U+002F (SOLIDUS)
+es6id: 21.1.2
+---*/
+
+// 21.2.1 Patterns
+//
+// IdentityEscape[U] ::
+// [+U] SyntaxCharacter
+// [+U] /
+//
+// SyntaxCharacter :: one of
+// ^ $ \ . * + ? ( ) [ ] { } |
+
+// IdentityEscape in AtomEscape
+assert(/\^/u.test("^"), "IdentityEscape in AtomEscape: /\\^/");
+assert(/\$/u.test("$"), "IdentityEscape in AtomEscape: /\\$/");
+assert(/\\/u.test("\\"), "IdentityEscape in AtomEscape: /\\\\/");
+assert(/\./u.test("."), "IdentityEscape in AtomEscape: /\\./");
+assert(/\*/u.test("*"), "IdentityEscape in AtomEscape: /\\*/");
+assert(/\+/u.test("+"), "IdentityEscape in AtomEscape: /\\+/");
+assert(/\?/u.test("?"), "IdentityEscape in AtomEscape: /\\?/");
+assert(/\(/u.test("("), "IdentityEscape in AtomEscape: /\\(/");
+assert(/\)/u.test(")"), "IdentityEscape in AtomEscape: /\\)/");
+assert(/\[/u.test("["), "IdentityEscape in AtomEscape: /\\[/");
+assert(/\]/u.test("]"), "IdentityEscape in AtomEscape: /\\]/");
+assert(/\{/u.test("{"), "IdentityEscape in AtomEscape: /\\{/");
+assert(/\}/u.test("}"), "IdentityEscape in AtomEscape: /\\}/");
+assert(/\|/u.test("|"), "IdentityEscape in AtomEscape: /\\|/");
+assert(/\//u.test("/"), "IdentityEscape in AtomEscape: /\\//");
+
+
+// IdentityEscape in ClassEscape
+assert(/[\^]/u.test("^"), "IdentityEscape in ClassEscape: /[\\^]/");
+assert(/[\$]/u.test("$"), "IdentityEscape in ClassEscape: /[\\$]/");
+assert(/[\\]/u.test("\\"), "IdentityEscape in ClassEscape: /[\\\\]/");
+assert(/[\.]/u.test("."), "IdentityEscape in ClassEscape: /[\\.]/");
+assert(/[\*]/u.test("*"), "IdentityEscape in ClassEscape: /[\\*]/");
+assert(/[\+]/u.test("+"), "IdentityEscape in ClassEscape: /[\\+]/");
+assert(/[\?]/u.test("?"), "IdentityEscape in ClassEscape: /[\\?]/");
+assert(/[\(]/u.test("("), "IdentityEscape in ClassEscape: /[\\(]/");
+assert(/[\)]/u.test(")"), "IdentityEscape in ClassEscape: /[\\)]/");
+assert(/[\[]/u.test("["), "IdentityEscape in ClassEscape: /[\\[]/");
+assert(/[\]]/u.test("]"), "IdentityEscape in ClassEscape: /[\\]]/");
+assert(/[\{]/u.test("{"), "IdentityEscape in ClassEscape: /[\\{]/");
+assert(/[\}]/u.test("}"), "IdentityEscape in ClassEscape: /[\\}]/");
+assert(/[\|]/u.test("|"), "IdentityEscape in ClassEscape: /[\\|]/");
+assert(/[\/]/u.test("/"), "IdentityEscape in ClassEscape: /[\\/]/");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicode_restricted_brackets.js b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_brackets.js
new file mode 100644
index 0000000000..da3c2f3f38
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_brackets.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: B.1.4 is not applied for Unicode RegExp - Standalone brackets
+info: |
+ The compatibility extensions defined in B.1.4 Regular Expressions Patterns
+ are not applied for Unicode RegExp.
+ Tested extension: "Atom[U] :: PatternCharacter"
+es6id: 21.1.2
+---*/
+
+// Single parentheses and brackets.
+assert.throws(SyntaxError, function() {
+ RegExp("(", "u");
+}, 'RegExp("(", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp(")", "u");
+}, 'RegExp(")", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[", "u");
+}, 'RegExp("[", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("]", "u");
+}, 'RegExp("]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("{", "u");
+}, 'RegExp("{", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("}", "u");
+}, 'RegExp("}", "u"): ');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicode_restricted_character_class_escape.js b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_character_class_escape.js
new file mode 100644
index 0000000000..971eb169c6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_character_class_escape.js
@@ -0,0 +1,75 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: B.1.4 is not applied for Unicode RegExp - ClassEscape in range expression
+info: |
+ The compatibility extensions defined in B.1.4 Regular Expressions Patterns
+ are not applied for Unicode RegExp.
+ Tested extension: "ClassAtomNoDashInRange :: \ ClassEscape but only if ClassEscape evaluates to a CharSet with exactly one character"
+es6id: 21.2.2.15.1
+---*/
+
+// Leading CharacterClassEscape.
+assert.throws(SyntaxError, function() {
+ RegExp("[\\d-a]", "u");
+}, 'RegExp("[\\d-a]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\D-a]", "u");
+}, 'RegExp("[\\D-a]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\s-a]", "u");
+}, 'RegExp("[\\s-a]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\S-a]", "u");
+}, 'RegExp("[\\S-a]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\w-a]", "u");
+}, 'RegExp("[\\w-a]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\W-a]", "u");
+}, 'RegExp("[\\W-a]", "u"): ');
+
+
+// Trailing CharacterClassEscape.
+assert.throws(SyntaxError, function() {
+ RegExp("[a-\\d]", "u");
+}, 'RegExp("[a-\\d]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[a-\\D]", "u");
+}, 'RegExp("[a-\\D]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[a-\\s]", "u");
+}, 'RegExp("[a-\\s]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[a-\\S]", "u");
+}, 'RegExp("[a-\\S]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[a-\\w]", "u");
+}, 'RegExp("[a-\\w]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[a-\\W]", "u");
+}, 'RegExp("[a-\\W]", "u"): ');
+
+
+// Leading and trailing CharacterClassEscape.
+assert.throws(SyntaxError, function() {
+ RegExp("[\\d-\\d]", "u");
+}, 'RegExp("[\\d-\\d]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\D-\\D]", "u");
+}, 'RegExp("[\\D-\\D]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\s-\\s]", "u");
+}, 'RegExp("[\\s-\\s]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\S-\\S]", "u");
+}, 'RegExp("[\\S-\\S]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\w-\\w]", "u");
+}, 'RegExp("[\\w-\\w]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\W-\\W]", "u");
+}, 'RegExp("[\\W-\\W]", "u"): ');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape.js b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape.js
new file mode 100644
index 0000000000..3b71e992b6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape.js
@@ -0,0 +1,67 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: B.1.4 is not applied for Unicode RegExp - Identity escape with basic latin characters
+info: |
+ The compatibility extensions defined in B.1.4 Regular Expressions Patterns
+ are not applied for Unicode RegExps.
+ Tested extension: "IdentityEscape[U] :: [~U] SourceCharacter but not c"
+es6id: 21.1.2
+---*/
+
+function isSyntaxCharacter(c) {
+ switch (c) {
+ case "^":
+ case "$":
+ case "\\":
+ case ".":
+ case "*":
+ case "+":
+ case "?":
+ case "(":
+ case ")":
+ case "[":
+ case "]":
+ case "{":
+ case "}":
+ case "|":
+ return true;
+ default:
+ return false;
+ }
+}
+
+function isAlphaDigit(c) {
+ return ("0" <= c && c <= "9") || ("A" <= c && c <= "Z") || ("a" <= c && c <= "z");
+}
+
+
+// IdentityEscape in AtomEscape.
+//
+// AtomEscape[U] :: CharacterEscape[?U]
+// CharacterEscape[U] :: IdentityEscape[?U]
+for (var cu = 0x00; cu <= 0x7f; ++cu) {
+ var s = String.fromCharCode(cu);
+ if (!isAlphaDigit(s) && !isSyntaxCharacter(s) && s !== "/") {
+ assert.throws(SyntaxError, function() {
+ RegExp("\\" + s, "u");
+ }, "Invalid IdentityEscape in AtomEscape: '\\" + s + "'");
+ }
+}
+
+
+// IdentityEscape in ClassEscape.
+//
+// ClassEscape[U] :: CharacterEscape[?U]
+// CharacterEscape[U] :: IdentityEscape[?U]
+for (var cu = 0x00; cu <= 0x7f; ++cu) {
+ var s = String.fromCharCode(cu);
+ if (!isAlphaDigit(s) && !isSyntaxCharacter(s) && s !== "/" && s !== "-") {
+ assert.throws(SyntaxError, function() {
+ RegExp("[\\" + s + "]", "u");
+ }, "Invalid IdentityEscape in ClassEscape: '\\" + s + "'");
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape_alpha.js b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape_alpha.js
new file mode 100644
index 0000000000..b226c0a545
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape_alpha.js
@@ -0,0 +1,102 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: B.1.4 is not applied for Unicode RegExp - Identity escape with basic latin letters
+info: |
+ The compatibility extensions defined in B.1.4 Regular Expressions Patterns
+ are not applied for Unicode RegExps.
+ Tested extension: "IdentityEscape[U] :: [~U] SourceCharacter but not c"
+
+ Forbidden extension (16.1):
+ The RegExp pattern grammars in 21.2.1 and B.1.4 must not be extended to recognize any of the
+ source characters A-Z or a-z as IdentityEscape[U] when the U grammar parameter is present.
+es6id: 21.1.2
+---*/
+
+function isValidAlphaEscapeInAtom(s) {
+ switch (s) {
+ // Assertion [U] :: \b
+ case "b":
+ // Assertion [U] :: \B
+ case "B":
+ // ControlEscape :: one of f n r t v
+ case "f":
+ case "n":
+ case "r":
+ case "t":
+ case "v":
+ // CharacterClassEscape :: one of d D s S w W
+ case "d":
+ case "D":
+ case "s":
+ case "S":
+ case "w":
+ case "W":
+ return true;
+ default:
+ return false;
+ }
+}
+
+function isValidAlphaEscapeInClass(s) {
+ switch (s) {
+ // ClassEscape[U] :: b
+ case "b":
+ // ControlEscape :: one of f n r t v
+ case "f":
+ case "n":
+ case "r":
+ case "t":
+ case "v":
+ // CharacterClassEscape :: one of d D s S w W
+ case "d":
+ case "D":
+ case "s":
+ case "S":
+ case "w":
+ case "W":
+ return true;
+ default:
+ return false;
+ }
+}
+
+// IdentityEscape in AtomEscape
+for (var cu = 0x41 /* A */; cu <= 0x5a /* Z */; ++cu) {
+ var s = String.fromCharCode(cu);
+ if (!isValidAlphaEscapeInAtom(s)) {
+ assert.throws(SyntaxError, function() {
+ RegExp("\\" + s, "u");
+ }, "IdentityEscape in AtomEscape: '" + s + "'");
+ }
+}
+for (var cu = 0x61 /* a */; cu <= 0x7a /* z */; ++cu) {
+ var s = String.fromCharCode(cu);
+ if (!isValidAlphaEscapeInAtom(s)) {
+ assert.throws(SyntaxError, function() {
+ RegExp("\\" + s, "u");
+ }, "IdentityEscape in AtomEscape: '" + s + "'");
+ }
+}
+
+
+// IdentityEscape in ClassEscape
+for (var cu = 0x41 /* A */; cu <= 0x5a /* Z */; ++cu) {
+ var s = String.fromCharCode(cu);
+ if (!isValidAlphaEscapeInClass(s)) {
+ assert.throws(SyntaxError, function() {
+ RegExp("[\\" + s + "]", "u");
+ }, "IdentityEscape in ClassEscape: '" + s + "'");
+ }
+}
+for (var cu = 0x61 /* a */; cu <= 0x7a /* z */; ++cu) {
+ var s = String.fromCharCode(cu);
+ if (!isValidAlphaEscapeInClass(s)) {
+ assert.throws(SyntaxError, function() {
+ RegExp("[\\" + s + "]", "u");
+ }, "IdentityEscape in ClassEscape: '" + s + "'");
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape_c.js b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape_c.js
new file mode 100644
index 0000000000..416bce486d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape_c.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: B.1.4 is not applied for Unicode RegExp - Invalid control escape sequences
+info: |
+ The compatibility extensions defined in B.1.4 Regular Expressions Patterns
+ are not applied for Unicode RegExp.
+ Tested extension: "IdentityEscape[U] :: [~U] SourceCharacter but not c"
+es6id: 21.1.2
+---*/
+
+function isAlpha(c) {
+ return ("A" <= c && c <= "Z") || ("a" <= c && c <= "z");
+}
+
+
+// "c ControlLetter" sequence in AtomEscape.
+//
+// AtomEscape[U] :: CharacterEscape[?U]
+// CharacterEscape[U] :: c ControlLetter
+assert.throws(SyntaxError, function() { RegExp("\\c", "u"); });
+for (var cu = 0x00; cu <= 0x7f; ++cu) {
+ var s = String.fromCharCode(cu);
+ if (!isAlpha(s)) {
+ assert.throws(SyntaxError, function() {
+ RegExp("\\c" + s, "u");
+ }, "ControlLetter escape in AtomEscape: '" + s + "'");
+ }
+}
+
+
+// "c ControlLetter" sequence in ClassEscape.
+//
+// ClassEscape[U] :: CharacterEscape[?U]
+// CharacterEscape[U] :: c ControlLetter
+assert.throws(SyntaxError, function() { RegExp("[\\c]", "u"); });
+for (var cu = 0x00; cu <= 0x7f; ++cu) {
+ var s = String.fromCharCode(cu);
+ if (!isAlpha(s)) {
+ assert.throws(SyntaxError, function() {
+ RegExp("[\\c" + s + "]", "u");
+ }, "ControlLetter escape in ClassEscape: '" + s + "'");
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape_u.js b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape_u.js
new file mode 100644
index 0000000000..517bf08ab3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape_u.js
@@ -0,0 +1,78 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: B.1.4 is not applied for Unicode RegExp - Incomplete Unicode escape sequences
+info: |
+ The compatibility extensions defined in B.1.4 Regular Expressions Patterns
+ are not applied for Unicode RegExp.
+ Tested extension: "IdentityEscape[U] :: [~U] SourceCharacter but not c"
+es6id: 21.1.2
+---*/
+
+// Incomplete RegExpUnicodeEscapeSequence in AtomEscape not parsed as IdentityEscape.
+//
+// AtomEscape[U] :: CharacterEscape[?U]
+// CharacterEscape[U] :: RegExpUnicodeEscapeSequence[?U]
+assert.throws(SyntaxError, function() {
+ RegExp("\\u", "u");
+}, 'RegExp("\\u", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\u1", "u");
+}, 'RegExp("\\u1", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\u12", "u");
+}, 'RegExp("\\u12", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\u123", "u");
+}, 'RegExp("\\u123", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\u{", "u");
+}, 'RegExp("\\u{", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\u{}", "u");
+}, 'RegExp("\\u{}", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\u{1", "u");
+}, 'RegExp("\\u{1", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\u{12", "u");
+}, 'RegExp("\\u{12", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\u{123", "u");
+}, 'RegExp("\\u{123", "u"): ');
+
+
+// Incomplete RegExpUnicodeEscapeSequence in ClassEscape not parsed as IdentityEscape.
+//
+// ClassEscape[U] :: CharacterEscape[?U]
+// CharacterEscape[U] :: RegExpUnicodeEscapeSequence[?U]
+assert.throws(SyntaxError, function() {
+ RegExp("[\\u]", "u");
+}, 'RegExp("[\\u]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\u1]", "u");
+}, 'RegExp("[\\u1]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\u12]", "u");
+}, 'RegExp("[\\u12]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\u123]", "u");
+}, 'RegExp("[\\u123]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\u{]", "u");
+}, 'RegExp("[\\u{]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\u{}]", "u");
+}, 'RegExp("[\\u{}]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\u{1]", "u");
+}, 'RegExp("[\\u{1]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\u{12]", "u");
+}, 'RegExp("[\\u{12]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\u{123]", "u");
+}, 'RegExp("[\\u{123]", "u"): ');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape_x.js b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape_x.js
new file mode 100644
index 0000000000..24a1d9f90f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_identity_escape_x.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: B.1.4 is not applied for Unicode RegExp - Incomplete hexadecimal escape sequences
+info: |
+ The compatibility extensions defined in B.1.4 Regular Expressions Patterns
+ are not applied for Unicode RegExp.
+ Tested extension: "IdentityEscape[U] :: [~U] SourceCharacter but not c"
+es6id: 21.1.2
+---*/
+
+// Incomplete HexEscapeSequence in AtomEscape not parsed as IdentityEscape.
+//
+// AtomEscape[U] :: CharacterEscape[?U]
+// CharacterEscape[U] :: HexEscapeSequence
+assert.throws(SyntaxError, function() {
+ RegExp("\\x", "u");
+}, 'RegExp("\\x", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\x1", "u");
+}, 'RegExp("\\x1", "u"): ');
+
+
+// Incomplete HexEscapeSequence in ClassEscape not parsed as IdentityEscape.
+//
+// ClassEscape[U] :: CharacterEscape[?U]
+// CharacterEscape[U] :: HexEscapeSequence
+assert.throws(SyntaxError, function() {
+ RegExp("[\\x]", "u");
+}, 'RegExp("[\\x]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\x1]", "u");
+}, 'RegExp("[\\x1]", "u"): ');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicode_restricted_incomplete_quantifier.js b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_incomplete_quantifier.js
new file mode 100644
index 0000000000..2a437729cf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_incomplete_quantifier.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: B.1.4 is not applied for Unicode RegExp - Incomplete quantifiers
+info: |
+ The compatibility extensions defined in B.1.4 Regular Expressions Patterns
+ are not applied for Unicode RegExp.
+ Tested extension: "Atom[U] :: PatternCharacter"
+es6id: 21.1.2
+---*/
+
+// Incomplete quantifier with atom.
+assert.throws(SyntaxError, function() {
+ RegExp("a{", "u");
+}, 'RegExp("a{", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("a{1", "u");
+}, 'RegExp("a{1", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("a{1,", "u");
+}, 'RegExp("a{1,", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("a{1,2", "u");
+}, 'RegExp("a{1,2", "u"): ');
+
+
+// Incomplete quantifier without atom.
+assert.throws(SyntaxError, function() {
+ RegExp("{", "u");
+}, 'RegExp("{", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("{1", "u");
+}, 'RegExp("{1", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("{1,", "u");
+}, 'RegExp("{1,", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("{1,2", "u");
+}, 'RegExp("{1,2", "u"): ');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicode_restricted_octal_escape.js b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_octal_escape.js
new file mode 100644
index 0000000000..2940fd9011
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_octal_escape.js
@@ -0,0 +1,150 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: B.1.4 is not applied for Unicode RegExp - Octal escape sequences
+info: |
+ The compatibility extensions defined in B.1.4 Regular Expressions Patterns
+ are not applied for Unicode RegExp.
+ Tested extension: "CharacterEscape[U] :: [~U] LegacyOctalEscapeSequence"
+es6id: 21.1.2
+---*/
+
+// DecimalEscape without leading 0 in AtomEscape.
+//
+// AtomEscape[U] :: DecimalEscape
+// DecimalEscape :: DecimalIntegerLiteral [lookahead /= DecimalDigit]
+assert.throws(SyntaxError, function() {
+ RegExp("\\1", "u");
+}, 'RegExp("\\1", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\2", "u");
+}, 'RegExp("\\2", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\3", "u");
+}, 'RegExp("\\3", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\4", "u");
+}, 'RegExp("\\4", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\5", "u");
+}, 'RegExp("\\5", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\6", "u");
+}, 'RegExp("\\6", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\7", "u");
+}, 'RegExp("\\7", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\8", "u");
+}, 'RegExp("\\8", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\9", "u");
+}, 'RegExp("\\9", "u"): ');
+
+
+// DecimalEscape without leading 0 in ClassEscape.
+//
+// ClassEscape[U] :: DecimalEscape
+// DecimalEscape :: DecimalIntegerLiteral [lookahead /= DecimalDigit]
+assert.throws(SyntaxError, function() {
+ RegExp("[\\1]", "u");
+}, 'RegExp("[\\1]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\2]", "u");
+}, 'RegExp("[\\2]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\3]", "u");
+}, 'RegExp("[\\3]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\4]", "u");
+}, 'RegExp("[\\4]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\5]", "u");
+}, 'RegExp("[\\5]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\6]", "u");
+}, 'RegExp("[\\6]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\7]", "u");
+}, 'RegExp("[\\7]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\8]", "u");
+}, 'RegExp("[\\8]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\9]", "u");
+}, 'RegExp("[\\9]", "u"): ');
+
+
+// DecimalEscape with leading 0 in AtomEscape.
+//
+// Atom[U] :: DecimalEscape
+// DecimalEscape :: DecimalIntegerLiteral [lookahead /= DecimalDigit]
+assert.throws(SyntaxError, function() {
+ RegExp("\\00", "u");
+}, 'RegExp("\\00", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\01", "u");
+}, 'RegExp("\\01", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\02", "u");
+}, 'RegExp("\\02", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\03", "u");
+}, 'RegExp("\\03", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\04", "u");
+}, 'RegExp("\\04", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\05", "u");
+}, 'RegExp("\\05", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\06", "u");
+}, 'RegExp("\\06", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\07", "u");
+}, 'RegExp("\\07", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\08", "u");
+}, 'RegExp("\\08", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("\\09", "u");
+}, 'RegExp("\\09", "u"): ');
+
+
+// DecimalEscape with leading 0 in ClassEscape.
+//
+// ClassEscape[U] :: DecimalEscape
+// DecimalEscape :: DecimalIntegerLiteral [lookahead /= DecimalDigit]
+assert.throws(SyntaxError, function() {
+ RegExp("[\\00]", "u");
+}, 'RegExp("[\\00]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\01]", "u");
+}, 'RegExp("[\\01]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\02]", "u");
+}, 'RegExp("[\\02]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\03]", "u");
+}, 'RegExp("[\\03]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\04]", "u");
+}, 'RegExp("[\\04]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\05]", "u");
+}, 'RegExp("[\\05]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\06]", "u");
+}, 'RegExp("[\\06]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\07]", "u");
+}, 'RegExp("[\\07]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\08]", "u");
+}, 'RegExp("[\\08]", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("[\\09]", "u");
+}, 'RegExp("[\\09]", "u"): ');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicode_restricted_quantifiable_assertion.js b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_quantifiable_assertion.js
new file mode 100644
index 0000000000..988dac42f1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_quantifiable_assertion.js
@@ -0,0 +1,96 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: B.1.4 is not applied for Unicode RegExp - Production 'QuantifiableAssertion Quantifier'
+info: |
+ The compatibility extensions defined in B.1.4 Regular Expressions Patterns
+ are not applied for Unicode RegExps.
+ Tested extension: "ExtendedTerm :: QuantifiableAssertion Quantifier"
+es6id: 21.1.2
+---*/
+
+// Positive lookahead with quantifier.
+assert.throws(SyntaxError, function() {
+ RegExp("(?=.)*", "u");
+}, 'RegExp("(?=.)*", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?=.)+", "u");
+}, 'RegExp("(?=.)+", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?=.)?", "u");
+}, 'RegExp("(?=.)?", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?=.){1}", "u");
+}, 'RegExp("(?=.){1}", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?=.){1,}", "u");
+}, 'RegExp("(?=.){1,}", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?=.){1,2}", "u");
+}, 'RegExp("(?=.){1,2}", "u"): ');
+
+
+// Positive lookahead with reluctant quantifier.
+assert.throws(SyntaxError, function() {
+ RegExp("(?=.)*?", "u");
+}, 'RegExp("(?=.)*?", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?=.)+?", "u");
+}, 'RegExp("(?=.)+?", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?=.)??", "u");
+}, 'RegExp("(?=.)??", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?=.){1}?", "u");
+}, 'RegExp("(?=.){1}?", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?=.){1,}?", "u");
+}, 'RegExp("(?=.){1,}?", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?=.){1,2}?", "u");
+}, 'RegExp("(?=.){1,2}?", "u"): ');
+
+
+// Negative lookahead with quantifier.
+assert.throws(SyntaxError, function() {
+ RegExp("(?!.)*", "u");
+}, 'RegExp("(?!.)*", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?!.)+", "u");
+}, 'RegExp("(?!.)+", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?!.)?", "u");
+}, 'RegExp("(?!.)?", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?!.){1}", "u");
+}, 'RegExp("(?!.){1}", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?!.){1,}", "u");
+}, 'RegExp("(?!.){1,}", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?!.){1,2}", "u");
+}, 'RegExp("(?!.){1,2}", "u"): ');
+
+
+// Negative lookahead with reluctant quantifier.
+assert.throws(SyntaxError, function() {
+ RegExp("(?!.)*?", "u");
+}, 'RegExp("(?!.)*?", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?!.)+?", "u");
+}, 'RegExp("(?!.)+?", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?!.)??", "u");
+}, 'RegExp("(?!.)??", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?!.){1}?", "u");
+}, 'RegExp("(?!.){1}?", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?!.){1,}?", "u");
+}, 'RegExp("(?!.){1,}?", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("(?!.){1,2}?", "u");
+}, 'RegExp("(?!.){1,2}?", "u"): ');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/unicode_restricted_quantifier_without_atom.js b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_quantifier_without_atom.js
new file mode 100644
index 0000000000..a1ff9ff463
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/unicode_restricted_quantifier_without_atom.js
@@ -0,0 +1,54 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: B.1.4 is not applied for Unicode RegExp - Quantifier without matching Atom
+info: |
+ The compatibility extensions defined in B.1.4 Regular Expressions Patterns
+ are not applied for Unicode RegExp.
+ Tested extension: "Atom[U] :: PatternCharacter"
+es6id: 21.1.2
+---*/
+
+// Quantifier without atom.
+assert.throws(SyntaxError, function() {
+ RegExp("*", "u");
+}, 'RegExp("*", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("+", "u");
+}, 'RegExp("+", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("?", "u");
+}, 'RegExp("?", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("{1}", "u");
+}, 'RegExp("{1}", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("{1,}", "u");
+}, 'RegExp("{1,}", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("{1,2}", "u");
+}, 'RegExp("{1,2}", "u"): ');
+
+
+// Reluctant quantifier without atom.
+assert.throws(SyntaxError, function() {
+ RegExp("*?", "u");
+}, 'RegExp("*?", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("+?", "u");
+}, 'RegExp("+?", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("??", "u");
+}, 'RegExp("??", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("{1}?", "u");
+}, 'RegExp("{1}?", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("{1,}?", "u");
+}, 'RegExp("{1,}?", "u"): ');
+assert.throws(SyntaxError, function() {
+ RegExp("{1,2}?", "u");
+}, 'RegExp("{1,2}?", "u"): ');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/RegExp/valid-flags-y.js b/js/src/tests/test262/built-ins/RegExp/valid-flags-y.js
new file mode 100644
index 0000000000..ede3ef6175
--- /dev/null
+++ b/js/src/tests/test262/built-ins/RegExp/valid-flags-y.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 21.2.3.1
+description: The `y` flag is accepted by the RegExp constructor
+info: |
+ [...]
+ 10. Return RegExpInitialize(O, P, F).
+
+ 21.2.3.2.2 Runtime Semantics: RegExpInitialize ( obj, pattern, flags )
+
+ [...]
+ 7. If F contains any code unit other than "g", "i", "m", "u", or "y" or if
+ it contains the same code unit more than once, throw a SyntaxError
+ exception.
+---*/
+
+new RegExp('abc', 'y');
+new RegExp('abc', 'gy');
+new RegExp('abc', 'iy');
+new RegExp('abc', 'my');
+new RegExp('abc', 'uy');
+new RegExp('abc', 'gimuy');
+
+reportCompare(0, 0);