Skip to content

Commit 09e3cd6

Browse files
Merge pull request #2104 from Microsoft/arrowFunctionEmit
Emit arrow functions with expression bodies 'as is' when targetting ES6 ...
2 parents e26de71 + 91eedcd commit 09e3cd6

12 files changed

+44
-33
lines changed

src/compiler/emitter.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3934,6 +3934,17 @@ module ts {
39343934
}
39353935

39363936
function emitExpressionFunctionBody(node: FunctionLikeDeclaration, body: Expression) {
3937+
if (languageVersion < ScriptTarget.ES6) {
3938+
emitDownLevelExpressionFunctionBody(node, body);
3939+
return;
3940+
}
3941+
3942+
// For es6 and higher we can emit the expression as is.
3943+
write(" ");
3944+
emit(body);
3945+
}
3946+
3947+
function emitDownLevelExpressionFunctionBody(node: FunctionLikeDeclaration, body: Expression) {
39373948
write(" {");
39383949
scopeEmitStart(node);
39393950

tests/baselines/reference/computedPropertyNamesContextualType1_ES6.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ var o: I = {
1212
//// [computedPropertyNamesContextualType1_ES6.js]
1313
var o = {
1414
["" + 0](y) { return y.length; },
15-
["" + 1]: y => { return y.length; }
15+
["" + 1]: y => y.length
1616
};

tests/baselines/reference/computedPropertyNamesContextualType2_ES6.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ var o: I = {
1212
//// [computedPropertyNamesContextualType2_ES6.js]
1313
var o = {
1414
[+"foo"](y) { return y.length; },
15-
[+"bar"]: y => { return y.length; }
15+
[+"bar"]: y => y.length
1616
};

tests/baselines/reference/computedPropertyNamesContextualType3_ES6.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ var o: I = {
1111
//// [computedPropertyNamesContextualType3_ES6.js]
1212
var o = {
1313
[+"foo"](y) { return y.length; },
14-
[+"bar"]: y => { return y.length; }
14+
[+"bar"]: y => y.length
1515
};

tests/baselines/reference/emitArrowFunctionES6.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@ var f2 = (x, y) => { };
1414
var f3 = (x, y, ...rest) => { };
1515
var f4 = (x, y, z = 10) => { };
1616
function foo(func) { }
17-
foo(() => { return true; });
17+
foo(() => true);
1818
foo(() => { return false; });

tests/baselines/reference/parenthesizedContexualTyping3.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ var h = tempFun `${ (x => x) } ${ (((x => x))) } ${ undefined }`
2525
function tempFun(tempStrs, g, x) {
2626
return g(x);
2727
}
28-
var a = tempFun `${x => { return x; }} ${10}`;
29-
var b = tempFun `${(x => { return x; })} ${10}`;
30-
var c = tempFun `${((x => { return x; }))} ${10}`;
31-
var d = tempFun `${x => { return x; }} ${x => { return x; }} ${10}`;
32-
var e = tempFun `${x => { return x; }} ${(x => { return x; })} ${10}`;
33-
var f = tempFun `${x => { return x; }} ${((x => { return x; }))} ${10}`;
34-
var g = tempFun `${(x => { return x; })} ${(((x => { return x; })))} ${10}`;
35-
var h = tempFun `${(x => { return x; })} ${(((x => { return x; })))} ${undefined}`;
28+
var a = tempFun `${x => x} ${10}`;
29+
var b = tempFun `${(x => x)} ${10}`;
30+
var c = tempFun `${((x => x))} ${10}`;
31+
var d = tempFun `${x => x} ${x => x} ${10}`;
32+
var e = tempFun `${x => x} ${(x => x)} ${10}`;
33+
var f = tempFun `${x => x} ${((x => x))} ${10}`;
34+
var g = tempFun `${(x => x)} ${(((x => x)))} ${10}`;
35+
var h = tempFun `${(x => x)} ${(((x => x)))} ${undefined}`;

tests/baselines/reference/symbolProperty20.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ var i: I = {
1111

1212
//// [symbolProperty20.js]
1313
var i = {
14-
[Symbol.iterator]: s => { return s; },
14+
[Symbol.iterator]: s => s,
1515
[Symbol.toStringTag](n) { return n; }
1616
};

tests/baselines/reference/symbolProperty22.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ declare function foo<T, U>(p1: T, p2: I<T, U>): U;
88
foo("", { [Symbol.unscopables]: s => s.length });
99

1010
//// [symbolProperty22.js]
11-
foo("", { [Symbol.unscopables]: s => { return s.length; } });
11+
foo("", { [Symbol.unscopables]: s => s.length });

tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.js

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -106,34 +106,34 @@ function someGenerics1b(n, m) { }
106106
someGenerics1b `${3}`;
107107
// Generic tag with argument of function type whose parameter is of type parameter type
108108
function someGenerics2a(strs, n) { }
109-
someGenerics2a `${(n) => { return n; }}`;
109+
someGenerics2a `${(n) => n}`;
110110
function someGenerics2b(strs, n) { }
111-
someGenerics2b `${(n, x) => { return n; }}`;
111+
someGenerics2b `${(n, x) => n}`;
112112
// Generic tag with argument of function type whose parameter is not of type parameter type but body/return type uses type parameter
113113
function someGenerics3(strs, producer) { }
114-
someGenerics3 `${() => { return ''; }}`;
115-
someGenerics3 `${() => { return undefined; }}`;
116-
someGenerics3 `${() => { return 3; }}`;
114+
someGenerics3 `${() => ''}`;
115+
someGenerics3 `${() => undefined}`;
116+
someGenerics3 `${() => 3}`;
117117
// 2 parameter generic tag with argument 1 of type parameter type and argument 2 of function type whose parameter is of type parameter type
118118
function someGenerics4(strs, n, f) { }
119-
someGenerics4 `${4}${() => { return null; }}`;
120-
someGenerics4 `${''}${() => { return 3; }}`;
119+
someGenerics4 `${4}${() => null}`;
120+
someGenerics4 `${''}${() => 3}`;
121121
someGenerics4 `${null}${null}`;
122122
// 2 parameter generic tag with argument 2 of type parameter type and argument 1 of function type whose parameter is of type parameter type
123123
function someGenerics5(strs, n, f) { }
124-
someGenerics5 `${4} ${() => { return null; }}`;
125-
someGenerics5 `${''}${() => { return 3; }}`;
124+
someGenerics5 `${4} ${() => null}`;
125+
someGenerics5 `${''}${() => 3}`;
126126
someGenerics5 `${null}${null}`;
127127
// Generic tag with multiple arguments of function types that each have parameters of the same generic type
128128
function someGenerics6(strs, a, b, c) { }
129-
someGenerics6 `${n => { return n; }}${n => { return n; }}${n => { return n; }}`;
130-
someGenerics6 `${n => { return n; }}${n => { return n; }}${n => { return n; }}`;
131-
someGenerics6 `${(n) => { return n; }}${(n) => { return n; }}${(n) => { return n; }}`;
129+
someGenerics6 `${n => n}${n => n}${n => n}`;
130+
someGenerics6 `${n => n}${n => n}${n => n}`;
131+
someGenerics6 `${(n) => n}${(n) => n}${(n) => n}`;
132132
// Generic tag with multiple arguments of function types that each have parameters of different generic type
133133
function someGenerics7(strs, a, b, c) { }
134-
someGenerics7 `${n => { return n; }}${n => { return n; }}${n => { return n; }}`;
135-
someGenerics7 `${n => { return n; }}${n => { return n; }}${n => { return n; }}`;
136-
someGenerics7 `${(n) => { return n; }}${(n) => { return n; }}${(n) => { return n; }}`;
134+
someGenerics7 `${n => n}${n => n}${n => n}`;
135+
someGenerics7 `${n => n}${n => n}${n => n}`;
136+
someGenerics7 `${(n) => n}${(n) => n}${(n) => n}`;
137137
// Generic tag with argument of generic function type
138138
function someGenerics8(strs, n) { return n; }
139139
var x = someGenerics8 `${someGenerics7}`;

tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3_ES6.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,5 +109,5 @@ fn4 `${null}${null}`; // Error
109109
fn4 `${true}${null}`;
110110
fn4 `${null}${true}`;
111111
function fn5() { return undefined; }
112-
fn5 `${(n) => { return n.toFixed(); }}`; // will error; 'n' should have type 'string'.
113-
fn5 `${(n) => { return n.substr(0); }}`;
112+
fn5 `${(n) => n.toFixed()}`; // will error; 'n' should have type 'string'.
113+
fn5 `${(n) => n.substr(0)}`;

0 commit comments

Comments
 (0)