LibJS: Grow storage when adding a property to uniquely-shaped Object
Normally the storage would be expanded by set_shape() upon transition to a new shape, but if the shape is already unique, there is no new transition so we have to expand the storage manually.
This commit is contained in:
parent
c9c1d1fae0
commit
2778d077e5
Notes:
sideshowbarker
2024-07-19 07:16:37 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/2778d077e59
2 changed files with 11 additions and 0 deletions
|
@ -119,6 +119,7 @@ void Object::put_own_property(Object& this_object, const FlyString& property_nam
|
|||
if (!metadata.has_value()) {
|
||||
if (m_shape->is_unique()) {
|
||||
m_shape->add_property_to_unique_shape(property_name, attributes);
|
||||
m_storage.resize(m_shape->property_count());
|
||||
} else {
|
||||
set_shape(*m_shape->create_put_transition(property_name, attributes));
|
||||
}
|
||||
|
|
10
Libraries/LibJS/Tests/delete-globalThis-property-crash.js
Normal file
10
Libraries/LibJS/Tests/delete-globalThis-property-crash.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
load("test-common.js");
|
||||
|
||||
try {
|
||||
a = 1;
|
||||
assert(delete globalThis.a === true);
|
||||
a = 2;
|
||||
console.log("PASS");
|
||||
} catch (e) {
|
||||
console.log("FAIL: " + e);
|
||||
}
|
Loading…
Add table
Reference in a new issue