Emit export function declaration in es6 format

Conflicts:
	src/compiler/emitter.ts
This commit is contained in:
Mohamed Hegazy 2015-03-12 10:11:37 -07:00
parent 58d19595f0
commit b091fa57ef
4 changed files with 167 additions and 1 deletions

View file

@ -4344,6 +4344,9 @@ module ts {
// For targeting below es6, emit functions-like declaration including arrow function using function keyword.
// When targeting ES6, emit arrow function natively in ES6 by omitting function keyword and using fat arrow instead
if (!shouldEmitAsArrowFunction(node)) {
if (isES6ModuleMemberDeclaration(node)) {
write("export ");
}
write("function ");
}
@ -4420,7 +4423,7 @@ module ts {
emitExpressionFunctionBody(node, <Expression>node.body);
}
if (node.flags & NodeFlags.Export && !(node.flags & NodeFlags.Default)) {
if (node.flags & NodeFlags.Export && !(node.flags & NodeFlags.Default) && !isES6ModuleMemberDeclaration(node)) {
writeLine();
emitStart(node);
emitModuleMemberName(node);

View file

@ -0,0 +1,63 @@
//// [es6ModuleFunctionDeclaration.ts]
export function foo() {
}
function foo2() {
}
foo();
foo2();
export module m1 {
export function foo3() {
}
function foo4() {
}
foo();
foo2();
foo3();
foo4();
}
module m2 {
export function foo3() {
}
function foo4() {
}
foo();
foo2();
foo3();
foo4();
m1.foo3();
}
//// [es6ModuleFunctionDeclaration.js]
export function foo() {
}
function foo2() {
}
foo();
foo2();
var m1;
(function (m1) {
function foo3() {
}
m1.foo3 = foo3;
function foo4() {
}
foo();
foo2();
foo3();
foo4();
})(m1 || (m1 = {}));
export { m1 };
var m2;
(function (m2) {
function foo3() {
}
m2.foo3 = foo3;
function foo4() {
}
foo();
foo2();
foo3();
foo4();
m1.foo3();
})(m2 || (m2 = {}));

View file

@ -0,0 +1,71 @@
=== tests/cases/compiler/es6ModuleFunctionDeclaration.ts ===
export function foo() {
>foo : () => void
}
function foo2() {
>foo2 : () => void
}
foo();
>foo() : void
>foo : () => void
foo2();
>foo2() : void
>foo2 : () => void
export module m1 {
>m1 : typeof m1
export function foo3() {
>foo3 : () => void
}
function foo4() {
>foo4 : () => void
}
foo();
>foo() : void
>foo : () => void
foo2();
>foo2() : void
>foo2 : () => void
foo3();
>foo3() : void
>foo3 : () => void
foo4();
>foo4() : void
>foo4 : () => void
}
module m2 {
>m2 : typeof m2
export function foo3() {
>foo3 : () => void
}
function foo4() {
>foo4 : () => void
}
foo();
>foo() : void
>foo : () => void
foo2();
>foo2() : void
>foo2 : () => void
foo3();
>foo3() : void
>foo3 : () => void
foo4();
>foo4() : void
>foo4 : () => void
m1.foo3();
>m1.foo3() : void
>m1.foo3 : () => void
>m1 : typeof m1
>foo3 : () => void
}

View file

@ -0,0 +1,29 @@
// @target: ES6
export function foo() {
}
function foo2() {
}
foo();
foo2();
export module m1 {
export function foo3() {
}
function foo4() {
}
foo();
foo2();
foo3();
foo4();
}
module m2 {
export function foo3() {
}
function foo4() {
}
foo();
foo2();
foo3();
foo4();
m1.foo3();
}