From 8ebe08105d62f62095bef24ec83a2d363e4f19d6 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Sun, 27 Mar 2016 19:52:24 -0700 Subject: [PATCH] fix emit for unary operators on exported variables in system modules --- src/compiler/transformers/module/system.ts | 5 ++++- .../prefixUnaryOperatorsOnExportedVariables.js | 8 ++++---- tests/baselines/reference/systemModule10.js | 2 +- tests/baselines/reference/systemModule10_ES5.js | 2 +- tests/baselines/reference/systemModule17.js | 4 ++-- tests/baselines/reference/systemModule8.js | 16 ++++++++-------- 6 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/compiler/transformers/module/system.ts b/src/compiler/transformers/module/system.ts index cc35ec22bf1..704802f1781 100644 --- a/src/compiler/transformers/module/system.ts +++ b/src/compiler/transformers/module/system.ts @@ -1092,13 +1092,16 @@ namespace ts { if (substitute) { const exportDeclaration = resolver.getReferencedExportContainer(operand); if (exportDeclaration) { - const expr = createPostfix(operand, node.operator, node); + const expr = createPrefix(node.operator, operand, node); setNodeEmitFlags(expr, NodeEmitFlags.NoSubstitution); const call = createExportExpression(operand, expr); if (node.kind === SyntaxKind.PrefixUnaryExpression) { return call; } else { + // export function returns the value that was passes as the second argument + // however for postfix unary expressions result value should be the value before modification. + // emit 'x++' as '(export('x', ++x) - 1)' and 'x--' as '(export('x', --x) + 1)' return operator === SyntaxKind.PlusPlusToken ? createSubtract(call, createLiteral(1)) : createAdd(call, createLiteral(1)); diff --git a/tests/baselines/reference/prefixUnaryOperatorsOnExportedVariables.js b/tests/baselines/reference/prefixUnaryOperatorsOnExportedVariables.js index cf88f4e9ba6..d51c2624b1c 100644 --- a/tests/baselines/reference/prefixUnaryOperatorsOnExportedVariables.js +++ b/tests/baselines/reference/prefixUnaryOperatorsOnExportedVariables.js @@ -31,13 +31,13 @@ if (++y) { } //// [prefixUnaryOperatorsOnExportedVariables.js] -System.register([], function(exports_1, context_1) { +System.register([], function (exports_1, context_1) { "use strict"; var __moduleName = context_1 && context_1.id; var x, y; return { - setters:[], - execute: function() { + setters: [], + execute: function () { exports_1("x", x = false); exports_1("y", y = 1); if (!x) { @@ -55,5 +55,5 @@ System.register([], function(exports_1, context_1) { if (exports_1("y", ++y)) { } } - } + }; }); diff --git a/tests/baselines/reference/systemModule10.js b/tests/baselines/reference/systemModule10.js index 356cbff33d9..10afa784ebb 100644 --- a/tests/baselines/reference/systemModule10.js +++ b/tests/baselines/reference/systemModule10.js @@ -10,7 +10,7 @@ export {n2} export {n2 as n3} //// [systemModule10.js] -System.register(['file1', 'file2'], function (exports_1, context_1) { +System.register(["file1", "file2"], function (exports_1, context_1) { "use strict"; var __moduleName = context_1 && context_1.id; var file1_1, n2; diff --git a/tests/baselines/reference/systemModule10_ES5.js b/tests/baselines/reference/systemModule10_ES5.js index 068613968af..830c611bd38 100644 --- a/tests/baselines/reference/systemModule10_ES5.js +++ b/tests/baselines/reference/systemModule10_ES5.js @@ -10,7 +10,7 @@ export {n2} export {n2 as n3} //// [systemModule10_ES5.js] -System.register(['file1', 'file2'], function (exports_1, context_1) { +System.register(["file1", "file2"], function (exports_1, context_1) { "use strict"; var __moduleName = context_1 && context_1.id; var file1_1, n2; diff --git a/tests/baselines/reference/systemModule17.js b/tests/baselines/reference/systemModule17.js index 7d85732a6f0..df3d722f3d2 100644 --- a/tests/baselines/reference/systemModule17.js +++ b/tests/baselines/reference/systemModule17.js @@ -65,8 +65,8 @@ System.register(["f1"], function (exports_1, context_1) { var x, N, IX, f1_1; return { setters: [ - function (_1) { - f1_1 = _1; + function (f1_1_1) { + f1_1 = f1_1_1; } ], execute: function () { diff --git a/tests/baselines/reference/systemModule8.js b/tests/baselines/reference/systemModule8.js index ac0ce69bdd1..a17dc41c5a4 100644 --- a/tests/baselines/reference/systemModule8.js +++ b/tests/baselines/reference/systemModule8.js @@ -42,10 +42,10 @@ System.register([], function (exports_1, context_1) { setters: [], execute: function () { exports_1("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; + exports_1("x", --x) + 1; + exports_1("x", ++x); + exports_1("x", --x); exports_1("x", x += 1); exports_1("x", x -= 1); exports_1("x", x *= 1); @@ -56,10 +56,10 @@ System.register([], function (exports_1, context_1) { x - 1; x & 1; 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 (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 = 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);