From a6dcd0dcca2c511191f132a8b257ba3bbb6178b2 Mon Sep 17 00:00:00 2001
From: Mike Pennisi <mike@mikepennisi.com>
Date: Thu, 18 Feb 2016 16:17:21 -0500
Subject: [PATCH] Add tests for position of module declarations

Assert that ImportDeclaration and ExportDeclaration match only the
ModuleItem symbol.

According to the definition of HostResolveImportedModule, it is
acceptable for an implementation to throw a SyntaxError in the event
that a requested module can neither be found nor created:

> If a Module Record corresponding to the pair referencingModule,
> specifier does not exist or cannot be created, an exception must be
> thrown.

In order to reliably detect a SyntaxError in response to the correct
interpretation of the grammar (and not a SyntaxError from an *incorrect*
interpretation of the grammar followed by a failure to resolve the
requested module), the ModuleSpecifier of ExportDeclarations should
describe a valid resource.
---
 test/language/eval-code/export.js             | 24 +++++++++++++++++++
 test/language/eval-code/import.js             | 24 +++++++++++++++++++
 test/language/global-code/export.js           | 17 +++++++++++++
 test/language/global-code/import.js           | 17 +++++++++++++
 .../decl-pos-export-arrow-function.js         | 10 ++++++++
 .../decl-pos-export-block-stmt-list.js        | 10 ++++++++
 .../module-code/decl-pos-export-block-stmt.js | 10 ++++++++
 .../decl-pos-export-class-decl-meth-static.js | 10 ++++++++
 .../decl-pos-export-class-decl-meth.js        | 10 ++++++++
 ...pos-export-class-decl-method-gen-static.js | 10 ++++++++
 .../decl-pos-export-class-decl-method-gen.js  | 10 ++++++++
 ...l-pos-export-class-expr-meth-gen-static.js | 10 ++++++++
 .../decl-pos-export-class-expr-meth-gen.js    | 10 ++++++++
 .../decl-pos-export-class-expr-meth-static.js | 10 ++++++++
 .../decl-pos-export-class-expr-meth.js        | 10 ++++++++
 .../module-code/decl-pos-export-do-while.js   | 10 ++++++++
 .../module-code/decl-pos-export-for-const.js  | 11 +++++++++
 .../decl-pos-export-for-in-const.js           | 11 +++++++++
 .../module-code/decl-pos-export-for-in-let.js | 11 +++++++++
 .../module-code/decl-pos-export-for-in-lhs.js | 11 +++++++++
 .../module-code/decl-pos-export-for-in-var.js | 11 +++++++++
 .../module-code/decl-pos-export-for-let.js    | 11 +++++++++
 .../module-code/decl-pos-export-for-lhs.js    | 11 +++++++++
 .../decl-pos-export-for-of-const.js           | 11 +++++++++
 .../module-code/decl-pos-export-for-of-let.js | 11 +++++++++
 .../module-code/decl-pos-export-for-of-lhs.js | 11 +++++++++
 .../module-code/decl-pos-export-for-of-var.js | 11 +++++++++
 .../module-code/decl-pos-export-for-var.js    | 11 +++++++++
 .../decl-pos-export-function-decl.js          | 10 ++++++++
 .../decl-pos-export-function-expr.js          | 10 ++++++++
 .../decl-pos-export-generator-decl.js         | 10 ++++++++
 .../decl-pos-export-generator-expr.js         | 10 ++++++++
 .../module-code/decl-pos-export-if-else.js    | 10 ++++++++
 .../module-code/decl-pos-export-if-if.js      | 10 ++++++++
 .../module-code/decl-pos-export-labeled.js    | 10 ++++++++
 .../decl-pos-export-object-gen-method.js      | 10 ++++++++
 .../decl-pos-export-object-getter.js          | 10 ++++++++
 .../decl-pos-export-object-method.js          | 10 ++++++++
 .../decl-pos-export-object-setter.js          | 10 ++++++++
 .../decl-pos-export-switch-case-dflt.js       | 10 ++++++++
 .../decl-pos-export-switch-case.js            | 10 ++++++++
 .../decl-pos-export-switch-dftl.js            | 10 ++++++++
 .../decl-pos-export-try-catch-finally.js      | 12 ++++++++++
 .../module-code/decl-pos-export-try-catch.js  | 12 ++++++++++
 .../decl-pos-export-try-finally.js            | 12 ++++++++++
 .../module-code/decl-pos-export-try-try.js    | 12 ++++++++++
 .../module-code/decl-pos-export-while.js      | 10 ++++++++
 .../decl-pos-import-arrow-function.js         | 10 ++++++++
 .../decl-pos-import-block-stmt-list.js        | 10 ++++++++
 .../module-code/decl-pos-import-block-stmt.js | 10 ++++++++
 .../decl-pos-import-class-decl-meth-static.js | 10 ++++++++
 .../decl-pos-import-class-decl-meth.js        | 10 ++++++++
 ...pos-import-class-decl-method-gen-static.js | 10 ++++++++
 .../decl-pos-import-class-decl-method-gen.js  | 10 ++++++++
 ...l-pos-import-class-expr-meth-gen-static.js | 10 ++++++++
 .../decl-pos-import-class-expr-meth-gen.js    | 10 ++++++++
 .../decl-pos-import-class-expr-meth-static.js | 10 ++++++++
 .../decl-pos-import-class-expr-meth.js        | 10 ++++++++
 .../module-code/decl-pos-import-do-while.js   | 10 ++++++++
 .../module-code/decl-pos-import-for-const.js  | 11 +++++++++
 .../decl-pos-import-for-in-const.js           | 11 +++++++++
 .../module-code/decl-pos-import-for-in-let.js | 11 +++++++++
 .../module-code/decl-pos-import-for-in-lhs.js | 11 +++++++++
 .../module-code/decl-pos-import-for-in-var.js | 11 +++++++++
 .../module-code/decl-pos-import-for-let.js    | 11 +++++++++
 .../module-code/decl-pos-import-for-lhs.js    | 11 +++++++++
 .../decl-pos-import-for-of-const.js           | 11 +++++++++
 .../module-code/decl-pos-import-for-of-let.js | 11 +++++++++
 .../module-code/decl-pos-import-for-of-lhs.js | 11 +++++++++
 .../module-code/decl-pos-import-for-of-var.js | 11 +++++++++
 .../module-code/decl-pos-import-for-var.js    | 11 +++++++++
 .../decl-pos-import-function-decl.js          | 10 ++++++++
 .../decl-pos-import-function-expr.js          | 10 ++++++++
 .../decl-pos-import-generator-decl.js         | 10 ++++++++
 .../decl-pos-import-generator-expr.js         | 10 ++++++++
 .../module-code/decl-pos-import-if-else.js    | 10 ++++++++
 .../module-code/decl-pos-import-if-if.js      | 10 ++++++++
 .../module-code/decl-pos-import-labeled.js    | 10 ++++++++
 .../decl-pos-import-object-gen-method.js      | 10 ++++++++
 .../decl-pos-import-object-getter.js          | 10 ++++++++
 .../decl-pos-import-object-method.js          | 10 ++++++++
 .../decl-pos-import-object-setter.js          | 10 ++++++++
 .../decl-pos-import-switch-case-dflt.js       | 10 ++++++++
 .../decl-pos-import-switch-case.js            | 10 ++++++++
 .../decl-pos-import-switch-dftl.js            | 10 ++++++++
 .../decl-pos-import-try-catch-finally.js      | 12 ++++++++++
 .../module-code/decl-pos-import-try-catch.js  | 12 ++++++++++
 .../decl-pos-import-try-finally.js            | 12 ++++++++++
 .../module-code/decl-pos-import-try-try.js    | 12 ++++++++++
 .../module-code/decl-pos-import-while.js      | 10 ++++++++
 90 files changed, 982 insertions(+)
 create mode 100644 test/language/eval-code/export.js
 create mode 100644 test/language/eval-code/import.js
 create mode 100644 test/language/global-code/export.js
 create mode 100644 test/language/global-code/import.js
 create mode 100644 test/language/module-code/decl-pos-export-arrow-function.js
 create mode 100644 test/language/module-code/decl-pos-export-block-stmt-list.js
 create mode 100644 test/language/module-code/decl-pos-export-block-stmt.js
 create mode 100644 test/language/module-code/decl-pos-export-class-decl-meth-static.js
 create mode 100644 test/language/module-code/decl-pos-export-class-decl-meth.js
 create mode 100644 test/language/module-code/decl-pos-export-class-decl-method-gen-static.js
 create mode 100644 test/language/module-code/decl-pos-export-class-decl-method-gen.js
 create mode 100644 test/language/module-code/decl-pos-export-class-expr-meth-gen-static.js
 create mode 100644 test/language/module-code/decl-pos-export-class-expr-meth-gen.js
 create mode 100644 test/language/module-code/decl-pos-export-class-expr-meth-static.js
 create mode 100644 test/language/module-code/decl-pos-export-class-expr-meth.js
 create mode 100644 test/language/module-code/decl-pos-export-do-while.js
 create mode 100644 test/language/module-code/decl-pos-export-for-const.js
 create mode 100644 test/language/module-code/decl-pos-export-for-in-const.js
 create mode 100644 test/language/module-code/decl-pos-export-for-in-let.js
 create mode 100644 test/language/module-code/decl-pos-export-for-in-lhs.js
 create mode 100644 test/language/module-code/decl-pos-export-for-in-var.js
 create mode 100644 test/language/module-code/decl-pos-export-for-let.js
 create mode 100644 test/language/module-code/decl-pos-export-for-lhs.js
 create mode 100644 test/language/module-code/decl-pos-export-for-of-const.js
 create mode 100644 test/language/module-code/decl-pos-export-for-of-let.js
 create mode 100644 test/language/module-code/decl-pos-export-for-of-lhs.js
 create mode 100644 test/language/module-code/decl-pos-export-for-of-var.js
 create mode 100644 test/language/module-code/decl-pos-export-for-var.js
 create mode 100644 test/language/module-code/decl-pos-export-function-decl.js
 create mode 100644 test/language/module-code/decl-pos-export-function-expr.js
 create mode 100644 test/language/module-code/decl-pos-export-generator-decl.js
 create mode 100644 test/language/module-code/decl-pos-export-generator-expr.js
 create mode 100644 test/language/module-code/decl-pos-export-if-else.js
 create mode 100644 test/language/module-code/decl-pos-export-if-if.js
 create mode 100644 test/language/module-code/decl-pos-export-labeled.js
 create mode 100644 test/language/module-code/decl-pos-export-object-gen-method.js
 create mode 100644 test/language/module-code/decl-pos-export-object-getter.js
 create mode 100644 test/language/module-code/decl-pos-export-object-method.js
 create mode 100644 test/language/module-code/decl-pos-export-object-setter.js
 create mode 100644 test/language/module-code/decl-pos-export-switch-case-dflt.js
 create mode 100644 test/language/module-code/decl-pos-export-switch-case.js
 create mode 100644 test/language/module-code/decl-pos-export-switch-dftl.js
 create mode 100644 test/language/module-code/decl-pos-export-try-catch-finally.js
 create mode 100644 test/language/module-code/decl-pos-export-try-catch.js
 create mode 100644 test/language/module-code/decl-pos-export-try-finally.js
 create mode 100644 test/language/module-code/decl-pos-export-try-try.js
 create mode 100644 test/language/module-code/decl-pos-export-while.js
 create mode 100644 test/language/module-code/decl-pos-import-arrow-function.js
 create mode 100644 test/language/module-code/decl-pos-import-block-stmt-list.js
 create mode 100644 test/language/module-code/decl-pos-import-block-stmt.js
 create mode 100644 test/language/module-code/decl-pos-import-class-decl-meth-static.js
 create mode 100644 test/language/module-code/decl-pos-import-class-decl-meth.js
 create mode 100644 test/language/module-code/decl-pos-import-class-decl-method-gen-static.js
 create mode 100644 test/language/module-code/decl-pos-import-class-decl-method-gen.js
 create mode 100644 test/language/module-code/decl-pos-import-class-expr-meth-gen-static.js
 create mode 100644 test/language/module-code/decl-pos-import-class-expr-meth-gen.js
 create mode 100644 test/language/module-code/decl-pos-import-class-expr-meth-static.js
 create mode 100644 test/language/module-code/decl-pos-import-class-expr-meth.js
 create mode 100644 test/language/module-code/decl-pos-import-do-while.js
 create mode 100644 test/language/module-code/decl-pos-import-for-const.js
 create mode 100644 test/language/module-code/decl-pos-import-for-in-const.js
 create mode 100644 test/language/module-code/decl-pos-import-for-in-let.js
 create mode 100644 test/language/module-code/decl-pos-import-for-in-lhs.js
 create mode 100644 test/language/module-code/decl-pos-import-for-in-var.js
 create mode 100644 test/language/module-code/decl-pos-import-for-let.js
 create mode 100644 test/language/module-code/decl-pos-import-for-lhs.js
 create mode 100644 test/language/module-code/decl-pos-import-for-of-const.js
 create mode 100644 test/language/module-code/decl-pos-import-for-of-let.js
 create mode 100644 test/language/module-code/decl-pos-import-for-of-lhs.js
 create mode 100644 test/language/module-code/decl-pos-import-for-of-var.js
 create mode 100644 test/language/module-code/decl-pos-import-for-var.js
 create mode 100644 test/language/module-code/decl-pos-import-function-decl.js
 create mode 100644 test/language/module-code/decl-pos-import-function-expr.js
 create mode 100644 test/language/module-code/decl-pos-import-generator-decl.js
 create mode 100644 test/language/module-code/decl-pos-import-generator-expr.js
 create mode 100644 test/language/module-code/decl-pos-import-if-else.js
 create mode 100644 test/language/module-code/decl-pos-import-if-if.js
 create mode 100644 test/language/module-code/decl-pos-import-labeled.js
 create mode 100644 test/language/module-code/decl-pos-import-object-gen-method.js
 create mode 100644 test/language/module-code/decl-pos-import-object-getter.js
 create mode 100644 test/language/module-code/decl-pos-import-object-method.js
 create mode 100644 test/language/module-code/decl-pos-import-object-setter.js
 create mode 100644 test/language/module-code/decl-pos-import-switch-case-dflt.js
 create mode 100644 test/language/module-code/decl-pos-import-switch-case.js
 create mode 100644 test/language/module-code/decl-pos-import-switch-dftl.js
 create mode 100644 test/language/module-code/decl-pos-import-try-catch-finally.js
 create mode 100644 test/language/module-code/decl-pos-import-try-catch.js
 create mode 100644 test/language/module-code/decl-pos-import-try-finally.js
 create mode 100644 test/language/module-code/decl-pos-import-try-try.js
 create mode 100644 test/language/module-code/decl-pos-import-while.js

diff --git a/test/language/eval-code/export.js b/test/language/eval-code/export.js
new file mode 100644
index 0000000000..0b6b6094ed
--- /dev/null
+++ b/test/language/eval-code/export.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: The `export` declaration may not appear within eval code
+id: sec-scripts
+flags: [module]
+info: |
+     Eval code is the source text supplied to the built-in eval function. More
+     precisely, if the parameter to the built-in eval function is a String, it
+     is treated as an ECMAScript Script. The eval code for a particular
+     invocation of eval is the global code portion of that Script.
+
+     A.5 Scripts and Modules
+
+     Script:
+         ScriptBodyopt
+
+     ScriptBody:
+         StatementList
+---*/
+
+assert.throws(SyntaxError, function() {
+  eval('export default null;');
+});
diff --git a/test/language/eval-code/import.js b/test/language/eval-code/import.js
new file mode 100644
index 0000000000..d1ffb7a31d
--- /dev/null
+++ b/test/language/eval-code/import.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: The `import` declaration may not appear within eval code
+id: sec-scripts
+flags: [module]
+info: |
+     Eval code is the source text supplied to the built-in eval function. More
+     precisely, if the parameter to the built-in eval function is a String, it
+     is treated as an ECMAScript Script. The eval code for a particular
+     invocation of eval is the global code portion of that Script.
+
+     A.5 Scripts and Modules
+
+     Script:
+         ScriptBodyopt
+
+     ScriptBody:
+         StatementList
+---*/
+
+assert.throws(SyntaxError, function() {
+  eval('import v from "./import.js";');
+});
diff --git a/test/language/global-code/export.js b/test/language/global-code/export.js
new file mode 100644
index 0000000000..5b80e1b446
--- /dev/null
+++ b/test/language/global-code/export.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: The `export` declaration may not appear within a ScriptBody
+id: sec-scripts
+negative: SyntaxError
+info: |
+     A.5 Scripts and Modules
+
+     Script:
+         ScriptBodyopt
+
+     ScriptBody:
+         StatementList
+---*/
+
+export default null;
diff --git a/test/language/global-code/import.js b/test/language/global-code/import.js
new file mode 100644
index 0000000000..f0c43cab0c
--- /dev/null
+++ b/test/language/global-code/import.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: The `import` declaration may not appear within a ScriptBody
+id: sec-scripts
+negative: SyntaxError
+info: |
+     A.5 Scripts and Modules
+
+     Script:
+         ScriptBodyopt
+
+     ScriptBody:
+         StatementList
+---*/
+
+import v from './import.js';
diff --git a/test/language/module-code/decl-pos-export-arrow-function.js b/test/language/module-code/decl-pos-export-arrow-function.js
new file mode 100644
index 0000000000..e17a600e5c
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-arrow-function.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+() => { export default null; };
diff --git a/test/language/module-code/decl-pos-export-block-stmt-list.js b/test/language/module-code/decl-pos-export-block-stmt-list.js
new file mode 100644
index 0000000000..135d2cad3f
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-block-stmt-list.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+{ void 0; export default null; }
diff --git a/test/language/module-code/decl-pos-export-block-stmt.js b/test/language/module-code/decl-pos-export-block-stmt.js
new file mode 100644
index 0000000000..b4da0a7eac
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-block-stmt.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+{ export default null; }
diff --git a/test/language/module-code/decl-pos-export-class-decl-meth-static.js b/test/language/module-code/decl-pos-export-class-decl-meth-static.js
new file mode 100644
index 0000000000..4d11059899
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-class-decl-meth-static.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+class C { static method() { export default null; } }
diff --git a/test/language/module-code/decl-pos-export-class-decl-meth.js b/test/language/module-code/decl-pos-export-class-decl-meth.js
new file mode 100644
index 0000000000..c94dc220d8
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-class-decl-meth.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+class C { method() { export default null; } }
diff --git a/test/language/module-code/decl-pos-export-class-decl-method-gen-static.js b/test/language/module-code/decl-pos-export-class-decl-method-gen-static.js
new file mode 100644
index 0000000000..02d76661d0
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-class-decl-method-gen-static.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+class C { static *method() { export default null; } }
diff --git a/test/language/module-code/decl-pos-export-class-decl-method-gen.js b/test/language/module-code/decl-pos-export-class-decl-method-gen.js
new file mode 100644
index 0000000000..4568bf8e5f
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-class-decl-method-gen.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+class C { *method() { export default null; } }
diff --git a/test/language/module-code/decl-pos-export-class-expr-meth-gen-static.js b/test/language/module-code/decl-pos-export-class-expr-meth-gen-static.js
new file mode 100644
index 0000000000..0fbb9e4194
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-class-expr-meth-gen-static.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+(class { static *method() { export default null; } });
diff --git a/test/language/module-code/decl-pos-export-class-expr-meth-gen.js b/test/language/module-code/decl-pos-export-class-expr-meth-gen.js
new file mode 100644
index 0000000000..97c1fe067d
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-class-expr-meth-gen.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+(class { *method() { export default null; } });
diff --git a/test/language/module-code/decl-pos-export-class-expr-meth-static.js b/test/language/module-code/decl-pos-export-class-expr-meth-static.js
new file mode 100644
index 0000000000..228abe0cd6
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-class-expr-meth-static.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+(class { static method() { export default null; } });
diff --git a/test/language/module-code/decl-pos-export-class-expr-meth.js b/test/language/module-code/decl-pos-export-class-expr-meth.js
new file mode 100644
index 0000000000..2f8bc61b9b
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-class-expr-meth.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+(class { method() { export default null; } });
diff --git a/test/language/module-code/decl-pos-export-do-while.js b/test/language/module-code/decl-pos-export-do-while.js
new file mode 100644
index 0000000000..65417fe6d7
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-do-while.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+do export default null; while (false)
diff --git a/test/language/module-code/decl-pos-export-for-const.js b/test/language/module-code/decl-pos-export-for-const.js
new file mode 100644
index 0000000000..51866046ed
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-for-const.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (const x = 0; false;)
+  export default null;
diff --git a/test/language/module-code/decl-pos-export-for-in-const.js b/test/language/module-code/decl-pos-export-for-in-const.js
new file mode 100644
index 0000000000..39756d8938
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-for-in-const.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (const y in [])
+  export default null;
diff --git a/test/language/module-code/decl-pos-export-for-in-let.js b/test/language/module-code/decl-pos-export-for-in-let.js
new file mode 100644
index 0000000000..dc530b1b8a
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-for-in-let.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (let y in [])
+  export default null;
diff --git a/test/language/module-code/decl-pos-export-for-in-lhs.js b/test/language/module-code/decl-pos-export-for-in-lhs.js
new file mode 100644
index 0000000000..e77cd8d3f2
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-for-in-lhs.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (y in [])
+  export default null;
diff --git a/test/language/module-code/decl-pos-export-for-in-var.js b/test/language/module-code/decl-pos-export-for-in-var.js
new file mode 100644
index 0000000000..e28d918b4a
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-for-in-var.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (var y in [])
+  export default null;
diff --git a/test/language/module-code/decl-pos-export-for-let.js b/test/language/module-code/decl-pos-export-for-let.js
new file mode 100644
index 0000000000..94cc8419b8
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-for-let.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (let x = 0; false;)
+  export default null;
diff --git a/test/language/module-code/decl-pos-export-for-lhs.js b/test/language/module-code/decl-pos-export-for-lhs.js
new file mode 100644
index 0000000000..6b5b4b8ddc
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-for-lhs.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (x = 0; false;)
+  export default null;
diff --git a/test/language/module-code/decl-pos-export-for-of-const.js b/test/language/module-code/decl-pos-export-for-of-const.js
new file mode 100644
index 0000000000..865c3f8efd
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-for-of-const.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (const y of [])
+  export default null;
diff --git a/test/language/module-code/decl-pos-export-for-of-let.js b/test/language/module-code/decl-pos-export-for-of-let.js
new file mode 100644
index 0000000000..8b3538e091
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-for-of-let.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (let y of [])
+  export default null;
diff --git a/test/language/module-code/decl-pos-export-for-of-lhs.js b/test/language/module-code/decl-pos-export-for-of-lhs.js
new file mode 100644
index 0000000000..d1b7028738
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-for-of-lhs.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (y of [])
+  export default null;
diff --git a/test/language/module-code/decl-pos-export-for-of-var.js b/test/language/module-code/decl-pos-export-for-of-var.js
new file mode 100644
index 0000000000..a6f77c0409
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-for-of-var.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (var y of [])
+  export default null;
diff --git a/test/language/module-code/decl-pos-export-for-var.js b/test/language/module-code/decl-pos-export-for-var.js
new file mode 100644
index 0000000000..f98efec954
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-for-var.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (var x = 0; false;)
+  export default null;
diff --git a/test/language/module-code/decl-pos-export-function-decl.js b/test/language/module-code/decl-pos-export-function-decl.js
new file mode 100644
index 0000000000..8be6dc1d96
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-function-decl.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+function f() { export default null; }
diff --git a/test/language/module-code/decl-pos-export-function-expr.js b/test/language/module-code/decl-pos-export-function-expr.js
new file mode 100644
index 0000000000..aaa9546f96
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-function-expr.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+(function() { export default null; });
diff --git a/test/language/module-code/decl-pos-export-generator-decl.js b/test/language/module-code/decl-pos-export-generator-decl.js
new file mode 100644
index 0000000000..0bc329f146
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-generator-decl.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+function* g() { export default null; }
diff --git a/test/language/module-code/decl-pos-export-generator-expr.js b/test/language/module-code/decl-pos-export-generator-expr.js
new file mode 100644
index 0000000000..8737b18420
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-generator-expr.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+(function*() { export default null; });
diff --git a/test/language/module-code/decl-pos-export-if-else.js b/test/language/module-code/decl-pos-export-if-else.js
new file mode 100644
index 0000000000..cb14fe46b3
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-if-else.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+if (true) { } else export default null;
diff --git a/test/language/module-code/decl-pos-export-if-if.js b/test/language/module-code/decl-pos-export-if-if.js
new file mode 100644
index 0000000000..4c223f0142
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-if-if.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+if (false) export default null;
diff --git a/test/language/module-code/decl-pos-export-labeled.js b/test/language/module-code/decl-pos-export-labeled.js
new file mode 100644
index 0000000000..36851d263d
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-labeled.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+test262: export default null;
diff --git a/test/language/module-code/decl-pos-export-object-gen-method.js b/test/language/module-code/decl-pos-export-object-gen-method.js
new file mode 100644
index 0000000000..d03390a3a1
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-object-gen-method.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+({ *m() { export default null; } });
diff --git a/test/language/module-code/decl-pos-export-object-getter.js b/test/language/module-code/decl-pos-export-object-getter.js
new file mode 100644
index 0000000000..7dce8c98c7
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-object-getter.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+({ get m() { export default null; } });
diff --git a/test/language/module-code/decl-pos-export-object-method.js b/test/language/module-code/decl-pos-export-object-method.js
new file mode 100644
index 0000000000..4cd5fa6e21
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-object-method.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+({ m() { export default null; } });
diff --git a/test/language/module-code/decl-pos-export-object-setter.js b/test/language/module-code/decl-pos-export-object-setter.js
new file mode 100644
index 0000000000..f76af99e55
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-object-setter.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+({ set m(x) { export default null; } });
diff --git a/test/language/module-code/decl-pos-export-switch-case-dflt.js b/test/language/module-code/decl-pos-export-switch-case-dflt.js
new file mode 100644
index 0000000000..af7361ebaa
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-switch-case-dflt.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+switch(0) { case 1: export default null; default: }
diff --git a/test/language/module-code/decl-pos-export-switch-case.js b/test/language/module-code/decl-pos-export-switch-case.js
new file mode 100644
index 0000000000..40d4427519
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-switch-case.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+switch(0) { case 1: export default null; }
diff --git a/test/language/module-code/decl-pos-export-switch-dftl.js b/test/language/module-code/decl-pos-export-switch-dftl.js
new file mode 100644
index 0000000000..f0a1610500
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-switch-dftl.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+switch(0) { default: export default null; }
diff --git a/test/language/module-code/decl-pos-export-try-catch-finally.js b/test/language/module-code/decl-pos-export-try-catch-finally.js
new file mode 100644
index 0000000000..33d46e9c6d
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-try-catch-finally.js
@@ -0,0 +1,12 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+try { } catch (err) { } finally {
+  export default null;
+}
diff --git a/test/language/module-code/decl-pos-export-try-catch.js b/test/language/module-code/decl-pos-export-try-catch.js
new file mode 100644
index 0000000000..07a776f8d8
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-try-catch.js
@@ -0,0 +1,12 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+try { } catch (err) {
+  export default null;
+}
diff --git a/test/language/module-code/decl-pos-export-try-finally.js b/test/language/module-code/decl-pos-export-try-finally.js
new file mode 100644
index 0000000000..4389d013a8
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-try-finally.js
@@ -0,0 +1,12 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+try { } finally {
+  export default null;
+}
diff --git a/test/language/module-code/decl-pos-export-try-try.js b/test/language/module-code/decl-pos-export-try-try.js
new file mode 100644
index 0000000000..338f2fd429
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-try-try.js
@@ -0,0 +1,12 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+try {
+  export default null;
+} catch (err) { }
diff --git a/test/language/module-code/decl-pos-export-while.js b/test/language/module-code/decl-pos-export-while.js
new file mode 100644
index 0000000000..b6c7999b43
--- /dev/null
+++ b/test/language/module-code/decl-pos-export-while.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `export` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+while (false) export default null;
diff --git a/test/language/module-code/decl-pos-import-arrow-function.js b/test/language/module-code/decl-pos-import-arrow-function.js
new file mode 100644
index 0000000000..ffb82404cf
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-arrow-function.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+() => { import v from './decl-pos-import-arrow-function.js'; };
diff --git a/test/language/module-code/decl-pos-import-block-stmt-list.js b/test/language/module-code/decl-pos-import-block-stmt-list.js
new file mode 100644
index 0000000000..5f96d3cab6
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-block-stmt-list.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+{ void 0; import v from './decl-pos-import-block-stmt-list.js'; }
diff --git a/test/language/module-code/decl-pos-import-block-stmt.js b/test/language/module-code/decl-pos-import-block-stmt.js
new file mode 100644
index 0000000000..c0bcc64ee6
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-block-stmt.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+{ import v from './decl-pos-import-block-stmt.js'; }
diff --git a/test/language/module-code/decl-pos-import-class-decl-meth-static.js b/test/language/module-code/decl-pos-import-class-decl-meth-static.js
new file mode 100644
index 0000000000..09827efdd9
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-class-decl-meth-static.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+class C { static method() { import v from './decl-pos-import-class-decl-meth-static.js'; } }
diff --git a/test/language/module-code/decl-pos-import-class-decl-meth.js b/test/language/module-code/decl-pos-import-class-decl-meth.js
new file mode 100644
index 0000000000..e20faa0e6d
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-class-decl-meth.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+class C { method() { import v from './decl-pos-import-class-decl-meth.js'; } }
diff --git a/test/language/module-code/decl-pos-import-class-decl-method-gen-static.js b/test/language/module-code/decl-pos-import-class-decl-method-gen-static.js
new file mode 100644
index 0000000000..37c133ba44
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-class-decl-method-gen-static.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+class C { static *method() { import v from './decl-pos-import-class-decl-method-gen-static.js'; } }
diff --git a/test/language/module-code/decl-pos-import-class-decl-method-gen.js b/test/language/module-code/decl-pos-import-class-decl-method-gen.js
new file mode 100644
index 0000000000..d178f0e071
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-class-decl-method-gen.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+class C { *method() { import v from './decl-pos-import-class-decl-method-gen.js'; } }
diff --git a/test/language/module-code/decl-pos-import-class-expr-meth-gen-static.js b/test/language/module-code/decl-pos-import-class-expr-meth-gen-static.js
new file mode 100644
index 0000000000..c4598c63c2
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-class-expr-meth-gen-static.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+(class { static *method() { import v from './decl-pos-import-class-expr-meth-gen-static.js'; } });
diff --git a/test/language/module-code/decl-pos-import-class-expr-meth-gen.js b/test/language/module-code/decl-pos-import-class-expr-meth-gen.js
new file mode 100644
index 0000000000..aeafdf93c7
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-class-expr-meth-gen.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+(class { *method() { import v from './decl-pos-import-class-expr-meth-gen.js'; } });
diff --git a/test/language/module-code/decl-pos-import-class-expr-meth-static.js b/test/language/module-code/decl-pos-import-class-expr-meth-static.js
new file mode 100644
index 0000000000..59ba70dc4f
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-class-expr-meth-static.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+(class { static method() { import v from './decl-pos-import-class-expr-meth-static.js'; } });
diff --git a/test/language/module-code/decl-pos-import-class-expr-meth.js b/test/language/module-code/decl-pos-import-class-expr-meth.js
new file mode 100644
index 0000000000..57965c47f9
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-class-expr-meth.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+(class { method() { import v from './decl-pos-import-class-expr-meth.js'; } });
diff --git a/test/language/module-code/decl-pos-import-do-while.js b/test/language/module-code/decl-pos-import-do-while.js
new file mode 100644
index 0000000000..80ba3e2ba4
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-do-while.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+do import v from './decl-pos-import-do-while.js'; while (false)
diff --git a/test/language/module-code/decl-pos-import-for-const.js b/test/language/module-code/decl-pos-import-for-const.js
new file mode 100644
index 0000000000..8c86c28c82
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-for-const.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (const x = 0; false;)
+  import v from './decl-pos-import-for-const.js';
diff --git a/test/language/module-code/decl-pos-import-for-in-const.js b/test/language/module-code/decl-pos-import-for-in-const.js
new file mode 100644
index 0000000000..e492ddb2a7
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-for-in-const.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (const y in [])
+  import v from './decl-pos-import-for-in-const.js';
diff --git a/test/language/module-code/decl-pos-import-for-in-let.js b/test/language/module-code/decl-pos-import-for-in-let.js
new file mode 100644
index 0000000000..abadc3c96f
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-for-in-let.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (let y in [])
+  import v from './decl-pos-import-for-in-let.js';
diff --git a/test/language/module-code/decl-pos-import-for-in-lhs.js b/test/language/module-code/decl-pos-import-for-in-lhs.js
new file mode 100644
index 0000000000..f75a2af51c
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-for-in-lhs.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (y in [])
+  import v from './decl-pos-import-for-in-lhs.js';
diff --git a/test/language/module-code/decl-pos-import-for-in-var.js b/test/language/module-code/decl-pos-import-for-in-var.js
new file mode 100644
index 0000000000..365e1a8c07
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-for-in-var.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (var y in [])
+  import v from './decl-pos-import-for-in-var.js';
diff --git a/test/language/module-code/decl-pos-import-for-let.js b/test/language/module-code/decl-pos-import-for-let.js
new file mode 100644
index 0000000000..b95c90d7fd
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-for-let.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (let x = 0; false;)
+  import v from './decl-pos-import-for-let.js';
diff --git a/test/language/module-code/decl-pos-import-for-lhs.js b/test/language/module-code/decl-pos-import-for-lhs.js
new file mode 100644
index 0000000000..419fcf7f95
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-for-lhs.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (x = 0; false;)
+  import v from './decl-pos-import-for-lhs.js';
diff --git a/test/language/module-code/decl-pos-import-for-of-const.js b/test/language/module-code/decl-pos-import-for-of-const.js
new file mode 100644
index 0000000000..0dbc347bc6
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-for-of-const.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (const y of [])
+  import v from './decl-pos-import-for-of-const.js';
diff --git a/test/language/module-code/decl-pos-import-for-of-let.js b/test/language/module-code/decl-pos-import-for-of-let.js
new file mode 100644
index 0000000000..408ac54da7
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-for-of-let.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (let y of [])
+  import v from './decl-pos-import-for-of-let.js';
diff --git a/test/language/module-code/decl-pos-import-for-of-lhs.js b/test/language/module-code/decl-pos-import-for-of-lhs.js
new file mode 100644
index 0000000000..166ca9f6b7
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-for-of-lhs.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (y of [])
+  import v from './decl-pos-import-for-of-lhs.js';
diff --git a/test/language/module-code/decl-pos-import-for-of-var.js b/test/language/module-code/decl-pos-import-for-of-var.js
new file mode 100644
index 0000000000..de1c6a1ac6
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-for-of-var.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (var y of [])
+  import v from './decl-pos-import-for-of-var.js';
diff --git a/test/language/module-code/decl-pos-import-for-var.js b/test/language/module-code/decl-pos-import-for-var.js
new file mode 100644
index 0000000000..f527a78485
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-for-var.js
@@ -0,0 +1,11 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+for (var x = 0; false;)
+  import v from './decl-pos-import-for-var.js';
diff --git a/test/language/module-code/decl-pos-import-function-decl.js b/test/language/module-code/decl-pos-import-function-decl.js
new file mode 100644
index 0000000000..82f39eaf81
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-function-decl.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+function f() { import v from './decl-pos-import-function-decl.js'; }
diff --git a/test/language/module-code/decl-pos-import-function-expr.js b/test/language/module-code/decl-pos-import-function-expr.js
new file mode 100644
index 0000000000..dbbacbd017
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-function-expr.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+(function() { import v from './decl-pos-import-function-expr.js'; });
diff --git a/test/language/module-code/decl-pos-import-generator-decl.js b/test/language/module-code/decl-pos-import-generator-decl.js
new file mode 100644
index 0000000000..daa2903bc6
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-generator-decl.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+function* g() { import v from './decl-pos-import-generator-decl.js'; }
diff --git a/test/language/module-code/decl-pos-import-generator-expr.js b/test/language/module-code/decl-pos-import-generator-expr.js
new file mode 100644
index 0000000000..b9c7a6b7e3
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-generator-expr.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+(function*() { import v from './decl-pos-import-generator-expr.js'; });
diff --git a/test/language/module-code/decl-pos-import-if-else.js b/test/language/module-code/decl-pos-import-if-else.js
new file mode 100644
index 0000000000..3b6744242b
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-if-else.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+if (true) { } else import v from './decl-pos-import-if-else.js';
diff --git a/test/language/module-code/decl-pos-import-if-if.js b/test/language/module-code/decl-pos-import-if-if.js
new file mode 100644
index 0000000000..8a186880b8
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-if-if.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+if (false) import v from './decl-pos-import-if-if.js';
diff --git a/test/language/module-code/decl-pos-import-labeled.js b/test/language/module-code/decl-pos-import-labeled.js
new file mode 100644
index 0000000000..b76f5ccbd4
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-labeled.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+test262: import v from './decl-pos-import-labeled.js';
diff --git a/test/language/module-code/decl-pos-import-object-gen-method.js b/test/language/module-code/decl-pos-import-object-gen-method.js
new file mode 100644
index 0000000000..49b2bd006e
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-object-gen-method.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+({ *m() { import v from './decl-pos-import-object-gen-method.js'; } });
diff --git a/test/language/module-code/decl-pos-import-object-getter.js b/test/language/module-code/decl-pos-import-object-getter.js
new file mode 100644
index 0000000000..e99a4947fd
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-object-getter.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+({ get m() { import v from './decl-pos-import-object-getter.js'; } });
diff --git a/test/language/module-code/decl-pos-import-object-method.js b/test/language/module-code/decl-pos-import-object-method.js
new file mode 100644
index 0000000000..5d4b0e5eed
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-object-method.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+({ m() { import v from './decl-pos-import-object-method.js'; } });
diff --git a/test/language/module-code/decl-pos-import-object-setter.js b/test/language/module-code/decl-pos-import-object-setter.js
new file mode 100644
index 0000000000..5764040689
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-object-setter.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Expression cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+({ set m(x) { import v from './decl-pos-import-object-setter.js'; } });
diff --git a/test/language/module-code/decl-pos-import-switch-case-dflt.js b/test/language/module-code/decl-pos-import-switch-case-dflt.js
new file mode 100644
index 0000000000..7bf60cdea6
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-switch-case-dflt.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+switch(0) { case 1: import v from './decl-pos-import-switch-case-dflt.js'; default: }
diff --git a/test/language/module-code/decl-pos-import-switch-case.js b/test/language/module-code/decl-pos-import-switch-case.js
new file mode 100644
index 0000000000..bf86fbad25
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-switch-case.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+switch(0) { case 1: import v from './decl-pos-import-switch-case.js'; }
diff --git a/test/language/module-code/decl-pos-import-switch-dftl.js b/test/language/module-code/decl-pos-import-switch-dftl.js
new file mode 100644
index 0000000000..f99e3a2e42
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-switch-dftl.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+switch(0) { default: import v from './decl-pos-import-switch-dftl.js'; }
diff --git a/test/language/module-code/decl-pos-import-try-catch-finally.js b/test/language/module-code/decl-pos-import-try-catch-finally.js
new file mode 100644
index 0000000000..522ca2d444
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-try-catch-finally.js
@@ -0,0 +1,12 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+try { } catch (err) { } finally {
+  import v from './decl-pos-import-try-catch-finally.js';
+}
diff --git a/test/language/module-code/decl-pos-import-try-catch.js b/test/language/module-code/decl-pos-import-try-catch.js
new file mode 100644
index 0000000000..3c103b490f
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-try-catch.js
@@ -0,0 +1,12 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+try { } catch (err) {
+  import v from './decl-pos-import-try-catch.js';
+}
diff --git a/test/language/module-code/decl-pos-import-try-finally.js b/test/language/module-code/decl-pos-import-try-finally.js
new file mode 100644
index 0000000000..71c69c4468
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-try-finally.js
@@ -0,0 +1,12 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+try { } finally {
+  import v from './decl-pos-import-try-finally.js';
+}
diff --git a/test/language/module-code/decl-pos-import-try-try.js b/test/language/module-code/decl-pos-import-try-try.js
new file mode 100644
index 0000000000..814a9a0812
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-try-try.js
@@ -0,0 +1,12 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+try {
+  import v from './decl-pos-import-try-try.js';
+} catch (err) { }
diff --git a/test/language/module-code/decl-pos-import-while.js b/test/language/module-code/decl-pos-import-while.js
new file mode 100644
index 0000000000..23a2a6cea7
--- /dev/null
+++ b/test/language/module-code/decl-pos-import-while.js
@@ -0,0 +1,10 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: Statement cannot contain an `import` declaration
+id: sec-modules
+negative: SyntaxError
+flags: [module]
+---*/
+
+while (false) import v from './decl-pos-import-while.js';
-- 
GitLab