1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
const otherGlobal = newGlobal({newCompartment: true});
let regExp = otherGlobal.eval("/a(b|c)/iy");
function get(name) {
const descriptor = Object.getOwnPropertyDescriptor(RegExp.prototype, name);
return descriptor.get.call(regExp);
}
assertEq(get("flags"), "iy");
assertEq(get("global"), false);
assertEq(get("ignoreCase"), true);
assertEq(get("multiline"), false);
assertEq(get("dotAll"), false);
assertEq(get("source"), "a(b|c)");
assertEq(get("sticky"), true);
assertEq(get("unicode"), false);
regExp = otherGlobal.eval("new RegExp('', 'gu')");
assertEq(get("flags"), "gu");
assertEq(get("global"), true);
assertEq(get("ignoreCase"), false);
assertEq(get("multiline"), false);
assertEq(get("dotAll"), false);
assertEq(get("source"), "(?:)");
assertEq(get("sticky"), false);
assertEq(get("unicode"), true);
// Trigger escaping
regExp = otherGlobal.eval("new RegExp('a/b', '')");
assertEq(get("flags"), "");
assertEq(get("global"), false);
assertEq(get("ignoreCase"), false);
assertEq(get("multiline"), false);
assertEq(get("dotAll"), false);
assertEq(get("source"), "a\\/b");
assertEq(get("sticky"), false);
assertEq(get("unicode"), false);
if (typeof reportCompare === "function")
reportCompare(true, true);
|