Skip to content

Commit 3abb271

Browse files
committed
Update export declarations to meet the latest estree spec
harmony.js's dropped tests are already covered by the compare-esprima2 tests. Close estools#278
1 parent 77fe8bb commit 3abb271

19 files changed

Lines changed: 5781 additions & 5932 deletions

escodegen.js

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1201,30 +1201,33 @@
12011201
return ';';
12021202
},
12031203

1204-
ExportDeclaration: function (stmt, flags) {
1205-
var result = [ 'export' ], bodyFlags, that = this;
1204+
ExportDefaultDeclaration: function (stmt, flags) {
1205+
var result = [ 'export' ], bodyFlags;
12061206

12071207
bodyFlags = (flags & F_SEMICOLON_OPT) ? S_TFFT : S_TFFF;
12081208

12091209
// export default HoistableDeclaration[Default]
12101210
// export default AssignmentExpression[In] ;
1211-
if (stmt['default']) {
1212-
result = join(result, 'default');
1213-
if (isStatement(stmt.declaration)) {
1214-
result = join(result, this.generateStatement(stmt.declaration, bodyFlags));
1215-
} else {
1216-
result = join(result, this.generateExpression(stmt.declaration, Precedence.Assignment, E_TTT) + this.semicolon(flags));
1217-
}
1218-
return result;
1211+
result = join(result, 'default');
1212+
if (isStatement(stmt.declaration)) {
1213+
result = join(result, this.generateStatement(stmt.declaration, bodyFlags));
1214+
} else {
1215+
result = join(result, this.generateExpression(stmt.declaration, Precedence.Assignment, E_TTT) + this.semicolon(flags));
12191216
}
1217+
return result;
1218+
},
1219+
1220+
ExportNamedDeclaration: function (stmt, flags) {
1221+
var result = [ 'export' ], bodyFlags, that = this;
1222+
1223+
bodyFlags = (flags & F_SEMICOLON_OPT) ? S_TFFT : S_TFFF;
12201224

12211225
// export VariableStatement
12221226
// export Declaration[Default]
12231227
if (stmt.declaration) {
12241228
return join(result, this.generateStatement(stmt.declaration, bodyFlags));
12251229
}
12261230

1227-
// export * FromClause ;
12281231
// export ExportClause[NoReference] FromClause ;
12291232
// export ExportClause ;
12301233
if (stmt.specifiers) {
@@ -1265,13 +1268,16 @@
12651268
return result;
12661269
},
12671270

1268-
ExportDefaultDeclaration: function (stmt, flags) {
1269-
stmt.default = true;
1270-
return this.ExportDeclaration(stmt, flags);
1271-
},
1272-
1273-
ExportNamedDeclaration: function (stmt, flags) {
1274-
return this.ExportDeclaration(stmt, flags);
1271+
ExportAllDeclaration: function (stmt, flags) {
1272+
// export * FromClause ;
1273+
return [
1274+
'export' + space,
1275+
'*' + space,
1276+
'from' + space,
1277+
// ModuleSpecifier
1278+
this.generateExpression(stmt.source, Precedence.Sequence, E_TTT),
1279+
this.semicolon(flags)
1280+
];
12751281
},
12761282

12771283
ExpressionStatement: function (stmt, flags) {
@@ -1729,7 +1735,7 @@
17291735
generateAsyncPrefix(stmt, true),
17301736
'function',
17311737
generateStarSuffix(stmt) || noEmptySpace(),
1732-
generateIdentifier(stmt.id),
1738+
stmt.id ? generateIdentifier(stmt.id) : '',
17331739
this.generateFunctionBody(stmt)
17341740
];
17351741
},
@@ -2038,10 +2044,6 @@
20382044
return result;
20392045
},
20402046

2041-
ExportBatchSpecifier: function (expr, precedence, flags) {
2042-
return '*';
2043-
},
2044-
20452047
ArrayPattern: function (expr, precedence, flags) {
20462048
return this.ArrayExpression(expr, precedence, flags, true);
20472049
},
@@ -2267,15 +2269,21 @@
22672269
},
22682270

22692271
ImportSpecifier: function (expr, precedence, flags) {
2270-
return this.ExportSpecifier(expr, precedence, flags);
2272+
var imported = expr.imported;
2273+
var result = [ imported.name ];
2274+
var local = expr.local;
2275+
if (local && local.name !== imported.name) {
2276+
result.push(noEmptySpace() + 'as' + noEmptySpace() + generateIdentifier(local));
2277+
}
2278+
return result;
22712279
},
22722280

22732281
ExportSpecifier: function (expr, precedence, flags) {
2274-
var name = (expr.id || expr.imported || expr.exported).name;
2275-
var result = [ name ];
2276-
var id = expr.name || expr.local;
2277-
if (id && id.name !== name) {
2278-
result.push(noEmptySpace() + 'as' + noEmptySpace() + generateIdentifier(id));
2282+
var local = expr.local;
2283+
var result = [ local.name ];
2284+
var exported = expr.exported;
2285+
if (exported && exported.name !== local.name) {
2286+
result.push(noEmptySpace() + 'as' + noEmptySpace() + generateIdentifier(exported));
22792287
}
22802288
return result;
22812289
},

test/3rdparty/esprima-2.5.0.js

Lines changed: 0 additions & 5658 deletions
This file was deleted.

test/3rdparty/esprima-2.7.1.js

Lines changed: 5741 additions & 0 deletions
Large diffs are not rendered by default.

test/compare-acorn-es6/exports.expected.min.js

Lines changed: 0 additions & 1 deletion
This file was deleted.

test/compare-esprima2.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
'use strict';
2626

2727
var fs = require('fs'),
28-
esprima = require('./3rdparty/esprima-2.5.0'),
28+
esprima = require('./3rdparty/esprima-2.7.1'),
2929
escodegen = require('./loader'),
3030
chai = require('chai'),
3131
expect = chai.expect,

test/compare-acorn-es6/exports.expected.js renamed to test/compare-esprima2/exports.expected.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ export {
1111
c as d
1212
};
1313
export { };
14-
export default i = 20;
1514
export function test() {
1615
}
1716
export var i = 20;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export*from'OK';export{name}from'OK';export{a as b,c as d}from'hello';export{a as b,c as d};export{};export function test(){}export var i=20;export let i=42
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ export { name } from "OK"
33
export { a as b, c as d } from "hello"
44
export { a as b, c as d }
55
export { }
6-
export default i = 20
76
export function test() { }
87
export var i = 20
98
export let i = 42
File renamed without changes.

0 commit comments

Comments
 (0)