| Index: test/mjsunit/bugs/bug-proto.js
|
| diff --git a/test/mjsunit/compiler/parallel-proto-change.js b/test/mjsunit/bugs/bug-proto.js
|
| similarity index 59%
|
| copy from test/mjsunit/compiler/parallel-proto-change.js
|
| copy to test/mjsunit/bugs/bug-proto.js
|
| index 74e6d86a1041070e8df8e9b02d13f3e0ac697226..5638336c45f1084bf134bde2436b4cdbd4bbeeb3 100644
|
| --- a/test/mjsunit/compiler/parallel-proto-change.js
|
| +++ b/test/mjsunit/bugs/bug-proto.js
|
| @@ -25,21 +25,37 @@
|
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| -// Flags: --allow-natives-syntax --parallel-recompilation
|
| +var realmA = Realm.current();
|
| +var realmB = Realm.create();
|
| +assertEquals(0, realmA);
|
| +assertEquals(1, realmB);
|
|
|
| -function f(foo) { return foo.bar(); }
|
| +// The global objects match the realms' this binding.
|
| +assertSame(this, Realm.global(realmA));
|
| +assertSame(Realm.eval(realmB, "this"), Realm.global(realmB));
|
| +assertFalse(this === Realm.global(realmB));
|
|
|
| -var o = {};
|
| -o.__proto__ = { __proto__: { bar: function() { return 1; } } };
|
| +// The global object is not accessible cross-realm.
|
| +var x = 3;
|
| +Realm.shared = this;
|
| +assertThrows("Realm.eval(realmB, 'x')");
|
| +assertSame(undefined, Realm.eval(realmB, "this.x"));
|
| +assertSame(undefined, Realm.eval(realmB, "Realm.shared.x"));
|
|
|
| -assertEquals(1, f(o));
|
| -assertEquals(1, f(o));
|
| +Realm.eval(realmB, "Realm.global(0).y = 1");
|
| +assertThrows("y");
|
| +assertSame(undefined, this.y);
|
|
|
| -%OptimizeFunctionOnNextCall(f, "parallel");
|
| -assertEquals(1, f(o));
|
| -// Change the prototype chain during optimization.
|
| -o.__proto__.__proto__ = { bar: function() { return 2; } };
|
| +// Can get or set other objects' properties cross-realm.
|
| +var p = {a: 1};
|
| +var o = {__proto__: p, b: 2};
|
| +Realm.shared = o;
|
| +assertSame(1, Realm.eval(realmB, "Realm.shared.a"));
|
| +assertSame(2, Realm.eval(realmB, "Realm.shared.b"));
|
|
|
| -%WaitUntilOptimized(f);
|
| +// Cannot get or set a prototype cross-realm.
|
| +assertSame(undefined, Realm.eval(realmB, "Realm.shared.__proto__"));
|
|
|
| -assertEquals(2, f(o));
|
| +Realm.eval(realmB, "Realm.shared.__proto__ = {c: 3}");
|
| +assertSame(1, o.a);
|
| +assertSame(undefined, o.c);
|
|
|