var BUGNUMBER = 1147817;
var summary = "RegExp constructor should check pattern.constructor.";

print(BUGNUMBER + ": " + summary);

var g = newGlobal();

var re = /foo/;
assertEq(RegExp(re), re);
re.constructor = 10;
assertEq(RegExp(re) === re, false);
assertEq(RegExp(re).toString(), re.toString());

// If pattern comes from different global, RegExp shouldn't return it.
re = g.eval(`var re = /foo/; re;`);
assertEq(RegExp(re) === re, false);
assertEq(RegExp(re).toString(), re.toString());
g.eval(`re.constructor = 10;`);
assertEq(RegExp(re) === re, false);
assertEq(RegExp(re).toString(), re.toString());


re = new Proxy(/a/, {
  get(that, name) {
    return that[name];
  }
});
assertEq(RegExp(re) === re, false);

re = new Proxy(g.eval(`/a/`), {
  get(that, name) {
    return that[name];
  }
});
assertEq(RegExp(re) === re, false);

re = g.eval(`new Proxy(/a/, {
  get(that, name) {
    return that[name];
  }
});`);
assertEq(RegExp(re) === re, false);


var obj = { [Symbol.match]: true, source: "foo", flags: "gi" };
assertEq(RegExp(obj) === obj, false);
assertEq(RegExp(obj).toString(), "/foo/gi");
obj.constructor = RegExp;
assertEq(RegExp(obj), obj);

obj = g.eval(`var obj = { [Symbol.match]: true, source: "foo", flags: "gi" }; obj;`);
assertEq(RegExp(obj) === obj, false);
assertEq(RegExp(obj).toString(), "/foo/gi");
g.eval(`obj.constructor = RegExp`);
assertEq(RegExp(obj) === obj, false);
obj.constructor = RegExp;
assertEq(RegExp(obj), obj);

if (typeof reportCompare === "function")
    reportCompare(true, true);
