Add additional tests for tc39/ecma262#3307.

Ensure that the following cases are covered:
- https://github.com/tc39/ecma262/issues/3295#issuecomment-2058110314
- https://github.com/tc39/ecma262/issues/2659#issue-1131245695
This commit is contained in:
Ross Kirsling 2024-04-18 15:14:18 +09:00 committed by Philip Chimento
parent 830b17a3a0
commit 007b333af2
3 changed files with 48 additions and 4 deletions

View File

@ -74,7 +74,7 @@ function targetKey() {
assert.compareArray(log, [ assert.compareArray(log, [
"source", "iterator", "source", "iterator",
"target", "target-key", "target-key-tostring", "target", "target-key",
"iterator-step", "iterator-done", "iterator-step", "iterator-done",
"set", "target-key-tostring", "set",
]); ]);

View File

@ -70,6 +70,6 @@ function targetKey() {
assert.compareArray(log, [ assert.compareArray(log, [
"source", "source-key", "source-key-tostring", "source", "source-key", "source-key-tostring",
"target", "target-key", "target-key-tostring", "target", "target-key",
"get", "set", "get", "target-key-tostring", "set",
]); ]);

View File

@ -0,0 +1,44 @@
// Copyright (C) 2024 Sony Interactive Entertainment Inc. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-evaluate-property-access-with-expression-key
description: When getting the value of o[p], ToObject(o) precedes ToPropertyKey(p).
info: |
13.3.3 EvaluatePropertyAccessWithExpressionKey ( baseValue, expression, strict )
1. Let _propertyNameReference_ be ? Evaluation of _expression_.
2. Let _propertyNameValue_ be ? GetValue(_propertyNameReference_).
...
4. Return the Reference Record { [[Base]]: _baseValue_, [[ReferencedName]]: _propertyNameValue_, [[Strict]]: _strict_, [[ThisValue]]: ~empty~ }.
6.2.5.5 GetValue ( V )
1. If V is not a Reference Record, return V.
...
3. If IsPropertyReference(V) is true, then
a. Let baseObj be ? ToObject(V.[[Base]]).
...
c. If V.[[ReferencedName]] is neither a String nor a Symbol, then
i. Let referencedName be ? ToPropertyKey(V.[[ReferencedName]]).
---*/
assert.throws(TypeError, function() {
var base = null;
var prop = {
toString: function() {
throw new Test262Error("property key evaluated");
}
};
base[prop];
});
assert.throws(TypeError, function() {
var base = undefined;
var prop = {
toString: function() {
throw new Test262Error("property key evaluated");
}
};
base[prop];
});