diff --git a/src/ast/nodes/shared/knownGlobals.ts b/src/ast/nodes/shared/knownGlobals.ts index b63ea699344..9e115ddd9ae 100644 --- a/src/ast/nodes/shared/knownGlobals.ts +++ b/src/ast/nodes/shared/knownGlobals.ts @@ -214,6 +214,7 @@ const knownGlobals: GlobalDescription = { // deoptimizes everything anyway defineProperty: MUTATES_ARG_WITHOUT_ACCESSOR, defineProperties: MUTATES_ARG_WITHOUT_ACCESSOR, + freeze: MUTATES_ARG_WITHOUT_ACCESSOR, getOwnPropertyDescriptor: PF, getOwnPropertyNames: PF, getOwnPropertySymbols: PF, diff --git a/test/form/samples/big-int/_config.js b/test/form/samples/big-int/_config.js index 6386e7ec26f..2c32390904e 100644 --- a/test/form/samples/big-int/_config.js +++ b/test/form/samples/big-int/_config.js @@ -1,4 +1,3 @@ module.exports = { - description: 'supports bigint via acorn plugin', - options: {} + description: 'supports bigint via acorn plugin' }; diff --git a/test/form/samples/object-freeze-effects/_config.js b/test/form/samples/object-freeze-effects/_config.js new file mode 100644 index 00000000000..4808999695c --- /dev/null +++ b/test/form/samples/object-freeze-effects/_config.js @@ -0,0 +1,3 @@ +module.exports = { + description: 'Only treats Object.freeze as a side effect if the argument is used' +}; diff --git a/test/form/samples/object-freeze-effects/_expected.js b/test/form/samples/object-freeze-effects/_expected.js new file mode 100644 index 00000000000..32378bba82b --- /dev/null +++ b/test/form/samples/object-freeze-effects/_expected.js @@ -0,0 +1,6 @@ +const b = Object.freeze({ foo: 'bar' }); +console.log(b); + +const c = { foo: 'bar' }; +Object.freeze(c); // retained +console.log(c); diff --git a/test/form/samples/object-freeze-effects/main.js b/test/form/samples/object-freeze-effects/main.js new file mode 100644 index 00000000000..023a4fd5dfc --- /dev/null +++ b/test/form/samples/object-freeze-effects/main.js @@ -0,0 +1,11 @@ +Object.freeze({ foo: 'bar' }); // removed + +const a = { foo: 'bar' }; // removed +Object.freeze(a); // removed + +const b = Object.freeze({ foo: 'bar' }); +console.log(b); + +const c = { foo: 'bar' }; +Object.freeze(c); // retained +console.log(c);