// Use the correct receiver when non-native objects are prototypes of other objects.

function Thing(a, b) {
    this.a = a;
    this.b = b;
}

function foo() {
    var array = [];
    for (var i = 0; i < 10000; i++)
        array.push(new Thing(i, i + 1));

    var proto = new Thing(1, 2);
    var obj = Object.create(proto);

    Object.defineProperty(Thing.prototype, "c", {set:function() { this.d = 0; }});
    obj.c = 3;
    assertEq(obj.c, undefined);
    assertEq(obj.d, 0);
    assertEq(obj.hasOwnProperty("d"), true);
    assertEq(proto.d, undefined);
    assertEq(proto.hasOwnProperty("d"), false);

    obj.a = 3;
    assertEq(obj.a, 3);
    assertEq(proto.a, 1);
    assertEq(obj.hasOwnProperty("a"), true);
}

foo();