v8/test/mjsunit/regress/regress-7791.js
Georg Neis 21eb2029d0 Fix bug in object literals with redeclarations.
Bug: v8:7791
Change-Id: I0df79f39c6f60b3cfbdc0161f7c085c635659d81
Reviewed-on: https://chromium-review.googlesource.com/1075054
Reviewed-by: Sigurd Schneider <sigurds@chromium.org>
Commit-Queue: Georg Neis <neis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#53385}
2018-05-28 13:00:07 +00:00

121 lines
2.2 KiB
JavaScript

// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
"use strict";
// Data property last.
{
const o = {
get foo() { return 666 },
foo: 42,
};
assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').value);
}
{
const o = {
set foo(_) { },
foo: 42,
};
assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').value);
}
{
const o = {
get foo() { return 666 },
set foo(_) { },
foo: 42,
};
assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').value);
}
{
const o = {
get foo() { return 666 },
set ['foo'.slice()](_) { },
foo: 42,
};
assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').value);
}
{
const o = {
get ['foo'.slice()]() { return 666 },
set ['foo'.slice()](_) { },
foo: 42,
};
assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').value);
}
// Data property first.
{
const o = {
foo: 666,
get foo() { return 42 },
};
assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').get());
}
{
const o = {
foo: 666,
set foo(_) { },
};
assertEquals(undefined, Object.getOwnPropertyDescriptor(o, 'foo').get);
assertEquals(undefined, Object.getOwnPropertyDescriptor(o, 'foo').value);
}
{
const o = {
foo: 666,
get foo() { return 42 },
set foo(_) { },
};
assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').get());
}
{
const o = {
foo: 666,
get ['foo'.slice()]() { return 42 },
set foo(_) { },
};
assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').get());
}
{
const o = {
foo: 666,
get ['foo'.slice()]() { return 42 },
set ['foo'](_) { },
};
assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').get());
}
// Data property in the middle.
{
const o = {
get foo() { return 42 },
foo: 666,
set foo(_) { },
};
assertEquals(undefined, Object.getOwnPropertyDescriptor(o, 'foo').get);
assertEquals(undefined, Object.getOwnPropertyDescriptor(o, 'foo').set());
}
{
const o = {
set foo(_) { },
foo: 666,
get foo() { return 42 },
};
assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').get());
}