Source code
Revision control
Copy as Markdown
Other Tools
// Copyright (C) 2024 André Bargull. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-super-keyword-runtime-semantics-evaluation
description: >
GetSuperBase is performed before ToPropertyKey in GetValue.
info: |
13.3.7.1 Runtime Semantics: Evaluation
SuperProperty : super [ Expression ]
...
2. Let actualThis be ? env.GetThisBinding().
3. Let propertyNameReference be ? Evaluation of Expression.
4. Let propertyNameValue be ? GetValue(propertyNameReference).
...
7. Return ? MakeSuperPropertyReference(actualThis, propertyNameValue, strict).
13.3.7.3 MakeSuperPropertyReference ( actualThis, propertyKey, strict )
1. Let env be GetThisEnvironment().
...
3. Let baseValue be ? env.GetSuperBase().
...
6.2.5.5 GetValue ( V )
...
3. If IsPropertyReference(V) is true, then
...
c. If V.[[ReferencedName]] is not a property key, then
i. Set V.[[ReferencedName]] to ? ToPropertyKey(V.[[ReferencedName]]).
d. Return ? baseObj.[[Get]](V.[[ReferencedName]], GetThisValue(V)).
...
---*/
var proto = {
p: "ok",
};
var proto2 = {
p: "bad",
};
var obj = {
__proto__: proto,
m() {
return super[key];
}
};
var key = {
toString() {
Object.setPrototypeOf(obj, proto2);
return "p";
}
};
assert.sameValue(obj.m(), "ok");
reportCompare(0, 0);