More variants of import added (#1738)

- `import * from "x.js"`
- `import * as Name from "x.js"`
This commit is contained in:
Ondřej Španěl
2017-03-31 11:52:56 +02:00
committed by Alex Lam S.L
parent a729c43e87
commit 2f93058c6e
3 changed files with 51 additions and 40 deletions

View File

@@ -1242,17 +1242,21 @@ function OutputStream(options) {
output.space(); output.space();
} }
if (self.imported_names) { if (self.imported_names) {
output.print("{"); if (self.imported_names.length === 1 && self.imported_names[0].foreign_name.name === "*") {
self.imported_names.forEach(function(name_import, i) { self.imported_names[0].print(output);
output.space(); } else {
name_import.print(output); output.print("{");
if (i < self.imported_names.length - 1) { self.imported_names.forEach(function (name_import, i) {
output.print(",");
output.space(); output.space();
} name_import.print(output);
}); if (i < self.imported_names.length - 1) {
output.space(); output.print(",");
output.print("}"); output.space();
}
});
output.space();
output.print("}");
}
} }
if (self.imported_name || self.imported_names) { if (self.imported_name || self.imported_names) {
output.space(); output.space();

View File

@@ -2176,17 +2176,7 @@ function parse($TEXT, options) {
next(); next();
} }
if (is("punc", "{")) { imported_names = import_names(true);
next();
imported_names = [];
while (!is("punc", "}")) {
imported_names.push(import_name());
if (is("punc", ",")) {
next();
}
}
next();
}
if (imported_names || imported_name) { if (imported_names || imported_name) {
expect_token("name", "from"); expect_token("name", "from");
@@ -2237,16 +2227,14 @@ function parse($TEXT, options) {
}) })
} }
function import_nameAsterisk() { function import_nameAsterisk(name) {
var start = S.token; var start = S.token;
var foreign_name; var foreign_name;
var name;
next();
var end = prev(); var end = prev();
name = new AST_SymbolImport({ name = name || new AST_SymbolImport({
name: '*', name: '*',
start: start, start: start,
end: end, end: end,
@@ -2266,6 +2254,30 @@ function parse($TEXT, options) {
}) })
} }
function import_names(allow_as) {
var names;
if (is("punc", "{")) {
next();
names = [];
while (!is("punc", "}")) {
names.push(import_name());
if (is("punc", ",")) {
next();
}
}
next();
} else if (is("operator", "*")) {
var name;
next();
if (allow_as && is("name", "as")) {
next(); // The "as" word
name = as_symbol(AST_SymbolImportForeign);
}
names = [import_nameAsterisk(name)];
}
return names;
}
function export_() { function export_() {
var start = S.token; var start = S.token;
var is_default; var is_default;
@@ -2278,20 +2290,7 @@ function parse($TEXT, options) {
next(); next();
} }
if (is("punc", "{")) { exported_names = import_names(false);
next();
exported_names = [];
while (!is("punc", "}")) {
exported_names.push(import_name());
if (is("punc", ",")) {
next();
}
}
next();
} else if (is("operator", "*")) {
var st = prev();
exported_names = [import_nameAsterisk()];
}
if (exported_names) { if (exported_names) {
if (is("name", "from")) { if (is("name", "from")) {

View File

@@ -184,7 +184,15 @@ import_statement: {
import Bar, { Foo } from 'lel'; import Bar, { Foo } from 'lel';
import { Bar as kex, Baz as food } from 'lel'; import { Bar as kex, Baz as food } from 'lel';
} }
expect_exact: "import\"mod-name\";import Foo from\"bar\";import{Bar,Baz}from\"lel\";import Bar,{Foo}from\"lel\";import{Bar as kex,Baz as food}from\"lel\";" expect_exact: 'import"mod-name";import Foo from"bar";import{Bar,Baz}from"lel";import Bar,{Foo}from"lel";import{Bar as kex,Baz as food}from"lel";'
}
import_all_statement: {
input: {
import * from 'lel';
import * as Lel from 'lel';
}
expect_exact: 'import*from"lel";import*as Lel from"lel";'
} }
export_statement: { export_statement: {