mirror of
https://github.com/tc39/test262.git
synced 2025-12-01 11:03:13 +01:00
This came up with a V8 bug where private fields weren't resolved properly from nested classes where both the inner and the outer class had private fields.
43 lines
1.1 KiB
Plaintext
43 lines
1.1 KiB
Plaintext
// Copyright (C) 2019 Shu-yu Guo. All rights reserved.
|
|
// This code is governed by the BSD license found in the LICENSE file.
|
|
|
|
/*---
|
|
desc: PrivateName CallExpression usage (private field)
|
|
info: |
|
|
Updated Productions
|
|
|
|
CallExpression[Yield, Await]:
|
|
CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
|
|
SuperCall[?Yield, ?Await]
|
|
CallExpression[?Yield, ?Await]Arguments[?Yield, ?Await]
|
|
CallExpression[?Yield, ?Await][Expression[+In, ?Yield, ?Await]]
|
|
CallExpression[?Yield, ?Await].IdentifierName
|
|
CallExpression[?Yield, ?Await]TemplateLiteral[?Yield, ?Await]
|
|
CallExpression[?Yield, ?Await].PrivateName
|
|
|
|
template: default
|
|
features: [class-fields-private, class-fields-public]
|
|
---*/
|
|
|
|
//- elements
|
|
#outer = 'test262';
|
|
|
|
B_withoutPrivateField = class {
|
|
method(o) {
|
|
return o.#outer;
|
|
}
|
|
}
|
|
|
|
B_withPrivateField = class {
|
|
#inner = 42;
|
|
method(o) {
|
|
return o.#outer;
|
|
}
|
|
}
|
|
//- assertions
|
|
let c = new C();
|
|
let innerB1 = new c.B_withoutPrivateField();
|
|
assert.sameValue(innerB1.method(c), 'test262');
|
|
let innerB2 = new c.B_withPrivateField();
|
|
assert.sameValue(innerB2.method(c), 'test262');
|