diff --git a/src/ast/nodes/shared/ObjectEntity.ts b/src/ast/nodes/shared/ObjectEntity.ts index 7d9c8d2cf99..ad84a57eb36 100644 --- a/src/ast/nodes/shared/ObjectEntity.ts +++ b/src/ast/nodes/shared/ObjectEntity.ts @@ -128,7 +128,7 @@ export class ObjectEntity extends ExpressionEntity { : this.allProperties) { property.deoptimizePath(subPath); } - this.prototypeExpression?.deoptimizePath(path.length === 1 ? [UnknownKey, UnknownKey] : path); + this.prototypeExpression?.deoptimizePath(path.length === 1 ? [...path, UnknownKey] : path); } deoptimizeThisOnEventAtPath( diff --git a/test/form/samples/deoptimize-superclass/_config.js b/test/form/samples/deoptimize-superclass/_config.js new file mode 100644 index 00000000000..584b0fc8c1a --- /dev/null +++ b/test/form/samples/deoptimize-superclass/_config.js @@ -0,0 +1,3 @@ +module.exports = { + description: 'does not deoptimize the entire superclass when reassigning a property' +}; diff --git a/test/form/samples/deoptimize-superclass/_expected.js b/test/form/samples/deoptimize-superclass/_expected.js new file mode 100644 index 00000000000..32b6ab236d7 --- /dev/null +++ b/test/form/samples/deoptimize-superclass/_expected.js @@ -0,0 +1,2 @@ +// Everything else should be removed +console.log('retained'); diff --git a/test/form/samples/deoptimize-superclass/main.js b/test/form/samples/deoptimize-superclass/main.js new file mode 100644 index 00000000000..bce385b816e --- /dev/null +++ b/test/form/samples/deoptimize-superclass/main.js @@ -0,0 +1,10 @@ +class Foo {} + +Foo.prototype.bar = {}; + +class Bar extends Foo {} + +Bar.baz = {}; + +// Everything else should be removed +console.log('retained');