diff --git a/packages/metro/src/JSTransformer/worker/__tests__/constant-folding-plugin-test.js b/packages/metro/src/JSTransformer/worker/__tests__/constant-folding-plugin-test.js index 17c9d2e7..ca2a273c 100644 --- a/packages/metro/src/JSTransformer/worker/__tests__/constant-folding-plugin-test.js +++ b/packages/metro/src/JSTransformer/worker/__tests__/constant-folding-plugin-test.js @@ -259,4 +259,16 @@ describe('constant expressions', () => { expect(fold('arbitrary.js', code)).toEqual('var x=2;{z();}'); }); + + it('does not mess up -0', () => { + const code = ` + var plusZero = +0; + var zero = 0; + var minusZero = -0; + `; + + expect(fold('arbitrary.js', code)).toEqual( + 'var plusZero=0;var zero=0;var minusZero=-0;', + ); + }); }); diff --git a/packages/metro/src/JSTransformer/worker/constant-folding-plugin.js b/packages/metro/src/JSTransformer/worker/constant-folding-plugin.js index 4c8557fb..7742c6e9 100644 --- a/packages/metro/src/JSTransformer/worker/constant-folding-plugin.js +++ b/packages/metro/src/JSTransformer/worker/constant-folding-plugin.js @@ -63,7 +63,9 @@ function constantFoldingPlugin(context: {types: BabelTypes}) { const result = path.evaluate(); if (result.confident) { - path.replaceWith(t.valueToNode(result.value)); + if (!Object.is(result.value, -0)) { + path.replaceWith(t.valueToNode(result.value)); + } } }, };