From 6265bb60384f839b93840724b67d9b4cef3261fa Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Mon, 9 Jan 2017 13:15:09 -0600 Subject: [PATCH 1/2] Fixes preprocessor testing and adds deadcode removal. --- .../fixtures_esprima/blocks-expected.js | 16 ++++---- .../fixtures_esprima/comments-expected.js | 38 +++++++++--------- .../fixtures_esprima/deadcode-expected.js | 13 ++++++ external/builder/fixtures_esprima/deadcode.js | 25 ++++++++++++ .../fixtures_esprima/evals-expected.js | 4 +- .../builder/fixtures_esprima/ifs-expected.js | 10 ++--- external/builder/preprocessor2.js | 40 +++++++++++++------ 7 files changed, 100 insertions(+), 46 deletions(-) create mode 100644 external/builder/fixtures_esprima/deadcode-expected.js create mode 100644 external/builder/fixtures_esprima/deadcode.js diff --git a/external/builder/fixtures_esprima/blocks-expected.js b/external/builder/fixtures_esprima/blocks-expected.js index 22e7b7434..f45aff378 100644 --- a/external/builder/fixtures_esprima/blocks-expected.js +++ b/external/builder/fixtures_esprima/blocks-expected.js @@ -1,10 +1,10 @@ function test() { - "test"; - "1"; - "2"; - "3"; - if ("test") { - "5"; - } - "4"; + "test"; + "1"; + "2"; + "3"; + if ("test") { + "5"; + } + "4"; } diff --git a/external/builder/fixtures_esprima/comments-expected.js b/external/builder/fixtures_esprima/comments-expected.js index 270742445..f36ff416d 100644 --- a/external/builder/fixtures_esprima/comments-expected.js +++ b/external/builder/fixtures_esprima/comments-expected.js @@ -1,28 +1,28 @@ function f1() { - /* head */ - "1"; - /* mid */ - "2"; + /* head */ + "1"; + /* mid */ + "2"; } /* tail */ function f2() { - // head - "1"; - // mid - "2"; + // head + "1"; + // mid + "2"; } // tail function f2() { - if ("1") { - // begin block - "1"; + if ("1") { + // begin block + "1"; + } + "2"; + // trailing + if (/* s */ + "3") + /*e*/ + { + "4"; } - "2"; - // trailing - if (/* s */ - "3") - /*e*/ - { - "4"; - } } diff --git a/external/builder/fixtures_esprima/deadcode-expected.js b/external/builder/fixtures_esprima/deadcode-expected.js new file mode 100644 index 000000000..ea82c1623 --- /dev/null +++ b/external/builder/fixtures_esprima/deadcode-expected.js @@ -0,0 +1,13 @@ +function f1() { +} +function f2() { + return 1; +} +function f3() { + var i = 0; + throw "test"; +} +function f4() { + var i = 0; +} + diff --git a/external/builder/fixtures_esprima/deadcode.js b/external/builder/fixtures_esprima/deadcode.js new file mode 100644 index 000000000..60c9d0f07 --- /dev/null +++ b/external/builder/fixtures_esprima/deadcode.js @@ -0,0 +1,25 @@ +function f1() { + return; + var i = 0; +} + +function f2() { + return 1; + var i = 0; +} + +function f3() { + var i = 0; + throw "test"; + var j = 0; +} + +function f4() { + var i = 0; + if (true) { + return; + } + throw "test"; + var j = 0; +} + diff --git a/external/builder/fixtures_esprima/evals-expected.js b/external/builder/fixtures_esprima/evals-expected.js index 414de051c..48f1d1605 100644 --- a/external/builder/fixtures_esprima/evals-expected.js +++ b/external/builder/fixtures_esprima/evals-expected.js @@ -5,8 +5,8 @@ var d = false; var e = true; var f = 'text'; var g = { - "obj": { "i": 1 }, - "j": 2 + "obj": { "i": 1 }, + "j": 2 }; var h = { 'test': 'test' }; var i = '0'; diff --git a/external/builder/fixtures_esprima/ifs-expected.js b/external/builder/fixtures_esprima/ifs-expected.js index 12599c619..2e045e7fa 100644 --- a/external/builder/fixtures_esprima/ifs-expected.js +++ b/external/builder/fixtures_esprima/ifs-expected.js @@ -1,17 +1,17 @@ if ('test') { - "1"; + "1"; } { - "1"; + "1"; } { - "1"; + "1"; } ; { - "2"; + "2"; } ; if ('1') { - "1"; + "1"; } diff --git a/external/builder/preprocessor2.js b/external/builder/preprocessor2.js index ed05d2f55..82e15f293 100644 --- a/external/builder/preprocessor2.js +++ b/external/builder/preprocessor2.js @@ -169,22 +169,38 @@ function postprocessNode(ctx, node) { case 'BlockStatement': var subExpressionIndex = 0; while (subExpressionIndex < node.body.length) { - if (node.body[subExpressionIndex].type === 'EmptyStatement') { - // Removing empty statements from the blocks. - node.body.splice(subExpressionIndex, 1); - continue; - } - if (node.body[subExpressionIndex].type === 'BlockStatement') { - // Block statements inside a block are moved to the parent one. - var subChildren = node.body[subExpressionIndex].body; - Array.prototype.splice.apply(node.body, - [subExpressionIndex, 1].concat(subChildren)); - subExpressionIndex += subChildren.length; - continue; + switch (node.body[subExpressionIndex].type) { + case 'EmptyStatement': + // Removing empty statements from the blocks. + node.body.splice(subExpressionIndex, 1); + continue; + case 'BlockStatement': + // Block statements inside a block are moved to the parent one. + var subChildren = node.body[subExpressionIndex].body; + Array.prototype.splice.apply(node.body, + [subExpressionIndex, 1].concat(subChildren)); + subExpressionIndex += Math.max(subChildren.length - 1, 0); + continue; + case 'ReturnStatement': + case 'ThrowStatement': + // Removing dead code after return or throw. + node.body.splice(subExpressionIndex + 1, + node.body.length - subExpressionIndex - 1); + break; } subExpressionIndex++; } break; + case 'FunctionDeclaration': + case 'FunctionExpression': + var block = node.body; + if (block.body.length > 0 && + block.body[block.body.length - 1].type === 'ReturnStatement' && + !block.body[block.body.length - 1].argument) { + // Function body ends with return without arg -- removing it. + block.body.pop(); + } + break; } return node; } From 77b7b84d1ec7da6f7e0531056259ba320cd9291a Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Mon, 9 Jan 2017 19:13:36 -0600 Subject: [PATCH 2/2] Removes rest of 'no-else-return' comments. --- src/display/font_loader.js | 30 ++++++++--------- web/pdf_page_view.js | 66 +++++++++++++++++++------------------- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/src/display/font_loader.js b/src/display/font_loader.js index fdee72d35..316a8b6d2 100644 --- a/src/display/font_loader.js +++ b/src/display/font_loader.js @@ -360,25 +360,25 @@ var FontFaceObject = (function FontFaceObjectClosure() { } FontFaceObject.prototype = { createNativeFontFace: function FontFaceObject_createNativeFontFace() { - if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('MOZCENTRAL')) { - if (!this.data) { - return null; - } + if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('MOZCENTRAL')) { + throw new Error('Not implemented: createNativeFontFace'); + } - if (this.options.disableFontFace) { - this.disableFontFace = true; - return null; - } + if (!this.data) { + return null; + } - var nativeFontFace = new FontFace(this.loadedName, this.data, {}); + if (this.options.disableFontFace) { + this.disableFontFace = true; + return null; + } - if (this.options.fontRegistry) { - this.options.fontRegistry.registerFont(this); - } - return nativeFontFace; - } else { // eslint-disable-line no-else-return - throw new Error('Not implemented: createNativeFontFace'); + var nativeFontFace = new FontFace(this.loadedName, this.data, {}); + + if (this.options.fontRegistry) { + this.options.fontRegistry.registerFont(this); } + return nativeFontFace; }, createFontFaceRule: function FontFaceObject_createFontFaceRule() { diff --git a/web/pdf_page_view.js b/web/pdf_page_view.js index 3dbd4815f..45b79754f 100644 --- a/web/pdf_page_view.js +++ b/web/pdf_page_view.js @@ -624,43 +624,43 @@ var PDFPageView = (function PDFPageViewClosure() { onRenderContinue: function (cont) { }, cancel: function () { }, }; - } else { // eslint-disable-line no-else-return - var cancelled = false; - var ensureNotCancelled = function () { - if (cancelled) { - throw 'cancelled'; - } - }; + } + + var cancelled = false; + var ensureNotCancelled = function () { + if (cancelled) { + throw 'cancelled'; + } + }; - var self = this; - var pdfPage = this.pdfPage; - var SVGGraphics = pdfjsLib.SVGGraphics; - var actualSizeViewport = this.viewport.clone({scale: CSS_UNITS}); - var promise = pdfPage.getOperatorList().then(function (opList) { + var self = this; + var pdfPage = this.pdfPage; + var SVGGraphics = pdfjsLib.SVGGraphics; + var actualSizeViewport = this.viewport.clone({scale: CSS_UNITS}); + var promise = pdfPage.getOperatorList().then(function (opList) { + ensureNotCancelled(); + var svgGfx = new SVGGraphics(pdfPage.commonObjs, pdfPage.objs); + return svgGfx.getSVG(opList, actualSizeViewport).then(function (svg) { ensureNotCancelled(); - var svgGfx = new SVGGraphics(pdfPage.commonObjs, pdfPage.objs); - return svgGfx.getSVG(opList, actualSizeViewport).then(function (svg) { - ensureNotCancelled(); - self.svg = svg; - self.paintedViewport = actualSizeViewport; - - svg.style.width = wrapper.style.width; - svg.style.height = wrapper.style.height; - self.renderingState = RenderingStates.FINISHED; - wrapper.appendChild(svg); - }); + self.svg = svg; + self.paintedViewport = actualSizeViewport; + + svg.style.width = wrapper.style.width; + svg.style.height = wrapper.style.height; + self.renderingState = RenderingStates.FINISHED; + wrapper.appendChild(svg); }); + }); - return { - promise: promise, - onRenderContinue: function (cont) { - cont(); - }, - cancel: function () { - cancelled = true; - } - }; - } + return { + promise: promise, + onRenderContinue: function (cont) { + cont(); + }, + cancel: function () { + cancelled = true; + } + }; }, /**