in benchmark/old.js [1902:2008]
function generateImportDeclaration(stmt, semicolon) {
var result, cursor;
// If no ImportClause is present,
// this should be `import ModuleSpecifier` so skip `from`
// ModuleSpecifier is StringLiteral.
if (stmt.specifiers.length === 0) {
// import ModuleSpecifier ;
return [
'import',
space,
// ModuleSpecifier
generateExpression(stmt.source, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
}),
semicolon
];
}
// import ImportClause FromClause ;
result = [
'import'
];
cursor = 0;
// ImportedBinding
if (stmt.specifiers[cursor].type === Syntax.ImportDefaultSpecifier) {
result = join(result, [
generateExpression(stmt.specifiers[cursor], {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
})
]);
++cursor;
}
if (stmt.specifiers[cursor]) {
if (cursor !== 0) {
result.push(',');
}
if (stmt.specifiers[cursor].type === Syntax.ImportNamespaceSpecifier) {
// NameSpaceImport
result = join(result, [
space,
generateExpression(stmt.specifiers[cursor], {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
})
]);
} else {
// NamedImports
result.push(space + '{');
if ((stmt.specifiers.length - cursor) === 1) {
// import { ... } from "...";
result.push(space);
result.push(generateExpression(stmt.specifiers[cursor], {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
}));
result.push(space + '}' + space);
} else {
// import {
// ...,
// ...,
// } from "...";
withIndent(function (indent) {
var i, iz;
result.push(newline);
for (i = cursor, iz = stmt.specifiers.length; i < iz; ++i) {
result.push(indent);
result.push(generateExpression(stmt.specifiers[i], {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
}));
if (i + 1 < iz) {
result.push(',' + newline);
}
}
});
if (!endsWithLineTerminator(toSourceNodeWhenNeeded(result).toString())) {
result.push(newline);
}
result.push(base + '}' + space);
}
}
}
result = join(result, [
'from' + space,
// ModuleSpecifier
generateExpression(stmt.source, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
}),
semicolon
]);
return result;
}