var BUGNUMBER = 1130860; var summary = "RegExp constructor shouldn't invoke source/flags getters on argument RegExp instance."; print(BUGNUMBER + ": " + summary); // same-compartment var a = /foo/; var flagsCalled = false; var sourceCalled = false; Object.defineProperty(a, "source", { get: () => { sourceCalled = true; return "bar"; }}); Object.defineProperty(a, "flags", { get: () => { flagsCalled = true; return "i"; }}); assertEq(a.source, "bar"); assertEq(a.flags, "i"); assertEq(sourceCalled, true); assertEq(flagsCalled, true); sourceCalled = false; flagsCalled = false; assertEq(new RegExp(a).source, "foo"); assertEq(sourceCalled, false); assertEq(flagsCalled, false); // cross-compartment var g = newGlobal(); var b = g.eval(` var b = /foo2/; var flagsCalled = false; var sourceCalled = false; Object.defineProperty(b, "source", { get: () => { sourceCalled = true; return "bar2"; }}); Object.defineProperty(b, "flags", { get: () => { flagsCalled = true; return "i"; }}); b; `); assertEq(b.source, "bar2"); assertEq(b.flags, "i"); assertEq(g.eval("sourceCalled;"), true); assertEq(g.eval("flagsCalled;"), true); g.eval(` sourceCalled = false; flagsCalled = false; `); assertEq(new RegExp(b).source, "foo2"); assertEq(g.eval("sourceCalled;"), false); assertEq(g.eval("flagsCalled;"), false); if (typeof reportCompare === "function") reportCompare(true, true);