From 0feebd44b38edd67af960c24cd9f341fcbc100d9 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Mon, 13 Apr 2015 21:32:27 -0700 Subject: [PATCH] publish exported postfix operators as 'E("", ++x) - 1' and 'E("", --x) + 1' --- src/compiler/emitter.ts | 24 ++++++++++++------- tests/baselines/reference/systemModule8.js | 12 ++++++---- tests/baselines/reference/systemModule8.types | 12 ++++++++++ tests/cases/compiler/systemModule8.ts | 2 ++ 4 files changed, 37 insertions(+), 13 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 98074d26493..941bc973837 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1963,18 +1963,24 @@ var __param = this.__param || function(index, decorator) { return function (targ function emitPostfixUnaryExpression(node: PostfixUnaryExpression) { const exportChanged = isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node.operand); if (exportChanged) { - write(`${exportFunctionForFile}("`); + // emit 'x++' as '(export('x', ++x) - 1)' and 'x--' as '(export('x', --x) + 1)' + write(`(${exportFunctionForFile}("`); emitNodeWithoutSourceMap(node.operand); write(`", `); + + write(tokenToString(node.operator)); + emit(node.operand); + + if (node.operator === SyntaxKind.PlusPlusToken) { + write(") - 1)"); + } + else { + write(") + 1)"); + } } - - emit(node.operand); - write(tokenToString(node.operator)); - - if (exportChanged) { - write("), "); - emitNodeWithoutSourceMap(node.operand); - write(node.operator === SyntaxKind.PlusPlusToken ? " - 1" : " + 1"); + else { + emit(node.operand); + write(tokenToString(node.operator)); } } diff --git a/tests/baselines/reference/systemModule8.js b/tests/baselines/reference/systemModule8.js index 45b25d8f98d..e4c0e12aae3 100644 --- a/tests/baselines/reference/systemModule8.js +++ b/tests/baselines/reference/systemModule8.js @@ -14,6 +14,8 @@ x |= 1; x &= 1; for (x = 5;;x++) {} for (x = 8;;x--) {} +for (x = 15;;++x) {} +for (x = 18;;--x) {} for (let x = 50;;) {} function foo() { @@ -35,8 +37,8 @@ System.register([], function(exports_1) { execute: function() { exports_1("x", x); exports_1("x", x = 1); - exports_1("x", x++), x - 1; - exports_1("x", x--), x + 1; + (exports_1("x", ++x) - 1); + (exports_1("x", --x) + 1); exports_1("x", ++x); exports_1("x", --x); exports_1("x", x += 1); @@ -45,8 +47,10 @@ System.register([], function(exports_1) { exports_1("x", x /= 1); exports_1("x", x |= 1); exports_1("x", x &= 1); - for (exports_1("x", x = 5);; exports_1("x", x++), x - 1) { } - for (exports_1("x", x = 8);; exports_1("x", x--), x + 1) { } + for (exports_1("x", x = 5);; (exports_1("x", ++x) - 1)) { } + for (exports_1("x", x = 8);; (exports_1("x", --x) + 1)) { } + for (exports_1("x", x = 15);; exports_1("x", ++x)) { } + for (exports_1("x", x = 18);; exports_1("x", --x)) { } for (x_1 = 50;;) { } exports_1("y", y = ([1])[0]); _a = { a: true, b: { c: "123" } }, exports_1("z0", z0 = _a.a), exports_1("z1", z1 = _a.b.c); diff --git a/tests/baselines/reference/systemModule8.types b/tests/baselines/reference/systemModule8.types index 3bbc09b2721..cd192662078 100644 --- a/tests/baselines/reference/systemModule8.types +++ b/tests/baselines/reference/systemModule8.types @@ -59,6 +59,18 @@ for (x = 8;;x--) {} >x-- : number >x : any +for (x = 15;;++x) {} +>x = 15 : number +>x : any +>++x : number +>x : any + +for (x = 18;;--x) {} +>x = 18 : number +>x : any +>--x : number +>x : any + for (let x = 50;;) {} >x : number diff --git a/tests/cases/compiler/systemModule8.ts b/tests/cases/compiler/systemModule8.ts index 2185b1c0500..fb75c43df56 100644 --- a/tests/cases/compiler/systemModule8.ts +++ b/tests/cases/compiler/systemModule8.ts @@ -14,6 +14,8 @@ x |= 1; x &= 1; for (x = 5;;x++) {} for (x = 8;;x--) {} +for (x = 15;;++x) {} +for (x = 18;;--x) {} for (let x = 50;;) {} function foo() {