diff --git a/external/builder/babel-plugin-pdfjs-preprocessor.mjs b/external/builder/babel-plugin-pdfjs-preprocessor.mjs index 3efadf9f3..99efc8eb4 100644 --- a/external/builder/babel-plugin-pdfjs-preprocessor.mjs +++ b/external/builder/babel-plugin-pdfjs-preprocessor.mjs @@ -47,31 +47,18 @@ function handlePreprocessorAction(ctx, actionName, args, path) { } function babelPluginPDFJSPreprocessor(babel, ctx) { - function removeUnusedFunctionsAndVariables(path) { - const { scope } = path; + function removeUnusedFunctions(path) { let removed; do { removed = false; - scope.crawl(); - for (const name in scope.bindings) { - const binding = scope.bindings[name]; + path.scope.crawl(); + for (const name in path.scope.bindings) { + const binding = path.scope.bindings[name]; if (!binding.referenced) { const { path: bindingPath } = binding; if (bindingPath.isFunctionDeclaration()) { bindingPath.remove(); removed = true; - } else if ( - bindingPath.isClassDeclaration() && - !bindingPath.node.body.body.some(m => m.type === "StaticBlock") - ) { - bindingPath.remove(); - removed = true; - } else if ( - bindingPath.isVariableDeclarator() && - scope.isPure(bindingPath.node.init, false) - ) { - bindingPath.remove(); - removed = true; } } } @@ -126,28 +113,24 @@ function babelPluginPDFJSPreprocessor(babel, ctx) { LogicalExpression: { exit(path) { const { node } = path; - let leftIsTruthy = false; - switch (node.left.type) { - case "BooleanLiteral": - case "NumericLiteral": - case "StringLiteral": - case "NullLiteral": - leftIsTruthy = Boolean(node.left.value); - break; - default: - return; + if (!t.isBooleanLiteral(node.left)) { + return; } switch (node.operator) { case "&&": // true && expr => expr // false && expr => false - path.replaceWith(leftIsTruthy ? node.right : node.left); + path.replaceWith( + node.left.value === true ? node.right : node.left + ); break; case "||": // true || expr => true // false || expr => expr - path.replaceWith(leftIsTruthy ? node.left : node.right); + path.replaceWith( + node.left.value === true ? node.left : node.right + ); break; } }, @@ -275,7 +258,7 @@ function babelPluginPDFJSPreprocessor(babel, ctx) { body.pop(); } - removeUnusedFunctionsAndVariables(path); + removeUnusedFunctions(path); }, }, ClassMethod: { @@ -301,7 +284,7 @@ function babelPluginPDFJSPreprocessor(babel, ctx) { Program: { exit(path) { if (path.node.sourceType === "module") { - removeUnusedFunctionsAndVariables(path); + removeUnusedFunctions(path); } }, }, diff --git a/external/builder/fixtures_babel/constants-expected.js b/external/builder/fixtures_babel/constants-expected.js index ab8768fa1..e3a5d6c15 100644 --- a/external/builder/fixtures_babel/constants-expected.js +++ b/external/builder/fixtures_babel/constants-expected.js @@ -13,6 +13,3 @@ var l = true; var m = false; var n = false; var o = true; -var p = null; -var q = 1; -use(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q); diff --git a/external/builder/fixtures_babel/constants.js b/external/builder/fixtures_babel/constants.js index e41031dde..db2ff6e67 100644 --- a/external/builder/fixtures_babel/constants.js +++ b/external/builder/fixtures_babel/constants.js @@ -13,7 +13,3 @@ var l = 'test' !== 'test2'; var m = '1' === true; var n = !true; var o = !false; -var p = null && 1; -var q = null || 1; - -use(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q); diff --git a/external/builder/fixtures_babel/constructors-expected.js b/external/builder/fixtures_babel/constructors-expected.js index 862f102a9..841e53851 100644 --- a/external/builder/fixtures_babel/constructors-expected.js +++ b/external/builder/fixtures_babel/constructors-expected.js @@ -18,8 +18,6 @@ class E extends A { class F { constructor() { var a = 0; - use(a); } } class G {} -use(B, C, D, E, F, G); diff --git a/external/builder/fixtures_babel/constructors.js b/external/builder/fixtures_babel/constructors.js index f70e08c25..8d7f41216 100644 --- a/external/builder/fixtures_babel/constructors.js +++ b/external/builder/fixtures_babel/constructors.js @@ -24,7 +24,6 @@ class F { constructor() { if (PDFJSDev.test('TRUE')) { var a = 0; - use(a); } } } @@ -33,9 +32,6 @@ class G { constructor() { if (PDFJSDev.test('FALSE')) { var a = 0; - use(a); } } } - -use(B, C, D, E, F, G); diff --git a/external/builder/fixtures_babel/deadcode-expected.js b/external/builder/fixtures_babel/deadcode-expected.js index c8aee8c74..f947370c3 100644 --- a/external/builder/fixtures_babel/deadcode-expected.js +++ b/external/builder/fixtures_babel/deadcode-expected.js @@ -5,12 +5,12 @@ function f2() { } f2(); function f3() { - before(); + var i = 0; throw "test"; } f3(); function f4() { - before(); + var i = 0; } f4(); var obj = { @@ -23,4 +23,3 @@ class C { } var arrow1 = () => {}; var arrow2 = () => {}; -use(obj, C, arrow1, arrow2); diff --git a/external/builder/fixtures_babel/deadcode.js b/external/builder/fixtures_babel/deadcode.js index e633f9dec..4c2796a3c 100644 --- a/external/builder/fixtures_babel/deadcode.js +++ b/external/builder/fixtures_babel/deadcode.js @@ -1,43 +1,41 @@ function f1() { return; - after(); + var i = 0; } f1(); function f2() { return 1; - after(); + var i = 0; } f2(); function f3() { - before(); + var i = 0; throw "test"; - after(); + var j = 0; } f3(); function f4() { - before(); + var i = 0; if (true) { return; } throw "test"; - after(); + var j = 0; } f4(); var obj = { - method1() { return; after(); }, + method1() { return; var i = 0; }, method2() { return; }, }; class C { - method1() { return; after(); } + method1() { return; var i = 0; } method2() { return; } } -var arrow1 = () => { return; after(); }; +var arrow1 = () => { return; var i = 0; }; var arrow2 = () => { return; }; - -use(obj, C, arrow1, arrow2); diff --git a/external/builder/fixtures_babel/evals-expected.js b/external/builder/fixtures_babel/evals-expected.js index 88f14db49..71eee73d1 100644 --- a/external/builder/fixtures_babel/evals-expected.js +++ b/external/builder/fixtures_babel/evals-expected.js @@ -16,4 +16,3 @@ var j = { }; var k = false; var l = true; -use(a, b, c, d, e, f, g, i, j, k, l); diff --git a/external/builder/fixtures_babel/evals.js b/external/builder/fixtures_babel/evals.js index fb361bc38..cabeb0746 100644 --- a/external/builder/fixtures_babel/evals.js +++ b/external/builder/fixtures_babel/evals.js @@ -9,5 +9,3 @@ var i = typeof PDFJSDev === 'undefined' ? PDFJSDev.eval('FALSE') : '0'; var j = typeof PDFJSDev !== 'undefined' ? PDFJSDev.eval('OBJ.obj') : '0'; var k = !PDFJSDev.test('TRUE'); var l = !PDFJSDev.test('FALSE'); - -use(a, b, c, d, e, f, g, i, j, k, l); diff --git a/external/builder/fixtures_babel/unused-variable-expected.js b/external/builder/fixtures_babel/unused-variable-expected.js deleted file mode 100644 index cdd46de1e..000000000 --- a/external/builder/fixtures_babel/unused-variable-expected.js +++ /dev/null @@ -1,7 +0,0 @@ -let c = 4; -let e = sideEffect(); -let f = 5; -use(c); -{ - use(f); -} diff --git a/external/builder/fixtures_babel/unused-variable.js b/external/builder/fixtures_babel/unused-variable.js deleted file mode 100644 index 853ae94a3..000000000 --- a/external/builder/fixtures_babel/unused-variable.js +++ /dev/null @@ -1,14 +0,0 @@ -let a = 1; -let b = a, c = 4; -let d = null && sideEffect(); -let e = null || sideEffect(); -let f = 5; -let g = 6; - -use(c); - -if (PDFJSDev.test('TRUE')) { - use(f); -} else { - use(g); -}