Tests for export * as ns from 'foo' syntax (#1498)

This commit is contained in:
Valerie Young 2018-06-28 15:46:36 -04:00 committed by Leo Balter
parent 358e5e8a0c
commit 2fa8fc40e4
36 changed files with 369 additions and 47 deletions

View File

@ -97,6 +97,10 @@ Intl.RelativeTimeFormat
# https://github.com/tc39/proposal-global # https://github.com/tc39/proposal-global
global global
# `export * as namespace from module` consensus PR
# https://github.com/tc39/ecma262/pull/1174
export-star-as-namespace-from-module
# Standard language features # Standard language features
# #
# Language features that have been included in a published version of the # Language features that have been included in a published version of the

View File

@ -0,0 +1,18 @@
// Copyright (C) 2018 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-module-semantics-static-semantics-early-errors
description: >
It is a Syntax Error if the ExportedNames of ModuleItemList contains any
duplicate entries.
flags: [module, export-star-as-namespace-from-module]
negative:
phase: parse
type: SyntaxError
---*/
throw "Test262: This statement should not be evaluated.";
var x;
export { x as z };
export * as z from "early-dup-export-as-star-as.js";

View File

@ -1,6 +1,7 @@
// Copyright (C) 2015 the V8 project authors. All rights reserved. // Copyright (C) 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
esid: sec-module-semantics-static-semantics-early-errors
es6id: 15.2.1.1 es6id: 15.2.1.1
description: > description: >
It is a Syntax Error if the ExportedNames of ModuleItemList contains any It is a Syntax Error if the ExportedNames of ModuleItemList contains any

View File

@ -0,0 +1,18 @@
// Copyright (C) 2018 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-module-semantics-static-semantics-early-errors
description: >
It is a Syntax Error if the ExportedNames of ModuleItemList contains any
duplicate entries.
flags: [module, export-star-as-namespace-from-module]
negative:
phase: parse
type: SyntaxError
---*/
throw "Test262: This statement should not be evaluated.";
var x;
export default x;
export * as default from 'early-dup-export-start-as-dflt.js';

View File

@ -12,7 +12,7 @@ info: |
b. Perform ? requiredModule.ModuleEvaluation(). b. Perform ? requiredModule.ModuleEvaluation().
[...] [...]
includes: [fnGlobalObject.js] includes: [fnGlobalObject.js]
flags: [module] flags: [module, export-star-as-namespace-from-module]
---*/ ---*/
import {} from './eval-rqstd-once_FIXTURE.js'; import {} from './eval-rqstd-once_FIXTURE.js';
@ -22,7 +22,8 @@ import dflt1 from './eval-rqstd-once_FIXTURE.js';
export {} from './eval-rqstd-once_FIXTURE.js'; export {} from './eval-rqstd-once_FIXTURE.js';
import dflt2, {} from './eval-rqstd-once_FIXTURE.js'; import dflt2, {} from './eval-rqstd-once_FIXTURE.js';
export * from './eval-rqstd-once_FIXTURE.js'; export * from './eval-rqstd-once_FIXTURE.js';
import dflt3, * as ns from './eval-rqstd-once_FIXTURE.js'; export * as ns2 from './eval-rqstd-once_FIXTURE.js';
import dflt3, * as ns3 from './eval-rqstd-once_FIXTURE.js';
export default null; export default null;
var global = fnGlobalObject(); var global = fnGlobalObject();

View File

@ -0,0 +1,4 @@
// Copyright (C) 2018 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
Function('return this;')().test262 += '9';

View File

@ -15,10 +15,10 @@ info: |
16. Let result be the result of evaluating module.[[ECMAScriptCode]]. 16. Let result be the result of evaluating module.[[ECMAScriptCode]].
[...] [...]
includes: [fnGlobalObject.js] includes: [fnGlobalObject.js]
flags: [module] flags: [module, export-star-as-namespace-from-module]
---*/ ---*/
assert.sameValue(fnGlobalObject().test262, '12345678'); assert.sameValue(fnGlobalObject().test262, '123456789');
import {} from './eval-rqstd-order-1_FIXTURE.js'; import {} from './eval-rqstd-order-1_FIXTURE.js';
@ -34,4 +34,6 @@ import dflt2, {} from './eval-rqstd-order-6_FIXTURE.js';
export * from './eval-rqstd-order-7_FIXTURE.js'; export * from './eval-rqstd-order-7_FIXTURE.js';
import dflt3, * as ns from './eval-rqstd-order-8_FIXTURE.js'; import dflt3, * as ns2 from './eval-rqstd-order-8_FIXTURE.js';
export * as ns3 from './eval-rqstd-order-9_FIXTURE.js';

View File

@ -4,15 +4,24 @@
description: Module is evaluated exactly once description: Module is evaluated exactly once
esid: sec-moduleevaluation esid: sec-moduleevaluation
info: | info: |
Evaluate( ) Concrete Method
[...]
4. Let result be InnerModuleEvaluation(module, stack, 0).
[...]
InnerModuleEvaluation( module, stack, index )
[...]
2. If module.[[Status]] is "evaluated", then
a. If module.[[EvaluationError]] is undefined, return index.
b. Otherwise return module.[[EvaluationError]].
[...] [...]
4. If module.[[Evaluated]] is true, return undefined.
5. Set module.[[Evaluated]] to true.
6. For each String required that is an element of module.[[RequestedModules]] do, 6. For each String required that is an element of module.[[RequestedModules]] do,
a. Let requiredModule be ? HostResolveImportedModule(module, required). a. Let requiredModule be ? HostResolveImportedModule(module, required).
b. Perform ? requiredModule.ModuleEvaluation(). [...]
c. Set index to ? InnerModuleEvaluation(requiredModule, stack, index).
[...] [...]
includes: [fnGlobalObject.js] includes: [fnGlobalObject.js]
flags: [module] flags: [module, export-star-as-namespace-from-module]
---*/ ---*/
import {} from './eval-self-once.js'; import {} from './eval-self-once.js';
@ -22,6 +31,7 @@ import dflt1 from './eval-self-once.js';
export {} from './eval-self-once.js'; export {} from './eval-self-once.js';
import dflt2, {} from './eval-self-once.js'; import dflt2, {} from './eval-self-once.js';
export * from './eval-self-once.js'; export * from './eval-self-once.js';
export * as ns2 from './eval-self-once.js';
import dflt3, * as ns from './eval-self-once.js'; import dflt3, * as ns from './eval-self-once.js';
export default null; export default null;

View File

@ -4,20 +4,23 @@
description: Module is instantiated exactly once description: Module is instantiated exactly once
esid: sec-moduledeclarationinstantiation esid: sec-moduledeclarationinstantiation
info: | info: |
Instantiate( ) Concrete Method
[...] [...]
5. If module.[[Environment]] is not undefined, return 4. Let result be InnerModuleInstantiation(module, stack, 0).
NormalCompletion(empty).
6. Let env be NewModuleEnvironment(realm.[[GlobalEnv]]).
7. Set module.[[Environment]] to env.
8. For each String required that is an element of
module.[[RequestedModules]] do,
a. NOTE: Before instantiating a module, all of the modules it requested
must be available. An implementation may perform this test at any
time prior to this point.
b. Let requiredModule be ? HostResolveImportedModule(module, required).
c. Perform ? requiredModule.ModuleDeclarationInstantiation().
[...] [...]
flags: [module]
InnerModuleInstantiation( module, stack, index )
[...]
2. If module.[[Status]] is "instantiating", "instantiated", or "evaluated", then
a. Return index.
3. Assert: module.[[Status]] is "uninstantiated".
4. Set module.[[Status]] to "instantiating".
[...]
9. For each String required that is an element of module.[[RequestedModules]], do
a. Let requiredModule be ? HostResolveImportedModule(module, required).
b. Set index to ? InnerModuleInstantiation(requiredModule, stack, index).
[...]
flags: [module, export-star-as-namespace-from-module]
---*/ ---*/
import {} from './instn-once.js'; import {} from './instn-once.js';
@ -27,6 +30,7 @@ import dflt1 from './instn-once.js';
export {} from './instn-once.js'; export {} from './instn-once.js';
import dflt2, {} from './instn-once.js'; import dflt2, {} from './instn-once.js';
export * from './instn-once.js'; export * from './instn-once.js';
export * as ns2 from './instn-once.js';
import dflt3, * as ns from './instn-once.js'; import dflt3, * as ns from './instn-once.js';
export default null; export default null;

View File

@ -2,7 +2,7 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
description: > description: >
An ExportClause without an ExportsList contributes to the list of requested A NamedExport without an ExportsList contributes to the list of requested
modules modules
esid: sec-moduledeclarationinstantiation esid: sec-moduledeclarationinstantiation
info: | info: |
@ -25,7 +25,7 @@ info: |
Syntax Syntax
ExportClause: NamedExport:
{ } { }
{ ExportsList } { ExportsList }
{ ExportsList , } { ExportsList , }

View File

@ -0,0 +1,57 @@
// Copyright (C) 2018 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: >
Default exports are not included in an imported module namespace object when module exported with `* as namespace`
esid: sec-moduledeclarationinstantiation
info: |
[...]
4. Let result be InnerModuleInstantiation(module, stack, 0).
[...]
InnerModuleInstantiation( module, stack, index )
[...]
10. Perform ? ModuleDeclarationEnvironmentSetup(module).
[...]
ModuleDeclarationEnvironmentSetup( module )
[...]
c. If in.[[ImportName]] is "*", then
[...]
d. Else,
i. Let resolution be ? importedModule.ResolveExport(in.[[ImportName]], « »).
ii. If resolution is null or "ambiguous", throw a SyntaxError exception.
iii. If resolution.[[BindingName]] is "*namespace*", then
1. Let namespace be ? GetModuleNamespace(resolution.[[Module]]).
[...]
15.2.1.18 Runtime Semantics: GetModuleNamespace
[...]
3. If namespace is undefined, then
a. Let exportedNames be ? module.GetExportedNames(« »).
[...]
15.2.1.16.2 GetExportedNames
[...]
7. For each ExportEntry Record e in module.[[StarExportEntries]], do
[...]
c. For each element n of starNames, do
i. If SameValue(n, "default") is false, then
[...]
flags: [module, export-star-as-namespace-from-module]
---*/
import named from './instn-star-props-dflt-skip-star-as-named_FIXTURE.js';
import production from './instn-star-props-dflt-skip-star-as-prod_FIXTURE.js';
assert('namedOther' in named);
assert.sameValue(
'default' in named, false, 'default specified via identifier'
);
assert('productionOther' in production);
assert.sameValue(
'default' in production, false, 'default specified via dedicated production'
);

View File

@ -0,0 +1,6 @@
// Copyright (C) 2018 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
var x;
export var namedOther = null;
export { x as default };

View File

@ -0,0 +1,4 @@
// Copyright (C) 2018 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
export * as named from './instn-star-props-dflt-skip-star-as-named-end_FIXTURE.js';

View File

@ -0,0 +1,5 @@
// Copyright (C) 2018 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
export var productionOther = null;
export default null;

View File

@ -0,0 +1,4 @@
// Copyright (C) 2018 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
export * as production from './instn-star-props-dflt-skip-star-as-prod-end_FIXTURE.js';

View File

@ -20,5 +20,7 @@ export { localBindingId };
export { localBindingId as localIdName }; export { localBindingId as localIdName };
export { indirectIdName } from './instn-star-props-nrml-indirect_FIXTURE.js'; export { indirectIdName } from './instn-star-props-nrml-indirect_FIXTURE.js';
export { indirectIdName as indirectIdName2 } from './instn-star-props-nrml-indirect_FIXTURE.js'; export { indirectIdName as indirectIdName2 } from './instn-star-props-nrml-indirect_FIXTURE.js';
export * as namespaceBinding from './instn-star-props-nrml-indirect_FIXTURE.js';
export * from './instn-star-props-nrml-star_FIXTURE.js'; export * from './instn-star-props-nrml-star_FIXTURE.js';

View File

@ -20,3 +20,4 @@ export { starBindingId };
export { starBindingId as starIdName }; export { starBindingId as starIdName };
export { starIndirectIdName } from './instn-star-props-nrml-indirect_FIXTURE.js'; export { starIndirectIdName } from './instn-star-props-nrml-indirect_FIXTURE.js';
export { starIndirectIdName as starIndirectIdName2 } from './instn-star-props-nrml-indirect_FIXTURE.js'; export { starIndirectIdName as starIndirectIdName2 } from './instn-star-props-nrml-indirect_FIXTURE.js';
export * as starIndirectNamespaceBinding from './instn-star-props-nrml-indirect_FIXTURE.js';

View File

@ -24,7 +24,7 @@ info: |
iii. If resolution is not "ambiguous", append name to iii. If resolution is not "ambiguous", append name to
unambiguousNames. unambiguousNames.
d. Let namespace be ModuleNamespaceCreate(module, unambiguousNames). d. Let namespace be ModuleNamespaceCreate(module, unambiguousNames).
flags: [module] flags: [module, export-star-as-namespace-from-module]
---*/ ---*/
import * as ns from './instn-star-props-nrml-1_FIXTURE.js'; import * as ns from './instn-star-props-nrml-1_FIXTURE.js';
@ -40,6 +40,7 @@ assert('localBindingId' in ns, 'localBindingId');
assert('localIdName' in ns, 'localIdName'); assert('localIdName' in ns, 'localIdName');
assert('indirectIdName' in ns, 'indirectIdName'); assert('indirectIdName' in ns, 'indirectIdName');
assert('indirectIdName2' in ns, 'indirectIdName2'); assert('indirectIdName2' in ns, 'indirectIdName2');
assert('namespaceBinding' in ns, 'namespaceBinding');
// Export entries defined by a re-exported module // Export entries defined by a re-exported module
assert('starVarDecl' in ns, 'starVarDecl'); assert('starVarDecl' in ns, 'starVarDecl');
@ -52,8 +53,9 @@ assert('starBindingId' in ns, 'starBindingId');
assert('starIdName' in ns, 'starIdName'); assert('starIdName' in ns, 'starIdName');
assert('starIndirectIdName' in ns, 'starIndirectIdName'); assert('starIndirectIdName' in ns, 'starIndirectIdName');
assert('starIndirectIdName2' in ns, 'starIndirectIdName2'); assert('starIndirectIdName2' in ns, 'starIndirectIdName2');
assert('starIndirectNamespaceBinding' in ns, 'starIndirectNamespaceBinding');
// Bindings that were not exported from either module // Bindings that were not exported from any module
assert.sameValue('nonExportedVar1' in ns, false, 'nonExportedVar1'); assert.sameValue('nonExportedVar1' in ns, false, 'nonExportedVar1');
assert.sameValue('nonExportedVar2' in ns, false, 'nonExportedVar2'); assert.sameValue('nonExportedVar2' in ns, false, 'nonExportedVar2');
assert.sameValue('nonExportedLet1' in ns, false, 'nonExportedLet1'); assert.sameValue('nonExportedLet1' in ns, false, 'nonExportedLet1');

View File

@ -0,0 +1,6 @@
// Copyright (C) 2018 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
var x;
export var namedOther = null;
export { x as default };

View File

@ -0,0 +1,4 @@
// Copyright (C) 2018 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
export * as namedns2 from './get-nested-namespace-dflt-skip-named-end_FIXTURE.js';

View File

@ -0,0 +1,5 @@
// Copyright (C) 2018 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
export var productionOther = null;
export default null;

View File

@ -0,0 +1,4 @@
// Copyright (C) 2018 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
export * as productionns2 from './get-nested-namespace-dflt-skip-prod-end_FIXTURE.js';

View File

@ -0,0 +1,42 @@
// Copyright (C) 2018 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: >
Default exports are not included in an imported module namespace object when a namespace object is created.
esid: sec-module-namespace-exotic-objects-get-p-receiver
info: |
[...]
6. Let binding be ! m.ResolveExport(P, « »).
7. Assert: binding is a ResolvedBinding Record.
8. Let targetModule be binding.[[Module]].
9. Assert: targetModule is not undefined.
10. If binding.[[BindingName]] is "*namespace*", then
11. Return ? GetModuleNamespace(targetModule).
Runtime Semantics: GetModuleNamespace
[...]
3. If namespace is undefined, then
a. Let exportedNames be ? module.GetExportedNames(« »).
b. Let unambiguousNames be a new empty List.
c. For each name that is an element of exportedNames,
i. Let resolution be ? module.ResolveExport(name, « », « »).
ii. If resolution is null, throw a SyntaxError exception.
iii. If resolution is not "ambiguous", append name to
unambiguousNames.
d. Let namespace be ModuleNamespaceCreate(module, unambiguousNames).
[...]
flags: [module, export-star-as-namespace-from-module]
---*/
import * as namedns1 from './get-nested-namespace-dflt-skip-named_FIXTURE.js';
import * as productionns1 from './get-nested-namespace-dflt-skip-prod_FIXTURE.js';
assert('namedOther' in namedns1.namedns2);
assert.sameValue(
'default' in namedns1.namedns2, false, 'default specified via identifier'
);
assert('productionOther' in productionns1.productionns2);
assert.sameValue(
'default' in productionns1.productionns2, false, 'default specified via dedicated production'
);

View File

@ -0,0 +1,4 @@
// Copyright (C) 2018 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
export * as exportns from './get-nested-namespace-props-nrml-2_FIXTURE.js';

View File

@ -0,0 +1,23 @@
// Copyright (C) 2018 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
var notExportedVar;
let notExportedLet;
const notExportedConst = null;
function notExportedFunc() {}
function* notExportedGen() {}
class notExportedClass {}
var starBindingId;
export var starAsVarDecl;
export let starAsLetDecl;
export const starAsConstDecl = null;
export function starAsFuncDecl() {}
export function* starAsGenDecl() {}
export class starAsClassDecl {}
export { starAsBindingId };
export { starAsBindingId as starIdName };
export { starAsIndirectIdName } from './get-nested-namespace-props-nrml-3_FIXTURE.js';
export { starAsIndirectIdName as starAsIndirectIdName2 } from './get-nested-namespace-props-nrml-3_FIXTURE.js';
export * as namespaceBinding from './get-nested-namespace-props-nrml-3_FIXTURE.js';;

View File

@ -0,0 +1,5 @@
// Copyright (C) 2016 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
export var indirectIdName;
export var starIndirectIdName;

View File

@ -0,0 +1,51 @@
// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: >
Module namespace object reports properties for all ExportEntries of all
dependencies.
esid: sec-moduledeclarationinstantiation
info: |
[...]
12. For each ImportEntry Record in in module.[[ImportEntries]], do
a. Let importedModule be ? HostResolveImportedModule(module,
in.[[ModuleRequest]]).
b. If in.[[ImportName]] is "*", then
i. Let namespace be ? GetModuleNamespace(importedModule).
[...]
Runtime Semantics: GetModuleNamespace
3. If namespace is undefined, then
a. Let exportedNames be ? module.GetExportedNames(« »).
b. Let unambiguousNames be a new empty List.
c. For each name that is an element of exportedNames,
i. Let resolution be ? module.ResolveExport(name, « », « »).
ii. If resolution is null, throw a SyntaxError exception.
iii. If resolution is not "ambiguous", append name to
unambiguousNames.
d. Let namespace be ModuleNamespaceCreate(module, unambiguousNames).
flags: [module, export-star-as-namespace-from-module]
---*/
import * as ns from './get-nested-namespace-props-nrml-1_FIXTURE.js';
// Export entries defined by a re-exported as exportns module
assert('starAsVarDecl' in ns.exportns, 'starssVarDecl');
assert('starAsLetDecl' in ns.exportns, 'starSsLetDecl');
assert('starAsConstDecl' in ns.exportns, 'starSsConstDecl');
assert('starAsFuncDecl' in ns.exportns, 'starAsFuncDecl');
assert('starAsGenDecl' in ns.exportns, 'starAsGenDecl');
assert('starAsClassDecl' in ns.exportns, 'starAsClassDecl');
assert('starAsBindingId' in ns.exportns, 'starAsBindingId');
assert('starAsIdName' in ns.exportns, 'starAsIdName');
assert('starAsIndirectIdName' in ns.exportns, 'starAsIndirectIdName');
assert('starAsIndirectIdName2' in ns.exportns, 'starAsIndirectIdName2');
assert('namespaceBinding' in ns.exportns, 'namespaceBinding');
// Bindings that were not exported from any module
assert.sameValue('nonExportedVar' in ns.exportns, false, 'nonExportedVar');
assert.sameValue('nonExportedLet' in ns.exportns, false, 'nonExportedLet');
assert.sameValue('nonExportedConst' in ns.exportns, false, 'nonExportedConst');
assert.sameValue('nonExportedFunc' in ns.exportns, false, 'nonExportedFunc');
assert.sameValue('nonExportedGen' in ns.exportns, false, 'nonExportedGen');
assert.sameValue('nonExportedClass' in ns.exportns, false, 'nonExportedClass');

View File

@ -7,8 +7,9 @@ esid: sec-exports
info: | info: |
ExportDeclaration: ExportDeclaration:
export * FromClause; export * FromClause;
export ExportClause FromClause; export * as IdentifierName FromClause;
export ExportClause; export NamedExports FromClause;
export NamedExports;
export VariableStatement export VariableStatement
export Declaration export Declaration
export default HoistableDeclaration[Default] export default HoistableDeclaration[Default]

View File

@ -6,9 +6,10 @@ description: >
esid: sec-exports esid: sec-exports
info: | info: |
ExportDeclaration: ExportDeclaration:
export * FromClause; export * FromClause
export ExportClause FromClause; export * as IdentifierName FromClause;
export ExportClause; export NamedExports FromClause;
export NamedExports;
export VariableStatement export VariableStatement
export Declaration export Declaration
export default HoistableDeclaration[Default] export default HoistableDeclaration[Default]

View File

@ -8,8 +8,9 @@ esid: sec-exports
info: | info: |
ExportDeclaration: ExportDeclaration:
export * FromClause; export * FromClause;
export ExportClause FromClause; export * as IdentifierName FromClause;
export ExportClause; export NamedExports FromClause;
export NamedExports;
export VariableStatement export VariableStatement
export Declaration export Declaration
export default HoistableDeclaration[Default] export default HoistableDeclaration[Default]

View File

@ -8,8 +8,9 @@ esid: sec-exports
info: | info: |
ExportDeclaration: ExportDeclaration:
export * FromClause; export * FromClause;
export ExportClause FromClause; export * as IdentifierName FromClause;
export ExportClause; export NamedExports FromClause;
export NamedExports;
export VariableStatement export VariableStatement
export Declaration export Declaration
export default HoistableDeclaration[Default] export default HoistableDeclaration[Default]

View File

@ -7,8 +7,9 @@ esid: sec-exports
info: | info: |
ExportDeclaration: ExportDeclaration:
export * FromClause; export * FromClause;
export ExportClause FromClause; export * as IdentifierName FromClause;
export ExportClause; export NamedExports FromClause;
export NamedExports;
export VariableStatement export VariableStatement
export Declaration export Declaration
export default HoistableDeclaration[Default] export default HoistableDeclaration[Default]
@ -17,7 +18,7 @@ info: |
negative: negative:
phase: parse phase: parse
type: SyntaxError type: SyntaxError
flags: [module] flags: [module, export-star-as-namespace-from-module]
---*/ ---*/
throw "Test262: This statement should not be evaluated."; throw "Test262: This statement should not be evaluated.";

View File

@ -0,0 +1,27 @@
// Copyright (C) 2018 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: >
"export NameSpaceExport FromClause" declarations require a trailing semicolon
or LineTerminator
esid: sec-exports
info: |
ExportDeclaration:
export * FromClause;
export * as IdentifierName FromClause;
export NamedExports FromClause;
export NamedExports;
export VariableStatement
export Declaration
export default HoistableDeclaration[Default]
export default ClassDeclaration[Default]
export default [lookahead { function, class }] AssignmentExpression[In];
negative:
phase: parse
type: SyntaxError
flags: [module, export-star-as-namespace-from-module]
---*/
throw "Test262: This statement should not be evaluated.";
export * as namespace from './parse-err-semi-name-space-export.js' null;

View File

@ -2,14 +2,15 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
description: > description: >
"export ExportClause FromClause" declarations require a trailing semicolon "export NamedExports FromClause" declarations require a trailing semicolon
or LineTerminator or LineTerminator
esid: sec-exports esid: sec-exports
info: | info: |
ExportDeclaration: ExportDeclaration:
export * FromClause; export * FromClause;
export ExportClause FromClause; export * as IdentifierName FromClause;
export ExportClause; export NamedExports FromClause;
export NamedExports;
export VariableStatement export VariableStatement
export Declaration export Declaration
export default HoistableDeclaration[Default] export default HoistableDeclaration[Default]

View File

@ -2,14 +2,15 @@
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
description: > description: >
"export ExportClause" declarations require a trailing semicolon or "export NamedExports" declarations require a trailing semicolon or
LineTerminator LineTerminator
esid: sec-exports esid: sec-exports
info: | info: |
ExportDeclaration: ExportDeclaration:
export * FromClause; export * FromClause;
export ExportClause FromClause; export * as IdentifierName FromClause;
export ExportClause; export NamedExports FromClause;
export NamedExports;
export VariableStatement export VariableStatement
export Declaration export Declaration
export default HoistableDeclaration[Default] export default HoistableDeclaration[Default]

View File

@ -1,20 +1,21 @@
// Copyright (C) 2016 the V8 project authors. All rights reserved. // Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
description: An ExportClause does not require an ExportsList. description: A NamedExport does not require an ExportsList.
esid: sec-parsemodule esid: sec-parsemodule
info: | info: |
ExportDeclaration: ExportDeclaration:
export * FromClause; export * FromClause;
export ExportClause FromClause; export * as IdentifierName FromClause;
export ExportClause; export NamedExports FromClause;
export NamedExports;
export VariableStatement export VariableStatement
export Declaration export Declaration
export default HoistableDeclaration[Default] export default HoistableDeclaration[Default]
export default ClassDeclaration[Default] export default ClassDeclaration[Default]
export default [lookahead { function, class }] AssignmentExpression[In]; export default [lookahead { function, class }] AssignmentExpression[In];
ExportClause: NamedExports:
{ } { }
{ ExportsList } { ExportsList }
{ ExportsList , } { ExportsList , }