diff --git a/src/dynamic-import/catch/nested-arrow.template b/src/dynamic-import/catch/nested-arrow.template
index 96aa28b1035bff5b4286525c0de304ef2d58b270..957927a3671c07d31e21b8727b54ab9a1b9defac 100644
--- a/src/dynamic-import/catch/nested-arrow.template
+++ b/src/dynamic-import/catch/nested-arrow.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 let f = () => {
-  import(/*{ params }*/).catch(error => {
+  /*{ import }*/.catch(error => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/catch/nested-async-function-await.template b/src/dynamic-import/catch/nested-async-function-await.template
index fb62d11290dbefacc6c91fc8c3d58befd47531c3..99d2957b13ebe44be88f502811e1a11175a0b7a8 100644
--- a/src/dynamic-import/catch/nested-async-function-await.template
+++ b/src/dynamic-import/catch/nested-async-function-await.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 async function f() {
-  await import(/*{ params }*/).catch(error => {
+  await /*{ import }*/.catch(error => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/catch/nested-async-function-return-await.template b/src/dynamic-import/catch/nested-async-function-return-await.template
index 75b81e0dc2fbfc183b6e3852a9e16061551da3d7..71e3010746b37f6b79a587bfce843761a7147b56 100644
--- a/src/dynamic-import/catch/nested-async-function-return-await.template
+++ b/src/dynamic-import/catch/nested-async-function-return-await.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 async function f() {
-  return await import(/*{ params }*/).catch(error => {
+  return await /*{ import }*/.catch(error => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/catch/nested-async-function.template b/src/dynamic-import/catch/nested-async-function.template
index 3a2ae552836cfeee826f41672d3c10e67109b786..257ac79e12c4ec22e7eeb61e130dbc751c89b983 100644
--- a/src/dynamic-import/catch/nested-async-function.template
+++ b/src/dynamic-import/catch/nested-async-function.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 async function f() {
-  import(/*{ params }*/).catch(error => {
+  /*{ import }*/.catch(error => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/catch/nested-block-labeled.template b/src/dynamic-import/catch/nested-block-labeled.template
index ad857641b128e2ef3c1bd950446e11fcab53695a..2d1503dd640a53653f4432e8bd8728c1ecf55879 100644
--- a/src/dynamic-import/catch/nested-block-labeled.template
+++ b/src/dynamic-import/catch/nested-block-labeled.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 label: {
-  import(/*{ params }*/).catch(error => {
+  /*{ import }*/.catch(error => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/catch/nested-block.template b/src/dynamic-import/catch/nested-block.template
index 47254e57fe2ad59b45fa5eca435120e230e1fcfc..d17585b1a9e14fae164f7e0863fd0652e331110e 100644
--- a/src/dynamic-import/catch/nested-block.template
+++ b/src/dynamic-import/catch/nested-block.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 {
-  import(/*{ params }*/).catch(error => {
+  /*{ import }*/.catch(error => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/catch/nested-do-while.template b/src/dynamic-import/catch/nested-do-while.template
index ffda5199d9712a880691ad1f27d4ae83272099ad..644d83448123824eff3740096e7e4a595bc841f0 100644
--- a/src/dynamic-import/catch/nested-do-while.template
+++ b/src/dynamic-import/catch/nested-do-while.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 do {
-  import(/*{ params }*/).catch(error => {
+  /*{ import }*/.catch(error => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/catch/nested-else.template b/src/dynamic-import/catch/nested-else.template
index cc36621adaa324bf1eb108a38ab4da06e61b935e..0b994c52f6bec471eda3f41f716e81d0102a6f92 100644
--- a/src/dynamic-import/catch/nested-else.template
+++ b/src/dynamic-import/catch/nested-else.template
@@ -27,7 +27,7 @@ flags: [async]
 if (false) {
 
 } else {
-  import(/*{ params }*/).catch(error => {
+  /*{ import }*/.catch(error => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/catch/nested-function.template b/src/dynamic-import/catch/nested-function.template
index febdb2d6394d131c9f4e045003bbb4496188d23d..311ac33b363ebb2947be05666f2be3a4d3ba1ad3 100644
--- a/src/dynamic-import/catch/nested-function.template
+++ b/src/dynamic-import/catch/nested-function.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 function f() {
-  import(/*{ params }*/).catch(error => {
+  /*{ import }*/.catch(error => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/catch/nested-if.template b/src/dynamic-import/catch/nested-if.template
index 78b4f1968713f5670f3b82376a4753dbd3e506d7..60d639fe21a92fe0846d01a709fd83bfe9e5f404 100644
--- a/src/dynamic-import/catch/nested-if.template
+++ b/src/dynamic-import/catch/nested-if.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 if (true) {
-  import(/*{ params }*/).catch(error => {
+  /*{ import }*/.catch(error => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/catch/nested-while.template b/src/dynamic-import/catch/nested-while.template
index 341572885a806549a7374513f3295dcb9fc03133..c2dcdae201bb05a4c6edc004936ecc4484fb0767 100644
--- a/src/dynamic-import/catch/nested-while.template
+++ b/src/dynamic-import/catch/nested-while.template
@@ -27,7 +27,7 @@ flags: [async]
 let x = 0;
 while (!x) {
   x++;
-  import(/*{ params }*/).catch(error => {
+  /*{ import }*/.catch(error => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/catch/nested-with.template b/src/dynamic-import/catch/nested-with.template
new file mode 100644
index 0000000000000000000000000000000000000000..e88b46e6741bae3a2ff4c51fe8e75c690524f974
--- /dev/null
+++ b/src/dynamic-import/catch/nested-with.template
@@ -0,0 +1,31 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+path: language/module-code/dynamic-import/catch/nested-with-import-catch-
+name: nested with
+esid: sec-import-call-runtime-semantics-evaluation
+info: |
+  ImportCall :
+      import( AssignmentExpression )
+
+  1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+  2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+  3. Let argRef be the result of evaluating AssignmentExpression.
+  4. Let specifier be ? GetValue(argRef).
+  5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+  6. Let specifierString be ToString(specifier).
+  7. IfAbruptRejectPromise(specifierString, promiseCapability).
+  8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+  9. Return promiseCapability.[[Promise]].
+features: [dynamic-import]
+flags: [async, noStrict]
+---*/
+
+with ({}) {
+    /*{ import }*/.catch(error => {
+  
+        /*{ body }*/
+  
+    }).then($DONE, $DONE);
+}
+  
\ No newline at end of file
diff --git a/src/dynamic-import/catch/top-level.template b/src/dynamic-import/catch/top-level.template
index ee26cf4d7b283e041547d3d0d1399058a5f8aae1..099dd891b7e32c553d0d66f20ef41bfc30fe27bd 100644
--- a/src/dynamic-import/catch/top-level.template
+++ b/src/dynamic-import/catch/top-level.template
@@ -24,7 +24,7 @@ features: [dynamic-import]
 flags: [async]
 ---*/
 
-import(/*{ params }*/).catch(error => {
+/*{ import }*/.catch(error => {
 
   /*{ body }*/
 
diff --git a/src/dynamic-import/default/nested-arrow-assign-expr.template b/src/dynamic-import/default/nested-arrow-assign-expr.template
index 7d6d90aa8e8eaba943471772d3c0b2b13fd0cb01..1692b8e81beee6ff64dd80fef8d6bc71dc2d0a53 100644
--- a/src/dynamic-import/default/nested-arrow-assign-expr.template
+++ b/src/dynamic-import/default/nested-arrow-assign-expr.template
@@ -24,7 +24,7 @@ features: [dynamic-import]
 flags: [async]
 ---*/
 
-let f = () => import(/*{ params }*/).then(imported => {
+let f = () => /*{ import }*/.then(imported => {
 
   /*{ body }*/
 
diff --git a/src/dynamic-import/default/nested-arrow.template b/src/dynamic-import/default/nested-arrow.template
index 061526cac5f036ea3672a8db3e3312cdccd7cb56..d010c20751ca6718809e888781ca6c16301bdd9d 100644
--- a/src/dynamic-import/default/nested-arrow.template
+++ b/src/dynamic-import/default/nested-arrow.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 let f = () => {
-  return import(/*{ params }*/).then(imported => {
+  return /*{ import }*/.then(imported => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/default/nested-async-function-await.template b/src/dynamic-import/default/nested-async-function-await.template
index 7e561c6ae1b83e3f880dacd90aa12ac13afa534c..6847734545a059967a69282c9728bb59cca833c1 100644
--- a/src/dynamic-import/default/nested-async-function-await.template
+++ b/src/dynamic-import/default/nested-async-function-await.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 async function f() {
-  await import(/*{ params }*/).then(imported => {
+  await /*{ import }*/.then(imported => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/default/nested-async-function-return-await.template b/src/dynamic-import/default/nested-async-function-return-await.template
index 55e85c71ee81c229858e7321047a2acf0a97e061..79158d65d741238cd58e77fd33243d1c1c825277 100644
--- a/src/dynamic-import/default/nested-async-function-return-await.template
+++ b/src/dynamic-import/default/nested-async-function-return-await.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 async function f() {
-  return await import(/*{ params }*/);
+  return await /*{ import }*/;
 }
 
 f().then(imported => {
diff --git a/src/dynamic-import/default/nested-async-function.template b/src/dynamic-import/default/nested-async-function.template
index f83da4142f1f7a978cb3cfd59d9cdb92a69fb4c1..cfc641bb2a4332b9e4f65c12083091d6412092ab 100644
--- a/src/dynamic-import/default/nested-async-function.template
+++ b/src/dynamic-import/default/nested-async-function.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 async function f() {
-  import(/*{ params }*/).then(imported => {
+  /*{ import }*/.then(imported => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/default/nested-block-labeled.template b/src/dynamic-import/default/nested-block-labeled.template
index 71e8125919f352a23d4252ec0228d0fa948536f2..58c57cf27f32507d8de79f51c6876908c8d460fc 100644
--- a/src/dynamic-import/default/nested-block-labeled.template
+++ b/src/dynamic-import/default/nested-block-labeled.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 label: {
-  import(/*{ params }*/).then(imported => {
+  /*{ import }*/.then(imported => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/default/nested-block.template b/src/dynamic-import/default/nested-block.template
index ebfce21e35d358654e0d0d4fd170282dde675af6..5ca6ac488bbdf36b4506d009bb9a602418bf4156 100644
--- a/src/dynamic-import/default/nested-block.template
+++ b/src/dynamic-import/default/nested-block.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 {
-  import(/*{ params }*/).then(imported => {
+  /*{ import }*/.then(imported => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/default/nested-do-while.template b/src/dynamic-import/default/nested-do-while.template
index 902b3236e9fb2232fd3d5fd731189618ae7d11a1..204da1c37f83a6f01ef1be79ead85b5d60531388 100644
--- a/src/dynamic-import/default/nested-do-while.template
+++ b/src/dynamic-import/default/nested-do-while.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 do {
-  import(/*{ params }*/).then(imported => {
+  /*{ import }*/.then(imported => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/default/nested-else.template b/src/dynamic-import/default/nested-else.template
index b26a128e16df70eb2b17cefc3c5fbbaba1b2004f..1cb4be08f6e1af2aeea005fa54aee64235f6bf4c 100644
--- a/src/dynamic-import/default/nested-else.template
+++ b/src/dynamic-import/default/nested-else.template
@@ -27,7 +27,7 @@ flags: [async]
 if (false) {
 
 } else {
-  import(/*{ params }*/).then(imported => {
+  /*{ import }*/.then(imported => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/default/nested-function.template b/src/dynamic-import/default/nested-function.template
index 48e60f4bfc70fb2f88d189ed697d2ed585a6d895..b99372ff819c62488681c50414406e672734e383 100644
--- a/src/dynamic-import/default/nested-function.template
+++ b/src/dynamic-import/default/nested-function.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 function f() {
-  import(/*{ params }*/).then(imported => {
+  /*{ import }*/.then(imported => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/default/nested-if-braceless.template b/src/dynamic-import/default/nested-if-braceless.template
index 907dd35e9eababaf4eca6a1677a7644a1ec53e6f..2374e28c29597dd05c15c02f725301f4a990c49c 100644
--- a/src/dynamic-import/default/nested-if-braceless.template
+++ b/src/dynamic-import/default/nested-if-braceless.template
@@ -24,7 +24,7 @@ features: [dynamic-import]
 flags: [async]
 ---*/
 
-if (true) import(/*{ params }*/).then(imported => {
+if (true) /*{ import }*/.then(imported => {
 
   /*{ body }*/
 
diff --git a/src/dynamic-import/default/nested-if.template b/src/dynamic-import/default/nested-if.template
index c8fb0c83e6c2af48b289f3f6ba15f776e7125456..9c07bf8514498349c32c58a6ee4595afd4da3b7c 100644
--- a/src/dynamic-import/default/nested-if.template
+++ b/src/dynamic-import/default/nested-if.template
@@ -25,7 +25,7 @@ flags: [async]
 ---*/
 
 if (true) {
-  import(/*{ params }*/).then(imported => {
+  /*{ import }*/.then(imported => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/default/nested-while.template b/src/dynamic-import/default/nested-while.template
index fa2a103a2f6205bf0090e14e5bb145ee3dedb6e3..97c400d0f0d459eebc8e2d9b91b3004943f79f5e 100644
--- a/src/dynamic-import/default/nested-while.template
+++ b/src/dynamic-import/default/nested-while.template
@@ -27,7 +27,7 @@ flags: [async]
 let x = 0;
 while (!x) {
   x++;
-  import(/*{ params }*/).then(imported => {
+  /*{ import }*/.then(imported => {
 
     /*{ body }*/
 
diff --git a/src/dynamic-import/default/nested-with.template b/src/dynamic-import/default/nested-with.template
new file mode 100644
index 0000000000000000000000000000000000000000..05203214971a8b7663828dbb08a6a3cfaecb48af
--- /dev/null
+++ b/src/dynamic-import/default/nested-with.template
@@ -0,0 +1,30 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+path: language/module-code/dynamic-import/usage/nested-with-import-then-
+name: nested with
+esid: sec-import-call-runtime-semantics-evaluation
+info: |
+  ImportCall :
+      import( AssignmentExpression )
+
+  1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+  2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+  3. Let argRef be the result of evaluating AssignmentExpression.
+  4. Let specifier be ? GetValue(argRef).
+  5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+  6. Let specifierString be ToString(specifier).
+  7. IfAbruptRejectPromise(specifierString, promiseCapability).
+  8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+  9. Return promiseCapability.[[Promise]].
+features: [dynamic-import]
+flags: [async, noStrict]
+---*/
+
+with ({}) {
+    /*{ import }*/.then(imported => {
+
+        /*{ body }*/
+
+    }).then($DONE, $DONE).catch($DONE);
+}
diff --git a/src/dynamic-import/default/top-level.template b/src/dynamic-import/default/top-level.template
index 9982059a0992d06d78a460615cf34791c27a06a5..bd46db1fcfe96fb552b8d80c05c077500151f52d 100644
--- a/src/dynamic-import/default/top-level.template
+++ b/src/dynamic-import/default/top-level.template
@@ -24,7 +24,7 @@ features: [dynamic-import]
 flags: [async]
 ---*/
 
-import(/*{ params }*/).then(imported => {
+/*{ import }*/.then(imported => {
 
   /*{ body }*/
 
diff --git a/src/dynamic-import/eval-gtbndng-indirect-update-dflt.case b/src/dynamic-import/eval-gtbndng-indirect-update-dflt.case
index ae7310a5b01271a33cfbb8c12c7f0fc7b2ed04dc..4c0bd0aa568186c0d3345de742fcd9df4ca6b207 100644
--- a/src/dynamic-import/eval-gtbndng-indirect-update-dflt.case
+++ b/src/dynamic-import/eval-gtbndng-indirect-update-dflt.case
@@ -20,8 +20,8 @@ info: |
 template: default
 ---*/
 
-//- params
-'./eval-gtbndng-indirect-update-dflt_FIXTURE.js'
+//- import
+import('./eval-gtbndng-indirect-update-dflt_FIXTURE.js')
 //- body
 assert.sameValue(imported.default(), 1);
 assert.sameValue(imported.default, 2);
diff --git a/src/dynamic-import/eval-gtbndng-indirect-update.case b/src/dynamic-import/eval-gtbndng-indirect-update.case
index 030b53291411bbd0dec4804f93d59491d9930322..3072affae02d90000e405c150a2afe26e5dc0ca6 100644
--- a/src/dynamic-import/eval-gtbndng-indirect-update.case
+++ b/src/dynamic-import/eval-gtbndng-indirect-update.case
@@ -21,8 +21,8 @@ includes: [fnGlobalObject.js]
 template: default
 ---*/
 
-//- params
-'./eval-gtbndng-indirect-update_FIXTURE.js'
+//- import
+import('./eval-gtbndng-indirect-update_FIXTURE.js')
 //- body
 assert.sameValue(imported.x, 1);
 
diff --git a/src/dynamic-import/eval-rqstd-abrupt-typeerror.case b/src/dynamic-import/eval-rqstd-abrupt-typeerror.case
index 371b0d680043e44f62cf600c964cdea89fc27efe..f5dddeba9da7278a686ba6ab7b65c8a2b69a5f94 100644
--- a/src/dynamic-import/eval-rqstd-abrupt-typeerror.case
+++ b/src/dynamic-import/eval-rqstd-abrupt-typeerror.case
@@ -14,7 +14,7 @@ info: |
 template: catch
 ---*/
 
-//- params
-'./eval-rqstd-abrupt-err-type_FIXTURE.js'
+//- import
+import('./eval-rqstd-abrupt-err-type_FIXTURE.js')
 //- body
 assert.sameValue(error.name, 'TypeError');
diff --git a/src/dynamic-import/eval-rqstd-abrupt-urierror.case b/src/dynamic-import/eval-rqstd-abrupt-urierror.case
index bff657b556e0e30203c8cce0c76a5ac740a9d365..c8ed90897f257719bb3fd81e617c94ae90bf6f8c 100644
--- a/src/dynamic-import/eval-rqstd-abrupt-urierror.case
+++ b/src/dynamic-import/eval-rqstd-abrupt-urierror.case
@@ -14,7 +14,7 @@ info: |
 template: catch
 ---*/
 
-//- params
-'./eval-rqstd-abrupt-err-uri_FIXTURE.js'
+//- import
+import('./eval-rqstd-abrupt-err-uri_FIXTURE.js')
 //- body
 assert.sameValue(error.name, 'URIError');
diff --git a/src/dynamic-import/file-does-not-exist.case b/src/dynamic-import/file-does-not-exist.case
new file mode 100644
index 0000000000000000000000000000000000000000..dd869ffc06458f578e71197ca626f5342efc4902
--- /dev/null
+++ b/src/dynamic-import/file-does-not-exist.case
@@ -0,0 +1,16 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+desc: >
+    Non existent file can't resolve to a Script or Module Record
+esid: sec-hostresolveimportedmodule
+info: |
+    If a Module Record corresponding to the pair referencingModulereferencingScriptOrModule,
+    specifier does not exist or cannot be created, an exception must be thrown.
+template: catch
+---*/
+
+//- import
+import('./THIS_FILE_DOES_NOT_EXIST.js')
+//- body
+assert.notSameValue(typeof error, 'undefined');
diff --git a/src/dynamic-import/instn-iee-err-ambiguous-import.case b/src/dynamic-import/instn-iee-err-ambiguous-import.case
index 184744db3f33af53884bb28e82a8aaf384a0b38a..74de078676f59d61a2640c6fe2f509f0ba66bc5f 100644
--- a/src/dynamic-import/instn-iee-err-ambiguous-import.case
+++ b/src/dynamic-import/instn-iee-err-ambiguous-import.case
@@ -34,7 +34,7 @@ info: |
 template: catch
 ---*/
 
-//- params
-'./instn-iee-err-ambiguous-export_FIXTURE.js'
+//- import
+import('./instn-iee-err-ambiguous-export_FIXTURE.js')
 //- body
 assert.sameValue(error.name, 'SyntaxError');
diff --git a/src/dynamic-import/instn-iee-err-circular.case b/src/dynamic-import/instn-iee-err-circular.case
index 6b34395f17aa71880c9ba8a4fb92e64c8a4cb0b3..a1fd29ef790b03c180199372c93160b65d5c35f4 100644
--- a/src/dynamic-import/instn-iee-err-circular.case
+++ b/src/dynamic-import/instn-iee-err-circular.case
@@ -23,7 +23,7 @@ info: |
 template: catch
 ---*/
 
-//- params
-'./instn-iee-err-circular-1_FIXTURE.js'
+//- import
+import('./instn-iee-err-circular-1_FIXTURE.js')
 //- body
 assert.sameValue(error.name, 'SyntaxError');
diff --git a/src/dynamic-import/is-call-expression-square-brackets.case b/src/dynamic-import/is-call-expression-square-brackets.case
new file mode 100644
index 0000000000000000000000000000000000000000..9038263ffc96fc522a43dc750db0ea3460fc3dcd
--- /dev/null
+++ b/src/dynamic-import/is-call-expression-square-brackets.case
@@ -0,0 +1,11 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+desc: ImportCall is a CallExpression, it can be followed by square brackets
+template: default
+---*/
+
+//- import
+import('./dynamic-import-module_FIXTURE.js')['then'](x => x)
+//- body
+assert.sameValue(imported.x, 1);
diff --git a/src/dynamic-import/nested-imports.case b/src/dynamic-import/nested-imports.case
new file mode 100644
index 0000000000000000000000000000000000000000..db7b3683914ad26ea4455bc0d9f8750ccd0c975c
--- /dev/null
+++ b/src/dynamic-import/nested-imports.case
@@ -0,0 +1,9 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+desc: ImportCall is a CallExpression can be nested in other import calls
+template: syntax/valid
+---*/
+
+//- import
+import(import(import('./empty_FIXTURE.js')))
diff --git a/src/dynamic-import/not-extensible-args.case b/src/dynamic-import/not-extensible-args.case
new file mode 100644
index 0000000000000000000000000000000000000000..655444498a3422e6ba9db612d0c53b97961c8e4b
--- /dev/null
+++ b/src/dynamic-import/not-extensible-args.case
@@ -0,0 +1,16 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+desc: ImportCall is not extensible - no arguments list
+template: syntax/invalid
+info: |
+  ImportCall :
+      import( AssignmentExpression[+In, ?Yield] )
+
+  Forbidden Extensions
+
+  - ImportCall must not be extended.
+---*/
+
+//- import
+import('', '')
diff --git a/src/dynamic-import/not-extensible-no-trailing-comma.case b/src/dynamic-import/not-extensible-no-trailing-comma.case
new file mode 100644
index 0000000000000000000000000000000000000000..3d97a3b9d9ce39e88c2a71bdb31d94b2e37e22ee
--- /dev/null
+++ b/src/dynamic-import/not-extensible-no-trailing-comma.case
@@ -0,0 +1,16 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+desc: ImportCall is not extensible - trailing comma
+template: syntax/invalid
+info: |
+  ImportCall :
+      import( AssignmentExpression[+In, ?Yield] )
+
+  Forbidden Extensions
+
+  - ImportCall must not be extended.
+---*/
+
+//- import
+import('',)
diff --git a/src/dynamic-import/returns-promise.case b/src/dynamic-import/returns-promise.case
index 0160b0704de9183a98e1e85cfd599974f005ba2d..e03f674d3187a5f96a25f8d50a67e4f8a4be956c 100644
--- a/src/dynamic-import/returns-promise.case
+++ b/src/dynamic-import/returns-promise.case
@@ -6,7 +6,7 @@ desc: Dynamic import() returns a Promise object.
 template: default
 ---*/
 
-//- params
-'./dynamic-import-module_FIXTURE.js'
+//- import
+import('./dynamic-import-module_FIXTURE.js')
 //- body
 assert.sameValue(imported.x, 1);
diff --git a/src/dynamic-import/script-code-valid.case b/src/dynamic-import/script-code-valid.case
new file mode 100644
index 0000000000000000000000000000000000000000..1c4f813a0668348a3b4518bbffe48eecb3790a54
--- /dev/null
+++ b/src/dynamic-import/script-code-valid.case
@@ -0,0 +1,14 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+desc: import() can be used in script code
+template: syntax/valid
+---*/
+
+//- setup
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+//- import
+import('./script-code-valid.js')
diff --git a/src/dynamic-import/syntax/invalid/nested-arrow-assignment-expression.template b/src/dynamic-import/syntax/invalid/nested-arrow-assignment-expression.template
index 98ee16f6a1c89cd50bfe0f2040e04c876bd178d2..639ec1a23c97104d1035ee919b8554fd9bc7a70b 100644
--- a/src/dynamic-import/syntax/invalid/nested-arrow-assignment-expression.template
+++ b/src/dynamic-import/syntax/invalid/nested-arrow-assignment-expression.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 negative:
   phase: parse
diff --git a/src/dynamic-import/syntax/invalid/nested-arrow.template b/src/dynamic-import/syntax/invalid/nested-arrow.template
index 5a50736bae763a2b1b30289b7c1b68a6949d22d6..f92d615bc0ccdbbbf4ff8868e16123534d3c400b 100644
--- a/src/dynamic-import/syntax/invalid/nested-arrow.template
+++ b/src/dynamic-import/syntax/invalid/nested-arrow.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 negative:
   phase: parse
diff --git a/src/dynamic-import/syntax/invalid/nested-async-function-await.template b/src/dynamic-import/syntax/invalid/nested-async-function-await.template
index 4d433c2b1f0508e0dfcbf01ce89f4a609959579e..74087382e113ab83e47944f4dec7b785d6015c9f 100644
--- a/src/dynamic-import/syntax/invalid/nested-async-function-await.template
+++ b/src/dynamic-import/syntax/invalid/nested-async-function-await.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 negative:
   phase: parse
diff --git a/src/dynamic-import/syntax/invalid/nested-async-function-return-await.template b/src/dynamic-import/syntax/invalid/nested-async-function-return-await.template
index 34c7097634621567ab5bbcc348acee290bae764d..661c80920f678a51d27b18a5bdd998b191c42429 100644
--- a/src/dynamic-import/syntax/invalid/nested-async-function-return-await.template
+++ b/src/dynamic-import/syntax/invalid/nested-async-function-return-await.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 negative:
   phase: parse
diff --git a/src/dynamic-import/syntax/invalid/nested-async-function.template b/src/dynamic-import/syntax/invalid/nested-async-function.template
index d84cc931edea39d3924579850f3a1787ef7a5f96..5cb6c074be0eeacf6a8e72d51511a8032ed0ae36 100644
--- a/src/dynamic-import/syntax/invalid/nested-async-function.template
+++ b/src/dynamic-import/syntax/invalid/nested-async-function.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 negative:
   phase: parse
diff --git a/src/dynamic-import/syntax/invalid/nested-block-labeled.template b/src/dynamic-import/syntax/invalid/nested-block-labeled.template
index 2c37acf00882df555a819ec3971bbac7b8759101..e1c86d209f562ccac56bd22001db553fa321914a 100644
--- a/src/dynamic-import/syntax/invalid/nested-block-labeled.template
+++ b/src/dynamic-import/syntax/invalid/nested-block-labeled.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 negative:
   phase: parse
diff --git a/src/dynamic-import/syntax/invalid/nested-block.template b/src/dynamic-import/syntax/invalid/nested-block.template
index d569536bb9b182f364db6140b6e0b82e310f762e..9f8a6e3b6cc8f076a2042135dfdba1609b4e573a 100644
--- a/src/dynamic-import/syntax/invalid/nested-block.template
+++ b/src/dynamic-import/syntax/invalid/nested-block.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 negative:
   phase: parse
diff --git a/src/dynamic-import/syntax/invalid/nested-do-while.template b/src/dynamic-import/syntax/invalid/nested-do-while.template
index 73e567579d51455c3a5220b47f5cadb43f58daae..9d8c705c2e093ec868ee479208ae70ec2c0f6fa0 100644
--- a/src/dynamic-import/syntax/invalid/nested-do-while.template
+++ b/src/dynamic-import/syntax/invalid/nested-do-while.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 negative:
   phase: parse
diff --git a/src/dynamic-import/syntax/invalid/nested-else-braceless.template b/src/dynamic-import/syntax/invalid/nested-else-braceless.template
index 61989c9b593a7df1a19766f4166bc257ffadc919..2a9997ad46d44469a470663f07e77daecfe16d49 100644
--- a/src/dynamic-import/syntax/invalid/nested-else-braceless.template
+++ b/src/dynamic-import/syntax/invalid/nested-else-braceless.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 negative:
   phase: parse
diff --git a/src/dynamic-import/syntax/invalid/nested-else.template b/src/dynamic-import/syntax/invalid/nested-else.template
index 14017d2c5e1a3771b8625d563a0fe4f8262193e6..2042c316628e97e858ef39a2cf56373bdbe52830 100644
--- a/src/dynamic-import/syntax/invalid/nested-else.template
+++ b/src/dynamic-import/syntax/invalid/nested-else.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 negative:
   phase: parse
diff --git a/src/dynamic-import/syntax/invalid/nested-function-return.template b/src/dynamic-import/syntax/invalid/nested-function-return.template
index 1590943656cdf40e32c8816de85f3b77d416a6c1..875e9131fbd1caeb86450d35d1e7ef16d843997b 100644
--- a/src/dynamic-import/syntax/invalid/nested-function-return.template
+++ b/src/dynamic-import/syntax/invalid/nested-function-return.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 negative:
   phase: parse
diff --git a/src/dynamic-import/syntax/invalid/nested-function.template b/src/dynamic-import/syntax/invalid/nested-function.template
index e81ddf9c9aa66d8f9967bcab9f39f7e738a05d9c..df99408228a04d19ffe6d6d5cdf24763369ce77c 100644
--- a/src/dynamic-import/syntax/invalid/nested-function.template
+++ b/src/dynamic-import/syntax/invalid/nested-function.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 negative:
   phase: parse
diff --git a/src/dynamic-import/syntax/invalid/nested-if-braceless.template b/src/dynamic-import/syntax/invalid/nested-if-braceless.template
index 7f51cb411b9cb75a27d811ad2d6444aef1366443..820a1161ca2543bf7f61e33c9b974035a1fbcde4 100644
--- a/src/dynamic-import/syntax/invalid/nested-if-braceless.template
+++ b/src/dynamic-import/syntax/invalid/nested-if-braceless.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 negative:
   phase: parse
diff --git a/src/dynamic-import/syntax/invalid/nested-if.template b/src/dynamic-import/syntax/invalid/nested-if.template
index 830eab471b025d4d06cbbb6463cdbcac8f58d54d..202e3517efe2568e9e07a6649a33ca8f83cc1569 100644
--- a/src/dynamic-import/syntax/invalid/nested-if.template
+++ b/src/dynamic-import/syntax/invalid/nested-if.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 negative:
   phase: parse
diff --git a/src/dynamic-import/syntax/invalid/nested-while.template b/src/dynamic-import/syntax/invalid/nested-while.template
index daeb7b4a447d5642feba19a29c80b43390a02477..a2c27248ef358435566dfe3bfa545a40b259730b 100644
--- a/src/dynamic-import/syntax/invalid/nested-while.template
+++ b/src/dynamic-import/syntax/invalid/nested-while.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 negative:
   phase: parse
diff --git a/src/dynamic-import/syntax/invalid/nested-with.template b/src/dynamic-import/syntax/invalid/nested-with.template
new file mode 100644
index 0000000000000000000000000000000000000000..225b9b44badefc6a08bb9b30102ec1501cc1e697
--- /dev/null
+++ b/src/dynamic-import/syntax/invalid/nested-with.template
@@ -0,0 +1,32 @@
+// Copyright (C) 2018 Rick Waldron. All rights reserved.
+// Copyright (C) 2018 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+path: language/module-code/dynamic-import/syntax/invalid/nested-with-
+name: nested with syntax
+esid: sec-import-call-runtime-semantics-evaluation
+info: |
+  ImportCall :
+      import( AssignmentExpression )
+
+  1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+  2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+  3. Let argRef be the result of evaluating AssignmentExpression.
+  4. Let specifier be ? GetValue(argRef).
+  5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+  6. Let specifierString be ToString(specifier).
+  7. IfAbruptRejectPromise(specifierString, promiseCapability).
+  8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+  9. Return promiseCapability.[[Promise]].
+features: [dynamic-import]
+flags: [noStrict]
+negative:
+  phase: parse
+  type: SyntaxError
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+with ({}) {
+  /*{ import }*/;
+}
diff --git a/src/dynamic-import/syntax/invalid/top-level.template b/src/dynamic-import/syntax/invalid/top-level.template
index c85c6393ebc57c599eefbdec79b04e75215e228f..31fb845cb3d21171b5a47ae95bce1299ced0d7af 100644
--- a/src/dynamic-import/syntax/invalid/top-level.template
+++ b/src/dynamic-import/syntax/invalid/top-level.template
@@ -8,8 +8,6 @@ esid: sec-import-call-runtime-semantics-evaluation
 info: |
   ImportCall :
       import( AssignmentExpression )
-
-flags: [module]
 features: [dynamic-import]
 negative:
   phase: parse
diff --git a/src/dynamic-import/syntax/valid/nested-arrow-assignment-expression.template b/src/dynamic-import/syntax/valid/nested-arrow-assignment-expression.template
index 1e3b61b9d5ada4716d1c963c0b84e6eb122eaf1d..5b06b5c8a106a4b501cbf56cdf59b90113647ddd 100644
--- a/src/dynamic-import/syntax/valid/nested-arrow-assignment-expression.template
+++ b/src/dynamic-import/syntax/valid/nested-arrow-assignment-expression.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 ---*/
 
diff --git a/src/dynamic-import/syntax/valid/nested-arrow.template b/src/dynamic-import/syntax/valid/nested-arrow.template
index f906eaa4dd1de93639cc8d51f69f290711ca2624..491052c1572adc526b4d91dda322b33b4e31b9af 100644
--- a/src/dynamic-import/syntax/valid/nested-arrow.template
+++ b/src/dynamic-import/syntax/valid/nested-arrow.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-
 features: [dynamic-import]
 ---*/
 
diff --git a/src/dynamic-import/syntax/valid/nested-async-function-await.template b/src/dynamic-import/syntax/valid/nested-async-function-await.template
index 0480ab68fda99065f4ac65978d71feabd702d335..1072d23a06630d37f36fbeffa5000b68e34b6ee1 100644
--- a/src/dynamic-import/syntax/valid/nested-async-function-await.template
+++ b/src/dynamic-import/syntax/valid/nested-async-function-await.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-
 features: [dynamic-import]
 ---*/
 
diff --git a/src/dynamic-import/syntax/valid/nested-async-function-return-await.template b/src/dynamic-import/syntax/valid/nested-async-function-return-await.template
index d9063ca78f55f21910170a651c3b75b387652bef..6ae8c305b54133b43019d8b650ee9722118d896c 100644
--- a/src/dynamic-import/syntax/valid/nested-async-function-return-await.template
+++ b/src/dynamic-import/syntax/valid/nested-async-function-return-await.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-
 features: [dynamic-import]
 ---*/
 
diff --git a/src/dynamic-import/syntax/valid/nested-async-function.template b/src/dynamic-import/syntax/valid/nested-async-function.template
index f358c16314566d1fcf6fc127d81461b268251d84..cec45979baee6c5c1de0f8261b2829763a5bb0c2 100644
--- a/src/dynamic-import/syntax/valid/nested-async-function.template
+++ b/src/dynamic-import/syntax/valid/nested-async-function.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-
 features: [dynamic-import]
 ---*/
 
diff --git a/src/dynamic-import/syntax/valid/nested-block-labeled.template b/src/dynamic-import/syntax/valid/nested-block-labeled.template
index 970edc5fb7805d1de5f93140ab1087ea622a6f83..cb85b8bcd375967852f997d0cceedeb267876643 100644
--- a/src/dynamic-import/syntax/valid/nested-block-labeled.template
+++ b/src/dynamic-import/syntax/valid/nested-block-labeled.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-
 features: [dynamic-import]
 ---*/
 
diff --git a/src/dynamic-import/syntax/valid/nested-block.template b/src/dynamic-import/syntax/valid/nested-block.template
index 38e23565162dd9059e1cf146cf12957963ce19c6..18d711ee761145fe93bfc6d7d5370f988e479326 100644
--- a/src/dynamic-import/syntax/valid/nested-block.template
+++ b/src/dynamic-import/syntax/valid/nested-block.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-
 features: [dynamic-import]
 ---*/
 
diff --git a/src/dynamic-import/syntax/valid/nested-do-while.template b/src/dynamic-import/syntax/valid/nested-do-while.template
index a269d99144a2cddca4293a3b1be2ab27eeec856b..b2c71cd73f9a9b7208e2cd904dffc0c0e8150e3e 100644
--- a/src/dynamic-import/syntax/valid/nested-do-while.template
+++ b/src/dynamic-import/syntax/valid/nested-do-while.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-
 features: [dynamic-import]
 ---*/
 
diff --git a/src/dynamic-import/syntax/valid/nested-else-braceless.template b/src/dynamic-import/syntax/valid/nested-else-braceless.template
index 86948d93027255caa641f42b8a49ffcb67be71a9..f031a07c5ca79eb875b7145ec4a8096b385aeb23 100644
--- a/src/dynamic-import/syntax/valid/nested-else-braceless.template
+++ b/src/dynamic-import/syntax/valid/nested-else-braceless.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-
 features: [dynamic-import]
 ---*/
 
diff --git a/src/dynamic-import/syntax/valid/nested-else.template b/src/dynamic-import/syntax/valid/nested-else.template
index 1f93708b692cff40108c74e62aa6a4c9f696e49e..81c10cdcfa6e2812243089edbc94533c79def157 100644
--- a/src/dynamic-import/syntax/valid/nested-else.template
+++ b/src/dynamic-import/syntax/valid/nested-else.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-
 features: [dynamic-import]
 ---*/
 
diff --git a/src/dynamic-import/syntax/valid/nested-function-return.template b/src/dynamic-import/syntax/valid/nested-function-return.template
index db04a04757e54297c28c37b36f171b06939e7e9c..619d369cb1f790e330d350aea0fcf7cad674bf41 100644
--- a/src/dynamic-import/syntax/valid/nested-function-return.template
+++ b/src/dynamic-import/syntax/valid/nested-function-return.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 ---*/
 
diff --git a/src/dynamic-import/syntax/valid/nested-function.template b/src/dynamic-import/syntax/valid/nested-function.template
index 8fd7eff00dce5e181c62ac57c9c947eafcaf8fa9..25c730bba680af302737168bce0256842db87c18 100644
--- a/src/dynamic-import/syntax/valid/nested-function.template
+++ b/src/dynamic-import/syntax/valid/nested-function.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 ---*/
 
diff --git a/src/dynamic-import/syntax/valid/nested-if-braceless.template b/src/dynamic-import/syntax/valid/nested-if-braceless.template
index 0cd924889fd8bd33ee1ee3fd0b773f347bb53a22..a620bad7e37831bc11dc70b28615257c70168cb8 100644
--- a/src/dynamic-import/syntax/valid/nested-if-braceless.template
+++ b/src/dynamic-import/syntax/valid/nested-if-braceless.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-
 features: [dynamic-import]
 ---*/
 
diff --git a/src/dynamic-import/syntax/valid/nested-if.template b/src/dynamic-import/syntax/valid/nested-if.template
index 5cebc7a6281d20e9929f310973ffc1962b4e71fd..a8add970defae4ffa3c972b028f547bca574c2e1 100644
--- a/src/dynamic-import/syntax/valid/nested-if.template
+++ b/src/dynamic-import/syntax/valid/nested-if.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-
 features: [dynamic-import]
 ---*/
 
diff --git a/src/dynamic-import/syntax/valid/nested-while.template b/src/dynamic-import/syntax/valid/nested-while.template
index ac2cd12bf151a4e3e503c4b2a1752ad62cf7bd96..d1cffee34988bc0afce0b2af2be57f3a4b830a04 100644
--- a/src/dynamic-import/syntax/valid/nested-while.template
+++ b/src/dynamic-import/syntax/valid/nested-while.template
@@ -18,8 +18,6 @@ info: |
   7. IfAbruptRejectPromise(specifierString, promiseCapability).
   8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
   9. Return promiseCapability.[[Promise]].
-
-flags: [module]
 features: [dynamic-import]
 ---*/
 
diff --git a/src/dynamic-import/syntax/valid/nested-with.template b/src/dynamic-import/syntax/valid/nested-with.template
new file mode 100644
index 0000000000000000000000000000000000000000..8ee2d5a61c888eeaacb7eb01013800f6e40fec8f
--- /dev/null
+++ b/src/dynamic-import/syntax/valid/nested-with.template
@@ -0,0 +1,27 @@
+// Copyright (C) 2018 Rick Waldron. All rights reserved.
+// Copyright (C) 2018 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+path: language/module-code/dynamic-import/syntax/valid/nested-with-
+name: nested with syntax
+esid: sec-import-call-runtime-semantics-evaluation
+info: |
+  ImportCall :
+      import( AssignmentExpression )
+
+  1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+  2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+  3. Let argRef be the result of evaluating AssignmentExpression.
+  4. Let specifier be ? GetValue(argRef).
+  5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+  6. Let specifierString be ToString(specifier).
+  7. IfAbruptRejectPromise(specifierString, promiseCapability).
+  8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+  9. Return promiseCapability.[[Promise]].
+features: [dynamic-import]
+flags: [noStrict]
+---*/
+
+with ({}) {
+  /*{ import }*/;
+}
diff --git a/src/dynamic-import/syntax/valid/top-level.template b/src/dynamic-import/syntax/valid/top-level.template
index 33387103d8542a4d6c411b15b86086592f399cf2..ba421abeec7480c0926f52c339b604a08d5549bc 100644
--- a/src/dynamic-import/syntax/valid/top-level.template
+++ b/src/dynamic-import/syntax/valid/top-level.template
@@ -8,8 +8,6 @@ esid: sec-import-call-runtime-semantics-evaluation
 info: |
   ImportCall :
       import( AssignmentExpression )
-
-flags: [module]
 features: [dynamic-import]
 ---*/
 
diff --git a/test/language/module-code/dynamic-import/catch/nested-arrow-import-catch-file-does-not-exist.js b/test/language/module-code/dynamic-import/catch/nested-arrow-import-catch-file-does-not-exist.js
new file mode 100644
index 0000000000000000000000000000000000000000..e20fea77bb00ea9dffdd3924b66d159c1a05f1fa
--- /dev/null
+++ b/test/language/module-code/dynamic-import/catch/nested-arrow-import-catch-file-does-not-exist.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/file-does-not-exist.case
+// - src/dynamic-import/catch/nested-arrow.template
+/*---
+description: Non existent file can't resolve to a Script or Module Record (nested arrow)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    If a Module Record corresponding to the pair referencingModulereferencingScriptOrModule,
+    specifier does not exist or cannot be created, an exception must be thrown.
+
+---*/
+
+let f = () => {
+  import('./THIS_FILE_DOES_NOT_EXIST.js').catch(error => {
+
+    assert.notSameValue(typeof error, 'undefined');
+
+  }).then($DONE, $DONE);
+};
+
+f();
diff --git a/test/language/module-code/dynamic-import/catch/nested-async-function-await-file-does-not-exist.js b/test/language/module-code/dynamic-import/catch/nested-async-function-await-file-does-not-exist.js
new file mode 100644
index 0000000000000000000000000000000000000000..dc7aed766ddc4352faf43e4dc288d1f08970ae8b
--- /dev/null
+++ b/test/language/module-code/dynamic-import/catch/nested-async-function-await-file-does-not-exist.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/file-does-not-exist.case
+// - src/dynamic-import/catch/nested-async-function-await.template
+/*---
+description: Non existent file can't resolve to a Script or Module Record (nested in async function, awaited)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    If a Module Record corresponding to the pair referencingModulereferencingScriptOrModule,
+    specifier does not exist or cannot be created, an exception must be thrown.
+
+---*/
+
+async function f() {
+  await import('./THIS_FILE_DOES_NOT_EXIST.js').catch(error => {
+
+    assert.notSameValue(typeof error, 'undefined');
+
+  }).then($DONE, $DONE);
+}
+
+f();
diff --git a/test/language/module-code/dynamic-import/catch/nested-async-function-file-does-not-exist.js b/test/language/module-code/dynamic-import/catch/nested-async-function-file-does-not-exist.js
new file mode 100644
index 0000000000000000000000000000000000000000..cb69b14cefaf9680b7110a78e0716d7a8016164e
--- /dev/null
+++ b/test/language/module-code/dynamic-import/catch/nested-async-function-file-does-not-exist.js
@@ -0,0 +1,38 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/file-does-not-exist.case
+// - src/dynamic-import/catch/nested-async-function.template
+/*---
+description: Non existent file can't resolve to a Script or Module Record (nested in async function)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    If a Module Record corresponding to the pair referencingModulereferencingScriptOrModule,
+    specifier does not exist or cannot be created, an exception must be thrown.
+
+---*/
+
+async function f() {
+  import('./THIS_FILE_DOES_NOT_EXIST.js').catch(error => {
+
+    assert.notSameValue(typeof error, 'undefined');
+
+  }).then($DONE, $DONE);
+}
+
+f();
+
diff --git a/test/language/module-code/dynamic-import/catch/nested-async-function-return-await-file-does-not-exist.js b/test/language/module-code/dynamic-import/catch/nested-async-function-return-await-file-does-not-exist.js
new file mode 100644
index 0000000000000000000000000000000000000000..9ed17fc2f283c02f988f3ecdeb3dc417580bad99
--- /dev/null
+++ b/test/language/module-code/dynamic-import/catch/nested-async-function-return-await-file-does-not-exist.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/file-does-not-exist.case
+// - src/dynamic-import/catch/nested-async-function-return-await.template
+/*---
+description: Non existent file can't resolve to a Script or Module Record (nested in async function, returns awaited)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    If a Module Record corresponding to the pair referencingModulereferencingScriptOrModule,
+    specifier does not exist or cannot be created, an exception must be thrown.
+
+---*/
+
+async function f() {
+  return await import('./THIS_FILE_DOES_NOT_EXIST.js').catch(error => {
+
+    assert.notSameValue(typeof error, 'undefined');
+
+  }).then($DONE, $DONE);
+}
+
+f();
diff --git a/test/language/module-code/dynamic-import/catch/nested-block-import-catch-file-does-not-exist.js b/test/language/module-code/dynamic-import/catch/nested-block-import-catch-file-does-not-exist.js
new file mode 100644
index 0000000000000000000000000000000000000000..b15eca60ac060ce974094317c42bb9684b629081
--- /dev/null
+++ b/test/language/module-code/dynamic-import/catch/nested-block-import-catch-file-does-not-exist.js
@@ -0,0 +1,35 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/file-does-not-exist.case
+// - src/dynamic-import/catch/nested-block.template
+/*---
+description: Non existent file can't resolve to a Script or Module Record (nested block)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    If a Module Record corresponding to the pair referencingModulereferencingScriptOrModule,
+    specifier does not exist or cannot be created, an exception must be thrown.
+
+---*/
+
+{
+  import('./THIS_FILE_DOES_NOT_EXIST.js').catch(error => {
+
+    assert.notSameValue(typeof error, 'undefined');
+
+  }).then($DONE, $DONE);
+};
diff --git a/test/language/module-code/dynamic-import/catch/nested-block-labeled-file-does-not-exist.js b/test/language/module-code/dynamic-import/catch/nested-block-labeled-file-does-not-exist.js
new file mode 100644
index 0000000000000000000000000000000000000000..b111ce36c005336709d3aeaa39a0d2059b775854
--- /dev/null
+++ b/test/language/module-code/dynamic-import/catch/nested-block-labeled-file-does-not-exist.js
@@ -0,0 +1,35 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/file-does-not-exist.case
+// - src/dynamic-import/catch/nested-block-labeled.template
+/*---
+description: Non existent file can't resolve to a Script or Module Record (nested block syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    If a Module Record corresponding to the pair referencingModulereferencingScriptOrModule,
+    specifier does not exist or cannot be created, an exception must be thrown.
+
+---*/
+
+label: {
+  import('./THIS_FILE_DOES_NOT_EXIST.js').catch(error => {
+
+    assert.notSameValue(typeof error, 'undefined');
+
+  }).then($DONE, $DONE);
+};
diff --git a/test/language/module-code/dynamic-import/catch/nested-do-while-file-does-not-exist.js b/test/language/module-code/dynamic-import/catch/nested-do-while-file-does-not-exist.js
new file mode 100644
index 0000000000000000000000000000000000000000..7dd7497a8ac7498d67a0d34da1451c9639c3aee0
--- /dev/null
+++ b/test/language/module-code/dynamic-import/catch/nested-do-while-file-does-not-exist.js
@@ -0,0 +1,35 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/file-does-not-exist.case
+// - src/dynamic-import/catch/nested-do-while.template
+/*---
+description: Non existent file can't resolve to a Script or Module Record (nested do while syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    If a Module Record corresponding to the pair referencingModulereferencingScriptOrModule,
+    specifier does not exist or cannot be created, an exception must be thrown.
+
+---*/
+
+do {
+  import('./THIS_FILE_DOES_NOT_EXIST.js').catch(error => {
+
+    assert.notSameValue(typeof error, 'undefined');
+
+  }).then($DONE, $DONE);
+} while (false);
diff --git a/test/language/module-code/dynamic-import/catch/nested-else-import-catch-file-does-not-exist.js b/test/language/module-code/dynamic-import/catch/nested-else-import-catch-file-does-not-exist.js
new file mode 100644
index 0000000000000000000000000000000000000000..089f06a196a7de95ff10c833ea764e065cefbba5
--- /dev/null
+++ b/test/language/module-code/dynamic-import/catch/nested-else-import-catch-file-does-not-exist.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/file-does-not-exist.case
+// - src/dynamic-import/catch/nested-else.template
+/*---
+description: Non existent file can't resolve to a Script or Module Record (nested else)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    If a Module Record corresponding to the pair referencingModulereferencingScriptOrModule,
+    specifier does not exist or cannot be created, an exception must be thrown.
+
+---*/
+
+if (false) {
+
+} else {
+  import('./THIS_FILE_DOES_NOT_EXIST.js').catch(error => {
+
+    assert.notSameValue(typeof error, 'undefined');
+
+  }).then($DONE, $DONE);
+}
diff --git a/test/language/module-code/dynamic-import/catch/nested-function-import-catch-file-does-not-exist.js b/test/language/module-code/dynamic-import/catch/nested-function-import-catch-file-does-not-exist.js
new file mode 100644
index 0000000000000000000000000000000000000000..ba5f1660af7f0ff6505fc83793c6f85af2462326
--- /dev/null
+++ b/test/language/module-code/dynamic-import/catch/nested-function-import-catch-file-does-not-exist.js
@@ -0,0 +1,36 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/file-does-not-exist.case
+// - src/dynamic-import/catch/nested-function.template
+/*---
+description: Non existent file can't resolve to a Script or Module Record (nested function)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    If a Module Record corresponding to the pair referencingModulereferencingScriptOrModule,
+    specifier does not exist or cannot be created, an exception must be thrown.
+
+---*/
+
+function f() {
+  import('./THIS_FILE_DOES_NOT_EXIST.js').catch(error => {
+
+    assert.notSameValue(typeof error, 'undefined');
+
+  }).then($DONE, $DONE);
+}
+f();
diff --git a/test/language/module-code/dynamic-import/catch/nested-if-import-catch-file-does-not-exist.js b/test/language/module-code/dynamic-import/catch/nested-if-import-catch-file-does-not-exist.js
new file mode 100644
index 0000000000000000000000000000000000000000..623ae7166236fa2622c5108e19645dd48ebaa465
--- /dev/null
+++ b/test/language/module-code/dynamic-import/catch/nested-if-import-catch-file-does-not-exist.js
@@ -0,0 +1,35 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/file-does-not-exist.case
+// - src/dynamic-import/catch/nested-if.template
+/*---
+description: Non existent file can't resolve to a Script or Module Record (nested if)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    If a Module Record corresponding to the pair referencingModulereferencingScriptOrModule,
+    specifier does not exist or cannot be created, an exception must be thrown.
+
+---*/
+
+if (true) {
+  import('./THIS_FILE_DOES_NOT_EXIST.js').catch(error => {
+
+    assert.notSameValue(typeof error, 'undefined');
+
+  }).then($DONE, $DONE);
+}
diff --git a/test/language/module-code/dynamic-import/catch/nested-while-import-catch-file-does-not-exist.js b/test/language/module-code/dynamic-import/catch/nested-while-import-catch-file-does-not-exist.js
new file mode 100644
index 0000000000000000000000000000000000000000..671238e7c353af7602e9ae4de3b846e140757822
--- /dev/null
+++ b/test/language/module-code/dynamic-import/catch/nested-while-import-catch-file-does-not-exist.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/file-does-not-exist.case
+// - src/dynamic-import/catch/nested-while.template
+/*---
+description: Non existent file can't resolve to a Script or Module Record (nested while)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    If a Module Record corresponding to the pair referencingModulereferencingScriptOrModule,
+    specifier does not exist or cannot be created, an exception must be thrown.
+
+---*/
+
+let x = 0;
+while (!x) {
+  x++;
+  import('./THIS_FILE_DOES_NOT_EXIST.js').catch(error => {
+
+    assert.notSameValue(typeof error, 'undefined');
+
+  }).then($DONE, $DONE);
+};
diff --git a/test/language/module-code/dynamic-import/catch/nested-with-import-catch-eval-rqstd-abrupt-typeerror.js b/test/language/module-code/dynamic-import/catch/nested-with-import-catch-eval-rqstd-abrupt-typeerror.js
new file mode 100644
index 0000000000000000000000000000000000000000..cf8b175614cfc93e51a8dd345e565783c4105d3f
--- /dev/null
+++ b/test/language/module-code/dynamic-import/catch/nested-with-import-catch-eval-rqstd-abrupt-typeerror.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/eval-rqstd-abrupt-typeerror.case
+// - src/dynamic-import/catch/nested-with.template
+/*---
+description: Abrupt completion during module evaluation precludes further evaluation (nested with)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async, noStrict]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    [...]
+    6. For each String required that is an element of
+       module.[[RequestedModules]] do,
+       a. Let requiredModule be ? HostResolveImportedModule(module, required).
+       b. Perform ? requiredModule.ModuleEvaluation().
+
+---*/
+
+with ({}) {
+    import('./eval-rqstd-abrupt-err-type_FIXTURE.js').catch(error => {
+  
+        assert.sameValue(error.name, 'TypeError');
+  
+    }).then($DONE, $DONE);
+}
+  
\ No newline at end of file
diff --git a/test/language/module-code/dynamic-import/catch/nested-with-import-catch-eval-rqstd-abrupt-urierror.js b/test/language/module-code/dynamic-import/catch/nested-with-import-catch-eval-rqstd-abrupt-urierror.js
new file mode 100644
index 0000000000000000000000000000000000000000..7544674b0bdb3b36c661be904965c92f71ff31a9
--- /dev/null
+++ b/test/language/module-code/dynamic-import/catch/nested-with-import-catch-eval-rqstd-abrupt-urierror.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/eval-rqstd-abrupt-urierror.case
+// - src/dynamic-import/catch/nested-with.template
+/*---
+description: Abrupt completion during module evaluation precludes further evaluation (nested with)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async, noStrict]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    [...]
+    6. For each String required that is an element of
+       module.[[RequestedModules]] do,
+       a. Let requiredModule be ? HostResolveImportedModule(module, required).
+       b. Perform ? requiredModule.ModuleEvaluation().
+
+---*/
+
+with ({}) {
+    import('./eval-rqstd-abrupt-err-uri_FIXTURE.js').catch(error => {
+  
+        assert.sameValue(error.name, 'URIError');
+  
+    }).then($DONE, $DONE);
+}
+  
\ No newline at end of file
diff --git a/test/language/module-code/dynamic-import/catch/nested-with-import-catch-file-does-not-exist.js b/test/language/module-code/dynamic-import/catch/nested-with-import-catch-file-does-not-exist.js
new file mode 100644
index 0000000000000000000000000000000000000000..082c42f568af3ce9417f5574b63a90630811057e
--- /dev/null
+++ b/test/language/module-code/dynamic-import/catch/nested-with-import-catch-file-does-not-exist.js
@@ -0,0 +1,36 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/file-does-not-exist.case
+// - src/dynamic-import/catch/nested-with.template
+/*---
+description: Non existent file can't resolve to a Script or Module Record (nested with)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async, noStrict]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    If a Module Record corresponding to the pair referencingModulereferencingScriptOrModule,
+    specifier does not exist or cannot be created, an exception must be thrown.
+
+---*/
+
+with ({}) {
+    import('./THIS_FILE_DOES_NOT_EXIST.js').catch(error => {
+  
+        assert.notSameValue(typeof error, 'undefined');
+  
+    }).then($DONE, $DONE);
+}
+  
\ No newline at end of file
diff --git a/test/language/module-code/dynamic-import/catch/nested-with-import-catch-instn-iee-err-ambiguous-import.js b/test/language/module-code/dynamic-import/catch/nested-with-import-catch-instn-iee-err-ambiguous-import.js
new file mode 100644
index 0000000000000000000000000000000000000000..028e8d510457ea0b80e04643c81514f103a80e95
--- /dev/null
+++ b/test/language/module-code/dynamic-import/catch/nested-with-import-catch-instn-iee-err-ambiguous-import.js
@@ -0,0 +1,60 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/instn-iee-err-ambiguous-import.case
+// - src/dynamic-import/catch/nested-with.template
+/*---
+description: IndirectExportEntries validation - ambiguous imported bindings (nested with)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async, noStrict]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    [...]
+    9. For each ExportEntry Record e in module.[[IndirectExportEntries]], do
+       a. Let resolution be ? module.ResolveExport(e.[[ExportName]], « », « »).
+       b. If resolution is null or resolution is "ambiguous", throw a
+          SyntaxError exception.
+    [...]
+
+    15.2.1.16.3 ResolveExport
+
+    [...]
+    9. Let starResolution be null.
+    10. For each ExportEntry Record e in module.[[StarExportEntries]], do
+        a. Let importedModule be ? HostResolveImportedModule(module,
+           e.[[ModuleRequest]]).
+        b. Let resolution be ? importedModule.ResolveExport(exportName,
+           resolveSet, exportStarSet).
+        c. If resolution is "ambiguous", return "ambiguous".
+        d. If resolution is not null, then
+           i. If starResolution is null, let starResolution be resolution.
+           ii. Else,
+               1. Assert: there is more than one * import that includes the
+                  requested name.
+               2. If resolution.[[Module]] and starResolution.[[Module]] are
+                  not the same Module Record or
+                  SameValue(resolution.[[BindingName]],
+                  starResolution.[[BindingName]]) is false, return "ambiguous".
+
+---*/
+
+with ({}) {
+    import('./instn-iee-err-ambiguous-export_FIXTURE.js').catch(error => {
+  
+        assert.sameValue(error.name, 'SyntaxError');
+  
+    }).then($DONE, $DONE);
+}
+  
\ No newline at end of file
diff --git a/test/language/module-code/dynamic-import/catch/nested-with-import-catch-instn-iee-err-circular.js b/test/language/module-code/dynamic-import/catch/nested-with-import-catch-instn-iee-err-circular.js
new file mode 100644
index 0000000000000000000000000000000000000000..07dd99c5019d9b3192e3ded3d0cc4d92ffbe8625
--- /dev/null
+++ b/test/language/module-code/dynamic-import/catch/nested-with-import-catch-instn-iee-err-circular.js
@@ -0,0 +1,49 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/instn-iee-err-circular.case
+// - src/dynamic-import/catch/nested-with.template
+/*---
+description: IndirectExportEntries validation - circular imported bindings (nested with)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async, noStrict]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    [...]
+    9. For each ExportEntry Record e in module.[[IndirectExportEntries]], do
+       a. Let resolution be ? module.ResolveExport(e.[[ExportName]], « », « »).
+       b. If resolution is null or resolution is "ambiguous", throw a
+          SyntaxError exception.
+    [...]
+
+    15.2.1.16.3 ResolveExport
+
+    [...]
+    2. For each Record {[[Module]], [[ExportName]]} r in resolveSet, do:
+       a. If module and r.[[Module]] are the same Module Record and
+          SameValue(exportName, r.[[ExportName]]) is true, then
+          i. Assert: this is a circular import request.
+          ii. Return null.
+
+---*/
+
+with ({}) {
+    import('./instn-iee-err-circular-1_FIXTURE.js').catch(error => {
+  
+        assert.sameValue(error.name, 'SyntaxError');
+  
+    }).then($DONE, $DONE);
+}
+  
\ No newline at end of file
diff --git a/test/language/module-code/dynamic-import/catch/top-level-import-catch-file-does-not-exist.js b/test/language/module-code/dynamic-import/catch/top-level-import-catch-file-does-not-exist.js
new file mode 100644
index 0000000000000000000000000000000000000000..cbf8c6913221b1598b6a89bbd51292c623d56165
--- /dev/null
+++ b/test/language/module-code/dynamic-import/catch/top-level-import-catch-file-does-not-exist.js
@@ -0,0 +1,33 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/file-does-not-exist.case
+// - src/dynamic-import/catch/top-level.template
+/*---
+description: Non existent file can't resolve to a Script or Module Record (top level)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    If a Module Record corresponding to the pair referencingModulereferencingScriptOrModule,
+    specifier does not exist or cannot be created, an exception must be thrown.
+
+---*/
+
+import('./THIS_FILE_DOES_NOT_EXIST.js').catch(error => {
+
+  assert.notSameValue(typeof error, 'undefined');
+
+}).then($DONE, $DONE);
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expr-not-optional.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expr-not-optional.js
index 96a8bb62471b251709598357f410057c9a1f2001..1c22154efb03ac7b8d9a0d1112f06cbf6c8397dd 100644
--- a/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expr-not-optional.js
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expr-not-optional.js
@@ -5,7 +5,7 @@
 description: It's a SyntaxError if AssignmentExpression is omitted (nested arrow syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 negative:
   phase: parse
   type: SyntaxError
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-assignment-expr-not-optional.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-assignment-expr-not-optional.js
index 825bdf5c31337669f0311246254dfe8ed1e7dff5..cffc0b81b83420a7e645bde1436a8e0537b174c2 100644
--- a/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-assignment-expr-not-optional.js
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-assignment-expr-not-optional.js
@@ -5,7 +5,7 @@
 description: It's a SyntaxError if AssignmentExpression is omitted (nested arrow syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 negative:
   phase: parse
   type: SyntaxError
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-not-extensible-args.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-not-extensible-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..649537df22284ebef20ced849a13763ed72553d5
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-not-extensible-args.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-args.case
+// - src/dynamic-import/syntax/invalid/nested-arrow-assignment-expression.template
+/*---
+description: ImportCall is not extensible - no arguments list (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+let f = () => import('', '');
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-not-extensible-no-trailing-comma.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-not-extensible-no-trailing-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..f567a656b67bbf4c6b187b1493920884624fc66b
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-assignment-expression-not-extensible-no-trailing-comma.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-no-trailing-comma.case
+// - src/dynamic-import/syntax/invalid/nested-arrow-assignment-expression.template
+/*---
+description: ImportCall is not extensible - trailing comma (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+let f = () => import('',);
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-not-extensible-args.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-not-extensible-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..892ba946de483293a7aecc7da1bcb8976aec5e4e
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-not-extensible-args.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-args.case
+// - src/dynamic-import/syntax/invalid/nested-arrow.template
+/*---
+description: ImportCall is not extensible - no arguments list (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+let f = () => {
+  import('', '');
+};
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-not-extensible-no-trailing-comma.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-not-extensible-no-trailing-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..7a1ac82403ea772ede087825d0c121c80a6ac970
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-arrow-not-extensible-no-trailing-comma.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-no-trailing-comma.case
+// - src/dynamic-import/syntax/invalid/nested-arrow.template
+/*---
+description: ImportCall is not extensible - trailing comma (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+let f = () => {
+  import('',);
+};
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-assignment-expr-not-optional.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-assignment-expr-not-optional.js
index 622142e8491fda5307e522e61413388d2d996e83..43fd7992b22b7bf2f24547f41713e3ec9da0c306 100644
--- a/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-assignment-expr-not-optional.js
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-assignment-expr-not-optional.js
@@ -5,7 +5,7 @@
 description: It's a SyntaxError if AssignmentExpression is omitted (nested arrow syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 negative:
   phase: parse
   type: SyntaxError
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-await-assignment-expr-not-optional.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-await-assignment-expr-not-optional.js
index f36a527edc33433b4bcd9beb2a5e898deb2e0e7a..3bf559403517eb2845af621479b0ea2e36c2d13d 100644
--- a/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-await-assignment-expr-not-optional.js
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-await-assignment-expr-not-optional.js
@@ -5,7 +5,7 @@
 description: It's a SyntaxError if AssignmentExpression is omitted (nested arrow syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 negative:
   phase: parse
   type: SyntaxError
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-await-not-extensible-args.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-await-not-extensible-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..95af703720cfd7c38f766ce8715924d9483dd118
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-await-not-extensible-args.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-args.case
+// - src/dynamic-import/syntax/invalid/nested-async-function-await.template
+/*---
+description: ImportCall is not extensible - no arguments list (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+async function f() {
+  await import('', '');
+}
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-await-not-extensible-no-trailing-comma.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-await-not-extensible-no-trailing-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..610e918d46eb4757f4215443e7a5b05412131b8d
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-await-not-extensible-no-trailing-comma.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-no-trailing-comma.case
+// - src/dynamic-import/syntax/invalid/nested-async-function-await.template
+/*---
+description: ImportCall is not extensible - trailing comma (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+async function f() {
+  await import('',);
+}
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-not-extensible-args.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-not-extensible-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..91dd884497feb7dec837c8cb344a29611bea5fba
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-not-extensible-args.js
@@ -0,0 +1,40 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-args.case
+// - src/dynamic-import/syntax/invalid/nested-async-function.template
+/*---
+description: ImportCall is not extensible - no arguments list (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+async function f() {
+  import('', '');
+}
+
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-not-extensible-no-trailing-comma.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-not-extensible-no-trailing-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..db47b50c3a03dce058f2a91ef9f6d88e40d36d90
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-not-extensible-no-trailing-comma.js
@@ -0,0 +1,40 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-no-trailing-comma.case
+// - src/dynamic-import/syntax/invalid/nested-async-function.template
+/*---
+description: ImportCall is not extensible - trailing comma (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+async function f() {
+  import('',);
+}
+
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-return-await-assignment-expr-not-optional.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-return-await-assignment-expr-not-optional.js
index e4bc337d8c4eb835f4aa0ceb6853269f86fc53a5..7663c36529dde0c9b494858bc633f4d0ccca54d7 100644
--- a/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-return-await-assignment-expr-not-optional.js
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-return-await-assignment-expr-not-optional.js
@@ -5,7 +5,7 @@
 description: It's a SyntaxError if AssignmentExpression is omitted (nested arrow syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 negative:
   phase: parse
   type: SyntaxError
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-return-await-not-extensible-args.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-return-await-not-extensible-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..a91e9d1f633395ae11dab34554fec0688efe273c
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-return-await-not-extensible-args.js
@@ -0,0 +1,40 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-args.case
+// - src/dynamic-import/syntax/invalid/nested-async-function-return-await.template
+/*---
+description: ImportCall is not extensible - no arguments list (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+async function f() {
+  return await import('', '');
+}
+
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-return-await-not-extensible-no-trailing-comma.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-return-await-not-extensible-no-trailing-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..873820d4100788cb9f44296ac6af235785c9b68e
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-async-function-return-await-not-extensible-no-trailing-comma.js
@@ -0,0 +1,40 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-no-trailing-comma.case
+// - src/dynamic-import/syntax/invalid/nested-async-function-return-await.template
+/*---
+description: ImportCall is not extensible - trailing comma (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+async function f() {
+  return await import('',);
+}
+
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-block-assignment-expr-not-optional.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-block-assignment-expr-not-optional.js
index 7867d2a4e91116cdb91e7be16452c09743c875e7..a4691ca71d19e4f99585c47c7d6aed54576fc7b3 100644
--- a/test/language/module-code/dynamic-import/syntax/invalid/nested-block-assignment-expr-not-optional.js
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-block-assignment-expr-not-optional.js
@@ -5,7 +5,7 @@
 description: It's a SyntaxError if AssignmentExpression is omitted (nested block syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 negative:
   phase: parse
   type: SyntaxError
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-block-labeled-assignment-expr-not-optional.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-block-labeled-assignment-expr-not-optional.js
index 6296b903bc54ca669fd91eb8719b491c23e4db58..6932f7797e851389dc7042b864ca3cf5f487bf0e 100644
--- a/test/language/module-code/dynamic-import/syntax/invalid/nested-block-labeled-assignment-expr-not-optional.js
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-block-labeled-assignment-expr-not-optional.js
@@ -5,7 +5,7 @@
 description: It's a SyntaxError if AssignmentExpression is omitted (nested block syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 negative:
   phase: parse
   type: SyntaxError
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-block-labeled-not-extensible-args.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-block-labeled-not-extensible-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..1823f1486d10b1476a551f326e906c40c5bab79e
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-block-labeled-not-extensible-args.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-args.case
+// - src/dynamic-import/syntax/invalid/nested-block-labeled.template
+/*---
+description: ImportCall is not extensible - no arguments list (nested block syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+label: {
+  import('', '');
+};
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-block-labeled-not-extensible-no-trailing-comma.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-block-labeled-not-extensible-no-trailing-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..774d853665a53bbce5f88e086823bcaa97051055
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-block-labeled-not-extensible-no-trailing-comma.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-no-trailing-comma.case
+// - src/dynamic-import/syntax/invalid/nested-block-labeled.template
+/*---
+description: ImportCall is not extensible - trailing comma (nested block syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+label: {
+  import('',);
+};
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-block-not-extensible-args.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-block-not-extensible-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..84e1499005c53cabcb007043ec9d40bb225a52b1
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-block-not-extensible-args.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-args.case
+// - src/dynamic-import/syntax/invalid/nested-block.template
+/*---
+description: ImportCall is not extensible - no arguments list (nested block syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+{
+  import('', '');
+};
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-block-not-extensible-no-trailing-comma.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-block-not-extensible-no-trailing-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..a73878a6b408c7187b77e66263602785490d9b87
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-block-not-extensible-no-trailing-comma.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-no-trailing-comma.case
+// - src/dynamic-import/syntax/invalid/nested-block.template
+/*---
+description: ImportCall is not extensible - trailing comma (nested block syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+{
+  import('',);
+};
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-do-while-assignment-expr-not-optional.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-do-while-assignment-expr-not-optional.js
index a1bbe92af5dc4aa72c88e42837b8f22927e5039b..d1b92fee08b5849697cd94f68138b4be7b88a983 100644
--- a/test/language/module-code/dynamic-import/syntax/invalid/nested-do-while-assignment-expr-not-optional.js
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-do-while-assignment-expr-not-optional.js
@@ -5,7 +5,7 @@
 description: It's a SyntaxError if AssignmentExpression is omitted (nested do while syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 negative:
   phase: parse
   type: SyntaxError
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-do-while-not-extensible-args.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-do-while-not-extensible-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..48a8ee93b75aab7a19caccb780099717e15fb3e0
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-do-while-not-extensible-args.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-args.case
+// - src/dynamic-import/syntax/invalid/nested-do-while.template
+/*---
+description: ImportCall is not extensible - no arguments list (nested do while syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+do {
+  import('', '');
+} while (false);
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-do-while-not-extensible-no-trailing-comma.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-do-while-not-extensible-no-trailing-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..33224be168db88203ef05eee701fcadc6cc11bc1
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-do-while-not-extensible-no-trailing-comma.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-no-trailing-comma.case
+// - src/dynamic-import/syntax/invalid/nested-do-while.template
+/*---
+description: ImportCall is not extensible - trailing comma (nested do while syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+do {
+  import('',);
+} while (false);
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-else-assignment-expr-not-optional.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-else-assignment-expr-not-optional.js
index 00dce8cf5c7ad45f3bf2312851ba2929d54a785b..83ba3db7657881792bc18b501a24df28c29e0652 100644
--- a/test/language/module-code/dynamic-import/syntax/invalid/nested-else-assignment-expr-not-optional.js
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-else-assignment-expr-not-optional.js
@@ -5,7 +5,7 @@
 description: It's a SyntaxError if AssignmentExpression is omitted (nested else syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 negative:
   phase: parse
   type: SyntaxError
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-else-braceless-assignment-expr-not-optional.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-else-braceless-assignment-expr-not-optional.js
index 1e691f817d9d808344d56258ba94cdfd2782f957..11e7beec898f75a849e6440f3ca3a5c8470ac0e0 100644
--- a/test/language/module-code/dynamic-import/syntax/invalid/nested-else-braceless-assignment-expr-not-optional.js
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-else-braceless-assignment-expr-not-optional.js
@@ -5,7 +5,7 @@
 description: It's a SyntaxError if AssignmentExpression is omitted (nested else syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 negative:
   phase: parse
   type: SyntaxError
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-else-braceless-not-extensible-args.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-else-braceless-not-extensible-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..d2eab4c9a01a5ae7d7d807c4ecc495253347ab89
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-else-braceless-not-extensible-args.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-args.case
+// - src/dynamic-import/syntax/invalid/nested-else-braceless.template
+/*---
+description: ImportCall is not extensible - no arguments list (nested else syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+if (false) {
+
+} else import('', '');
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-else-braceless-not-extensible-no-trailing-comma.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-else-braceless-not-extensible-no-trailing-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..69510347fae113204f84f6f6256024b178e2b4ec
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-else-braceless-not-extensible-no-trailing-comma.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-no-trailing-comma.case
+// - src/dynamic-import/syntax/invalid/nested-else-braceless.template
+/*---
+description: ImportCall is not extensible - trailing comma (nested else syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+if (false) {
+
+} else import('',);
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-else-not-extensible-args.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-else-not-extensible-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..4290f00c5f7d03348496eb699359b90c85bd37e0
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-else-not-extensible-args.js
@@ -0,0 +1,41 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-args.case
+// - src/dynamic-import/syntax/invalid/nested-else.template
+/*---
+description: ImportCall is not extensible - no arguments list (nested else syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+if (false) {
+
+} else {
+  import('', '');
+}
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-else-not-extensible-no-trailing-comma.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-else-not-extensible-no-trailing-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..f94c5105a1592d77b01b44d9f4c87e44dd720659
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-else-not-extensible-no-trailing-comma.js
@@ -0,0 +1,41 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-no-trailing-comma.case
+// - src/dynamic-import/syntax/invalid/nested-else.template
+/*---
+description: ImportCall is not extensible - trailing comma (nested else syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+if (false) {
+
+} else {
+  import('',);
+}
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-function-assignment-expr-not-optional.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-function-assignment-expr-not-optional.js
index 4873ae664c42f804f9b0064a6aabb28280c467b8..a6c48c3928aa83af2783c23dbe24d39e175c3d71 100644
--- a/test/language/module-code/dynamic-import/syntax/invalid/nested-function-assignment-expr-not-optional.js
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-function-assignment-expr-not-optional.js
@@ -5,7 +5,7 @@
 description: It's a SyntaxError if AssignmentExpression is omitted (nested function syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 negative:
   phase: parse
   type: SyntaxError
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-function-not-extensible-args.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-function-not-extensible-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..5748b12dc33e0586bcdb9c24426d499d9f886c07
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-function-not-extensible-args.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-args.case
+// - src/dynamic-import/syntax/invalid/nested-function.template
+/*---
+description: ImportCall is not extensible - no arguments list (nested function syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+function fn() {
+  import('', '');
+}
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-function-not-extensible-no-trailing-comma.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-function-not-extensible-no-trailing-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..e5b898ea2cd3bbb4e5b3a86b911ee870e96676f8
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-function-not-extensible-no-trailing-comma.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-no-trailing-comma.case
+// - src/dynamic-import/syntax/invalid/nested-function.template
+/*---
+description: ImportCall is not extensible - trailing comma (nested function syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+function fn() {
+  import('',);
+}
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-function-return-assignment-expr-not-optional.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-function-return-assignment-expr-not-optional.js
index 4a10c5de24948f75d726f9d8e719a729d015e7a8..042677a78963f2cfd00313f9fbf402b0ed4c1db4 100644
--- a/test/language/module-code/dynamic-import/syntax/invalid/nested-function-return-assignment-expr-not-optional.js
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-function-return-assignment-expr-not-optional.js
@@ -5,7 +5,7 @@
 description: It's a SyntaxError if AssignmentExpression is omitted (nested function syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 negative:
   phase: parse
   type: SyntaxError
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-function-return-not-extensible-args.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-function-return-not-extensible-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..9d80e2f20ff7cccc0e79372daed86a0aee59db32
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-function-return-not-extensible-args.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-args.case
+// - src/dynamic-import/syntax/invalid/nested-function-return.template
+/*---
+description: ImportCall is not extensible - no arguments list (nested function syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+function fn() {
+  return import('', '');
+}
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-function-return-not-extensible-no-trailing-comma.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-function-return-not-extensible-no-trailing-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..298b979ae06b36770b91d8ef05c5ec00233ce64d
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-function-return-not-extensible-no-trailing-comma.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-no-trailing-comma.case
+// - src/dynamic-import/syntax/invalid/nested-function-return.template
+/*---
+description: ImportCall is not extensible - trailing comma (nested function syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+function fn() {
+  return import('',);
+}
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-if-assignment-expr-not-optional.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-if-assignment-expr-not-optional.js
index d0a3ff0af4b4302811883a584f97c7cdd5fd62bb..c00eccbbb99727c10299baf37e8c2e0b1897b510 100644
--- a/test/language/module-code/dynamic-import/syntax/invalid/nested-if-assignment-expr-not-optional.js
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-if-assignment-expr-not-optional.js
@@ -5,7 +5,7 @@
 description: It's a SyntaxError if AssignmentExpression is omitted (nested if syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 negative:
   phase: parse
   type: SyntaxError
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-if-braceless-assignment-expr-not-optional.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-if-braceless-assignment-expr-not-optional.js
index af0f9caa7e8bc95998c166fbb4c9874eca79fcbf..a53086c259e95abd995d5a7aca3f497aacfb7d28 100644
--- a/test/language/module-code/dynamic-import/syntax/invalid/nested-if-braceless-assignment-expr-not-optional.js
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-if-braceless-assignment-expr-not-optional.js
@@ -5,7 +5,7 @@
 description: It's a SyntaxError if AssignmentExpression is omitted (nested if syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 negative:
   phase: parse
   type: SyntaxError
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-if-braceless-not-extensible-args.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-if-braceless-not-extensible-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..713d0ac65e511fd87416dfffe6c3a706d53a4867
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-if-braceless-not-extensible-args.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-args.case
+// - src/dynamic-import/syntax/invalid/nested-if-braceless.template
+/*---
+description: ImportCall is not extensible - no arguments list (nested if syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+if (true) import('', '');
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-if-braceless-not-extensible-no-trailing-comma.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-if-braceless-not-extensible-no-trailing-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..ac7e9aa750c7f6f287fb587202bab64b410956bc
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-if-braceless-not-extensible-no-trailing-comma.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-no-trailing-comma.case
+// - src/dynamic-import/syntax/invalid/nested-if-braceless.template
+/*---
+description: ImportCall is not extensible - trailing comma (nested if syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+if (true) import('',);
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-if-not-extensible-args.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-if-not-extensible-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..98180c77ab57b40f12d77e9ff3a111e30de78be0
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-if-not-extensible-args.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-args.case
+// - src/dynamic-import/syntax/invalid/nested-if.template
+/*---
+description: ImportCall is not extensible - no arguments list (nested if syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+if (true) {
+  import('', '');
+}
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-if-not-extensible-no-trailing-comma.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-if-not-extensible-no-trailing-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..87c91b7b533d4d950d220e9cdfac6ddc8262bcc4
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-if-not-extensible-no-trailing-comma.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-no-trailing-comma.case
+// - src/dynamic-import/syntax/invalid/nested-if.template
+/*---
+description: ImportCall is not extensible - trailing comma (nested if syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+if (true) {
+  import('',);
+}
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-while-assignment-expr-not-optional.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-while-assignment-expr-not-optional.js
index 25cdafb6f5d12832d8ef4725854dd6d2fe49fca4..478a5f5744248af98dba097291db00474e0d34aa 100644
--- a/test/language/module-code/dynamic-import/syntax/invalid/nested-while-assignment-expr-not-optional.js
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-while-assignment-expr-not-optional.js
@@ -5,7 +5,7 @@
 description: It's a SyntaxError if AssignmentExpression is omitted (nested while syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 negative:
   phase: parse
   type: SyntaxError
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-while-not-extensible-args.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-while-not-extensible-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..d41674b4a0f3e8c43cc93a6e2c43629f0bfe3267
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-while-not-extensible-args.js
@@ -0,0 +1,41 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-args.case
+// - src/dynamic-import/syntax/invalid/nested-while.template
+/*---
+description: ImportCall is not extensible - no arguments list (nested while syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+let x = 0;
+while (!x) {
+  x++;
+  import('', '');
+};
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-while-not-extensible-no-trailing-comma.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-while-not-extensible-no-trailing-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..69cb2c18143924ec4be6c789daa9db574c6c4146
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-while-not-extensible-no-trailing-comma.js
@@ -0,0 +1,41 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-no-trailing-comma.case
+// - src/dynamic-import/syntax/invalid/nested-while.template
+/*---
+description: ImportCall is not extensible - trailing comma (nested while syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+let x = 0;
+while (!x) {
+  x++;
+  import('',);
+};
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-with-assignment-expr-not-optional.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-with-assignment-expr-not-optional.js
new file mode 100644
index 0000000000000000000000000000000000000000..be620c56664a11bd87e621ed91aa3f0dd6bb8eaf
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-with-assignment-expr-not-optional.js
@@ -0,0 +1,37 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/assignment-expr-not-optional.case
+// - src/dynamic-import/syntax/invalid/nested-with.template
+/*---
+description: It's a SyntaxError if AssignmentExpression is omitted (nested with syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, noStrict]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+with ({}) {
+  import();
+}
+
+/* The params region intentionally empty */
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-with-not-extensible-args.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-with-not-extensible-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..6c43a0d1f4257164eb63ac8a5cc7e9a803766822
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-with-not-extensible-args.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-args.case
+// - src/dynamic-import/syntax/invalid/nested-with.template
+/*---
+description: ImportCall is not extensible - no arguments list (nested with syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, noStrict]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+with ({}) {
+  import('', '');
+}
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/nested-with-not-extensible-no-trailing-comma.js b/test/language/module-code/dynamic-import/syntax/invalid/nested-with-not-extensible-no-trailing-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..ecafdd9455cae607ede2b106e353c35564271826
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/nested-with-not-extensible-no-trailing-comma.js
@@ -0,0 +1,39 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-no-trailing-comma.case
+// - src/dynamic-import/syntax/invalid/nested-with.template
+/*---
+description: ImportCall is not extensible - trailing comma (nested with syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, noStrict]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+with ({}) {
+  import('',);
+}
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/top-level-assignment-expr-not-optional.js b/test/language/module-code/dynamic-import/syntax/invalid/top-level-assignment-expr-not-optional.js
index 32810c3d8baaba9296e8a32126842b208e809404..e0f2430577c4846e1fabc6e41f3d4569317cfea7 100644
--- a/test/language/module-code/dynamic-import/syntax/invalid/top-level-assignment-expr-not-optional.js
+++ b/test/language/module-code/dynamic-import/syntax/invalid/top-level-assignment-expr-not-optional.js
@@ -5,7 +5,7 @@
 description: It's a SyntaxError if AssignmentExpression is omitted (top level syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 negative:
   phase: parse
   type: SyntaxError
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/top-level-not-extensible-args.js b/test/language/module-code/dynamic-import/syntax/invalid/top-level-not-extensible-args.js
new file mode 100644
index 0000000000000000000000000000000000000000..aa517c93ac87e798debff79cf940b09cdc4d36d0
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/top-level-not-extensible-args.js
@@ -0,0 +1,27 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-args.case
+// - src/dynamic-import/syntax/invalid/top-level.template
+/*---
+description: ImportCall is not extensible - no arguments list (top level syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+import('', '');
diff --git a/test/language/module-code/dynamic-import/syntax/invalid/top-level-not-extensible-no-trailing-comma.js b/test/language/module-code/dynamic-import/syntax/invalid/top-level-not-extensible-no-trailing-comma.js
new file mode 100644
index 0000000000000000000000000000000000000000..d7c12259fc8dde18d0c240683645421d1db37520
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/invalid/top-level-not-extensible-no-trailing-comma.js
@@ -0,0 +1,27 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/not-extensible-no-trailing-comma.case
+// - src/dynamic-import/syntax/invalid/top-level.template
+/*---
+description: ImportCall is not extensible - trailing comma (top level syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+negative:
+  phase: parse
+  type: SyntaxError
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+
+    ImportCall :
+        import( AssignmentExpression[+In, ?Yield] )
+
+    Forbidden Extensions
+
+    - ImportCall must not be extended.
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+import('',);
diff --git a/test/language/module-code/dynamic-import/syntax/valid/empty_FIXTURE.js b/test/language/module-code/dynamic-import/syntax/valid/empty_FIXTURE.js
new file mode 100644
index 0000000000000000000000000000000000000000..29cb49e1fd3a6a1a1652a1b1ca635a23e7503dab
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/empty_FIXTURE.js
@@ -0,0 +1,4 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+// empty code
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-arrow-assignment-expression-empty-str-is-valid-assign-expr.js b/test/language/module-code/dynamic-import/syntax/valid/nested-arrow-assignment-expression-empty-str-is-valid-assign-expr.js
index 7273a33e6c12a18acccd7949e5e1b920d878990d..a3286b57e68bd12b7996cb6bf35a34ca979d11be 100644
--- a/test/language/module-code/dynamic-import/syntax/valid/nested-arrow-assignment-expression-empty-str-is-valid-assign-expr.js
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-arrow-assignment-expression-empty-str-is-valid-assign-expr.js
@@ -5,7 +5,7 @@
 description: Calling import('') (nested arrow syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 info: |
     ImportCall :
         import( AssignmentExpression )
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-arrow-assignment-expression-nested-imports.js b/test/language/module-code/dynamic-import/syntax/valid/nested-arrow-assignment-expression-nested-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..2d80caa1fe15321e3e9e70eb2b7e4fb846252815
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-arrow-assignment-expression-nested-imports.js
@@ -0,0 +1,25 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/nested-imports.case
+// - src/dynamic-import/syntax/valid/nested-arrow-assignment-expression.template
+/*---
+description: ImportCall is a CallExpression can be nested in other import calls (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+let f = () => import(import(import('./empty_FIXTURE.js')));
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-arrow-assignment-expression-script-code-valid.js b/test/language/module-code/dynamic-import/syntax/valid/nested-arrow-assignment-expression-script-code-valid.js
new file mode 100644
index 0000000000000000000000000000000000000000..c5654cd220ed217ebd15905f56603a0ba4ea4eb5
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-arrow-assignment-expression-script-code-valid.js
@@ -0,0 +1,29 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/script-code-valid.case
+// - src/dynamic-import/syntax/valid/nested-arrow-assignment-expression.template
+/*---
+description: import() can be used in script code (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+
+let f = () => import('./script-code-valid.js');
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-arrow-nested-imports.js b/test/language/module-code/dynamic-import/syntax/valid/nested-arrow-nested-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..5ef1458d0636ffdc176d6aba5e3ffebd54478432
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-arrow-nested-imports.js
@@ -0,0 +1,27 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/nested-imports.case
+// - src/dynamic-import/syntax/valid/nested-arrow.template
+/*---
+description: ImportCall is a CallExpression can be nested in other import calls (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+let f = () => {
+  import(import(import('./empty_FIXTURE.js')));
+};
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-arrow-script-code-valid.js b/test/language/module-code/dynamic-import/syntax/valid/nested-arrow-script-code-valid.js
new file mode 100644
index 0000000000000000000000000000000000000000..590fff106f11f7420c7d250f1c75fafc2744bc3a
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-arrow-script-code-valid.js
@@ -0,0 +1,31 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/script-code-valid.case
+// - src/dynamic-import/syntax/valid/nested-arrow.template
+/*---
+description: import() can be used in script code (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+
+let f = () => {
+  import('./script-code-valid.js');
+};
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-await-nested-imports.js b/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-await-nested-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..810d7774d5f7985d3503657ecc82605fa2f5e082
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-await-nested-imports.js
@@ -0,0 +1,27 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/nested-imports.case
+// - src/dynamic-import/syntax/valid/nested-async-function-await.template
+/*---
+description: ImportCall is a CallExpression can be nested in other import calls (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+async function f() {
+  await import(import(import('./empty_FIXTURE.js')));
+}
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-await-script-code-valid.js b/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-await-script-code-valid.js
new file mode 100644
index 0000000000000000000000000000000000000000..90849fabfe36863028cc816da16777c3e39294e9
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-await-script-code-valid.js
@@ -0,0 +1,31 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/script-code-valid.case
+// - src/dynamic-import/syntax/valid/nested-async-function-await.template
+/*---
+description: import() can be used in script code (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+
+async function f() {
+  await import('./script-code-valid.js');
+}
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-nested-imports.js b/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-nested-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..346590fed25819a8b7616266be8b80e33a3e9de3
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-nested-imports.js
@@ -0,0 +1,28 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/nested-imports.case
+// - src/dynamic-import/syntax/valid/nested-async-function.template
+/*---
+description: ImportCall is a CallExpression can be nested in other import calls (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+async function f() {
+  import(import(import('./empty_FIXTURE.js')));
+}
+
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-return-await-nested-imports.js b/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-return-await-nested-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..5ae4dcc38288bb8a5dcbdf8cce1cfdd30c103989
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-return-await-nested-imports.js
@@ -0,0 +1,28 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/nested-imports.case
+// - src/dynamic-import/syntax/valid/nested-async-function-return-await.template
+/*---
+description: ImportCall is a CallExpression can be nested in other import calls (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+async function f() {
+  return await import(import(import('./empty_FIXTURE.js')));
+}
+
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-return-await-script-code-valid.js b/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-return-await-script-code-valid.js
new file mode 100644
index 0000000000000000000000000000000000000000..f383065913465092cae33b5087905c9dda67a470
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-return-await-script-code-valid.js
@@ -0,0 +1,32 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/script-code-valid.case
+// - src/dynamic-import/syntax/valid/nested-async-function-return-await.template
+/*---
+description: import() can be used in script code (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+
+async function f() {
+  return await import('./script-code-valid.js');
+}
+
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-script-code-valid.js b/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-script-code-valid.js
new file mode 100644
index 0000000000000000000000000000000000000000..e00d0a7ffdbee48c09c9720e89bac53769e3642d
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-async-function-script-code-valid.js
@@ -0,0 +1,32 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/script-code-valid.case
+// - src/dynamic-import/syntax/valid/nested-async-function.template
+/*---
+description: import() can be used in script code (nested arrow syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+
+async function f() {
+  import('./script-code-valid.js');
+}
+
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-block-labeled-nested-imports.js b/test/language/module-code/dynamic-import/syntax/valid/nested-block-labeled-nested-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..0f7b975091d0aee0a4766f784fee5f6842e2eff4
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-block-labeled-nested-imports.js
@@ -0,0 +1,27 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/nested-imports.case
+// - src/dynamic-import/syntax/valid/nested-block-labeled.template
+/*---
+description: ImportCall is a CallExpression can be nested in other import calls (nested block syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+label: {
+  import(import(import('./empty_FIXTURE.js')));
+};
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-block-labeled-script-code-valid.js b/test/language/module-code/dynamic-import/syntax/valid/nested-block-labeled-script-code-valid.js
new file mode 100644
index 0000000000000000000000000000000000000000..0d36b64b70dfa0ac40d4c526a77ab500fe23df04
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-block-labeled-script-code-valid.js
@@ -0,0 +1,31 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/script-code-valid.case
+// - src/dynamic-import/syntax/valid/nested-block-labeled.template
+/*---
+description: import() can be used in script code (nested block syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+
+label: {
+  import('./script-code-valid.js');
+};
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-block-nested-imports.js b/test/language/module-code/dynamic-import/syntax/valid/nested-block-nested-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..1966a3f2c3d7ccdd158478bf146eba1fe902aceb
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-block-nested-imports.js
@@ -0,0 +1,27 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/nested-imports.case
+// - src/dynamic-import/syntax/valid/nested-block.template
+/*---
+description: ImportCall is a CallExpression can be nested in other import calls (nested block syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+{
+  import(import(import('./empty_FIXTURE.js')));
+};
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-block-script-code-valid.js b/test/language/module-code/dynamic-import/syntax/valid/nested-block-script-code-valid.js
new file mode 100644
index 0000000000000000000000000000000000000000..f66e994bd06829810b0b4e055b3e763e8a34d2f7
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-block-script-code-valid.js
@@ -0,0 +1,31 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/script-code-valid.case
+// - src/dynamic-import/syntax/valid/nested-block.template
+/*---
+description: import() can be used in script code (nested block syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+
+{
+  import('./script-code-valid.js');
+};
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-do-while-nested-imports.js b/test/language/module-code/dynamic-import/syntax/valid/nested-do-while-nested-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..a0cd602d3cef8dfadc48311661476391bb4c7b70
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-do-while-nested-imports.js
@@ -0,0 +1,27 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/nested-imports.case
+// - src/dynamic-import/syntax/valid/nested-do-while.template
+/*---
+description: ImportCall is a CallExpression can be nested in other import calls (nested do while syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+do {
+  import(import(import('./empty_FIXTURE.js')));
+} while (false);
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-do-while-script-code-valid.js b/test/language/module-code/dynamic-import/syntax/valid/nested-do-while-script-code-valid.js
new file mode 100644
index 0000000000000000000000000000000000000000..1b86097b58448ff3c7753d407d73671eebfddde8
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-do-while-script-code-valid.js
@@ -0,0 +1,31 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/script-code-valid.case
+// - src/dynamic-import/syntax/valid/nested-do-while.template
+/*---
+description: import() can be used in script code (nested do while syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+
+do {
+  import('./script-code-valid.js');
+} while (false);
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-else-braceless-nested-imports.js b/test/language/module-code/dynamic-import/syntax/valid/nested-else-braceless-nested-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..ed3996f100856252a3f15b5b28a68f7a9a1808cf
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-else-braceless-nested-imports.js
@@ -0,0 +1,27 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/nested-imports.case
+// - src/dynamic-import/syntax/valid/nested-else-braceless.template
+/*---
+description: ImportCall is a CallExpression can be nested in other import calls (nested else syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+if (false) {
+
+} else import(import(import('./empty_FIXTURE.js')));
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-else-braceless-script-code-valid.js b/test/language/module-code/dynamic-import/syntax/valid/nested-else-braceless-script-code-valid.js
new file mode 100644
index 0000000000000000000000000000000000000000..4426fcca22c2f01099eeb0b30d6f7fdebb8bf3bf
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-else-braceless-script-code-valid.js
@@ -0,0 +1,31 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/script-code-valid.case
+// - src/dynamic-import/syntax/valid/nested-else-braceless.template
+/*---
+description: import() can be used in script code (nested else syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+
+if (false) {
+
+} else import('./script-code-valid.js');
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-else-nested-imports.js b/test/language/module-code/dynamic-import/syntax/valid/nested-else-nested-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..b4a44c9afcf135e99fe88b1126a08acca8a42afd
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-else-nested-imports.js
@@ -0,0 +1,29 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/nested-imports.case
+// - src/dynamic-import/syntax/valid/nested-else.template
+/*---
+description: ImportCall is a CallExpression can be nested in other import calls (nested else syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+if (false) {
+
+} else {
+  import(import(import('./empty_FIXTURE.js')));
+}
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-else-script-code-valid.js b/test/language/module-code/dynamic-import/syntax/valid/nested-else-script-code-valid.js
new file mode 100644
index 0000000000000000000000000000000000000000..7ec91b881a30c0e613df73ee46c0f614de8cc54d
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-else-script-code-valid.js
@@ -0,0 +1,33 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/script-code-valid.case
+// - src/dynamic-import/syntax/valid/nested-else.template
+/*---
+description: import() can be used in script code (nested else syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+
+if (false) {
+
+} else {
+  import('./script-code-valid.js');
+}
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-function-empty-str-is-valid-assign-expr.js b/test/language/module-code/dynamic-import/syntax/valid/nested-function-empty-str-is-valid-assign-expr.js
index d6358b05fa59a50b2aa912207acc412755cae564..220404899236791964e9e57d53a7cb959e748ed2 100644
--- a/test/language/module-code/dynamic-import/syntax/valid/nested-function-empty-str-is-valid-assign-expr.js
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-function-empty-str-is-valid-assign-expr.js
@@ -5,7 +5,7 @@
 description: Calling import('') (nested function syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 info: |
     ImportCall :
         import( AssignmentExpression )
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-function-nested-imports.js b/test/language/module-code/dynamic-import/syntax/valid/nested-function-nested-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..3adda3653594fc20c3dd67204891e65d4aabd8e5
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-function-nested-imports.js
@@ -0,0 +1,27 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/nested-imports.case
+// - src/dynamic-import/syntax/valid/nested-function.template
+/*---
+description: ImportCall is a CallExpression can be nested in other import calls (nested function syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+function fn() {
+  import(import(import('./empty_FIXTURE.js')));
+}
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-function-return-empty-str-is-valid-assign-expr.js b/test/language/module-code/dynamic-import/syntax/valid/nested-function-return-empty-str-is-valid-assign-expr.js
index e1238bcfdb05e15ec239af45ce009e5f7ab0f1b3..9a223eeb19499bf1b69f952fe97004c937bdbdbe 100644
--- a/test/language/module-code/dynamic-import/syntax/valid/nested-function-return-empty-str-is-valid-assign-expr.js
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-function-return-empty-str-is-valid-assign-expr.js
@@ -5,7 +5,7 @@
 description: Calling import('') (nested function syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 info: |
     ImportCall :
         import( AssignmentExpression )
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-function-return-nested-imports.js b/test/language/module-code/dynamic-import/syntax/valid/nested-function-return-nested-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..7fc194e7c2b4a243ce79c20753dd0a130157787d
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-function-return-nested-imports.js
@@ -0,0 +1,27 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/nested-imports.case
+// - src/dynamic-import/syntax/valid/nested-function-return.template
+/*---
+description: ImportCall is a CallExpression can be nested in other import calls (nested function syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+function fn() {
+  return import(import(import('./empty_FIXTURE.js')));
+}
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-function-return-script-code-valid.js b/test/language/module-code/dynamic-import/syntax/valid/nested-function-return-script-code-valid.js
new file mode 100644
index 0000000000000000000000000000000000000000..5a871fa54affccb9904dfa1c223a67a2166af329
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-function-return-script-code-valid.js
@@ -0,0 +1,31 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/script-code-valid.case
+// - src/dynamic-import/syntax/valid/nested-function-return.template
+/*---
+description: import() can be used in script code (nested function syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+
+function fn() {
+  return import('./script-code-valid.js');
+}
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-function-script-code-valid.js b/test/language/module-code/dynamic-import/syntax/valid/nested-function-script-code-valid.js
new file mode 100644
index 0000000000000000000000000000000000000000..68f127e3e1cca5086619bc951bcbba3a0ba810ce
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-function-script-code-valid.js
@@ -0,0 +1,31 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/script-code-valid.case
+// - src/dynamic-import/syntax/valid/nested-function.template
+/*---
+description: import() can be used in script code (nested function syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+
+function fn() {
+  import('./script-code-valid.js');
+}
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-if-braceless-nested-imports.js b/test/language/module-code/dynamic-import/syntax/valid/nested-if-braceless-nested-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..6b384a3597d8c6c8e7f2be6cbcecd88f9707786a
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-if-braceless-nested-imports.js
@@ -0,0 +1,25 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/nested-imports.case
+// - src/dynamic-import/syntax/valid/nested-if-braceless.template
+/*---
+description: ImportCall is a CallExpression can be nested in other import calls (nested if syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+if (true) import(import(import('./empty_FIXTURE.js')));
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-if-braceless-script-code-valid.js b/test/language/module-code/dynamic-import/syntax/valid/nested-if-braceless-script-code-valid.js
new file mode 100644
index 0000000000000000000000000000000000000000..e449237b2bda8b69acfe6e6a26150343a1d6c026
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-if-braceless-script-code-valid.js
@@ -0,0 +1,29 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/script-code-valid.case
+// - src/dynamic-import/syntax/valid/nested-if-braceless.template
+/*---
+description: import() can be used in script code (nested if syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+
+if (true) import('./script-code-valid.js');
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-if-nested-imports.js b/test/language/module-code/dynamic-import/syntax/valid/nested-if-nested-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..8720ddc84ec327296f37927d85d398df00a91113
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-if-nested-imports.js
@@ -0,0 +1,27 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/nested-imports.case
+// - src/dynamic-import/syntax/valid/nested-if.template
+/*---
+description: ImportCall is a CallExpression can be nested in other import calls (nested if syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+if (true) {
+  import(import(import('./empty_FIXTURE.js')));
+}
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-if-script-code-valid.js b/test/language/module-code/dynamic-import/syntax/valid/nested-if-script-code-valid.js
new file mode 100644
index 0000000000000000000000000000000000000000..f2b1eb9c25604ec66ef58e3e99feb131fb8ecc36
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-if-script-code-valid.js
@@ -0,0 +1,31 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/script-code-valid.case
+// - src/dynamic-import/syntax/valid/nested-if.template
+/*---
+description: import() can be used in script code (nested if syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+
+if (true) {
+  import('./script-code-valid.js');
+}
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-while-empty-str-is-valid-assign-expr.js b/test/language/module-code/dynamic-import/syntax/valid/nested-while-empty-str-is-valid-assign-expr.js
index 06ed77a9dfb63520d4fb5a3d4ebc7015451d4e16..8f4e2d62c3f140d695dcb09dca419d5ca3986b2f 100644
--- a/test/language/module-code/dynamic-import/syntax/valid/nested-while-empty-str-is-valid-assign-expr.js
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-while-empty-str-is-valid-assign-expr.js
@@ -5,7 +5,7 @@
 description: Calling import('') (nested while syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 info: |
     ImportCall :
         import( AssignmentExpression )
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-while-nested-imports.js b/test/language/module-code/dynamic-import/syntax/valid/nested-while-nested-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..b14401a2cd40a24304d8d80c754a2158475cab63
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-while-nested-imports.js
@@ -0,0 +1,29 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/nested-imports.case
+// - src/dynamic-import/syntax/valid/nested-while.template
+/*---
+description: ImportCall is a CallExpression can be nested in other import calls (nested while syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+let x = 0;
+while (!x) {
+  x++;
+  import(import(import('./empty_FIXTURE.js')));
+};
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-while-script-code-valid.js b/test/language/module-code/dynamic-import/syntax/valid/nested-while-script-code-valid.js
new file mode 100644
index 0000000000000000000000000000000000000000..b196e203ea4a0deda6c4e8bd38e6e0199c3605ca
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-while-script-code-valid.js
@@ -0,0 +1,33 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/script-code-valid.case
+// - src/dynamic-import/syntax/valid/nested-while.template
+/*---
+description: import() can be used in script code (nested while syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+
+let x = 0;
+while (!x) {
+  x++;
+  import('./script-code-valid.js');
+};
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-with-empty-str-is-valid-assign-expr.js b/test/language/module-code/dynamic-import/syntax/valid/nested-with-empty-str-is-valid-assign-expr.js
new file mode 100644
index 0000000000000000000000000000000000000000..9cda7876149af2773e580200423fd90b37b6d3bb
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-with-empty-str-is-valid-assign-expr.js
@@ -0,0 +1,27 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/empty-str-is-valid-assign-expr.case
+// - src/dynamic-import/syntax/valid/nested-with.template
+/*---
+description: Calling import('') (nested with syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, noStrict]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+with ({}) {
+  import('');
+}
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-with-nested-imports.js b/test/language/module-code/dynamic-import/syntax/valid/nested-with-nested-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..d87919be1623e4266d5471c84ad78620ca086165
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-with-nested-imports.js
@@ -0,0 +1,27 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/nested-imports.case
+// - src/dynamic-import/syntax/valid/nested-with.template
+/*---
+description: ImportCall is a CallExpression can be nested in other import calls (nested with syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, noStrict]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+with ({}) {
+  import(import(import('./empty_FIXTURE.js')));
+}
diff --git a/test/language/module-code/dynamic-import/syntax/valid/nested-with-script-code-valid.js b/test/language/module-code/dynamic-import/syntax/valid/nested-with-script-code-valid.js
new file mode 100644
index 0000000000000000000000000000000000000000..b46979d5ece4dd73928d0143dc618b20f8497531
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/nested-with-script-code-valid.js
@@ -0,0 +1,31 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/script-code-valid.case
+// - src/dynamic-import/syntax/valid/nested-with.template
+/*---
+description: import() can be used in script code (nested with syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, noStrict]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+
+with ({}) {
+  import('./script-code-valid.js');
+}
diff --git a/test/language/module-code/dynamic-import/syntax/valid/top-level-empty-str-is-valid-assign-expr.js b/test/language/module-code/dynamic-import/syntax/valid/top-level-empty-str-is-valid-assign-expr.js
index ed13876b70ec0052db4c3b3c994ed588eb43c5c5..b5e7d2ad2414361d9008f5b26f16aa83e41cacf4 100644
--- a/test/language/module-code/dynamic-import/syntax/valid/top-level-empty-str-is-valid-assign-expr.js
+++ b/test/language/module-code/dynamic-import/syntax/valid/top-level-empty-str-is-valid-assign-expr.js
@@ -5,7 +5,7 @@
 description: Calling import('') (top level syntax)
 esid: sec-import-call-runtime-semantics-evaluation
 features: [dynamic-import]
-flags: [generated, module]
+flags: [generated]
 info: |
     ImportCall :
         import( AssignmentExpression )
diff --git a/test/language/module-code/dynamic-import/syntax/valid/top-level-nested-imports.js b/test/language/module-code/dynamic-import/syntax/valid/top-level-nested-imports.js
new file mode 100644
index 0000000000000000000000000000000000000000..fd0db04ead45fb8489bb049803d0927d133b94c5
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/top-level-nested-imports.js
@@ -0,0 +1,15 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/nested-imports.case
+// - src/dynamic-import/syntax/valid/top-level.template
+/*---
+description: ImportCall is a CallExpression can be nested in other import calls (top level syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+---*/
+
+import(import(import('./empty_FIXTURE.js')));
diff --git a/test/language/module-code/dynamic-import/syntax/valid/top-level-script-code-valid.js b/test/language/module-code/dynamic-import/syntax/valid/top-level-script-code-valid.js
new file mode 100644
index 0000000000000000000000000000000000000000..3aa54554ba511e998e9dacecae48ce53688ee0af
--- /dev/null
+++ b/test/language/module-code/dynamic-import/syntax/valid/top-level-script-code-valid.js
@@ -0,0 +1,19 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/script-code-valid.case
+// - src/dynamic-import/syntax/valid/top-level.template
+/*---
+description: import() can be used in script code (top level syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+---*/
+// This is still valid in script code, and should not be valid for module code
+// https://tc39.github.io/ecma262/#sec-scripts-static-semantics-lexicallydeclarednames
+var smoosh; function smoosh() {}
+
+
+import('./script-code-valid.js');
diff --git a/test/language/module-code/dynamic-import/usage/nested-arrow-assignment-expression-is-call-expression-square-brackets.js b/test/language/module-code/dynamic-import/usage/nested-arrow-assignment-expression-is-call-expression-square-brackets.js
new file mode 100644
index 0000000000000000000000000000000000000000..db29f502337f7fd28a5257fa4663157128171510
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/nested-arrow-assignment-expression-is-call-expression-square-brackets.js
@@ -0,0 +1,32 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/is-call-expression-square-brackets.case
+// - src/dynamic-import/default/nested-arrow-assign-expr.template
+/*---
+description: ImportCall is a CallExpression, it can be followed by square brackets (nested arrow)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+let f = () => import('./dynamic-import-module_FIXTURE.js')['then'](x => x).then(imported => {
+
+  assert.sameValue(imported.x, 1);
+
+});
+
+
+f().then($DONE, $DONE).catch($DONE);
diff --git a/test/language/module-code/dynamic-import/usage/nested-arrow-import-then-is-call-expression-square-brackets.js b/test/language/module-code/dynamic-import/usage/nested-arrow-import-then-is-call-expression-square-brackets.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e9b9dec4230e723ad624d560e75bddec941e8fc
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/nested-arrow-import-then-is-call-expression-square-brackets.js
@@ -0,0 +1,34 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/is-call-expression-square-brackets.case
+// - src/dynamic-import/default/nested-arrow.template
+/*---
+description: ImportCall is a CallExpression, it can be followed by square brackets (nested arrow)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+let f = () => {
+  return import('./dynamic-import-module_FIXTURE.js')['then'](x => x).then(imported => {
+
+    assert.sameValue(imported.x, 1);
+
+  }).then($DONE, $DONE).catch($DONE);
+};
+
+f();
+
diff --git a/test/language/module-code/dynamic-import/usage/nested-async-function-await-is-call-expression-square-brackets.js b/test/language/module-code/dynamic-import/usage/nested-async-function-await-is-call-expression-square-brackets.js
new file mode 100644
index 0000000000000000000000000000000000000000..eab198119b4351ef9bb07a44a45a9b0348d68859
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/nested-async-function-await-is-call-expression-square-brackets.js
@@ -0,0 +1,33 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/is-call-expression-square-brackets.case
+// - src/dynamic-import/default/nested-async-function-await.template
+/*---
+description: ImportCall is a CallExpression, it can be followed by square brackets (nested in async function, awaited)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+async function f() {
+  await import('./dynamic-import-module_FIXTURE.js')['then'](x => x).then(imported => {
+
+    assert.sameValue(imported.x, 1);
+
+  });
+}
+
+f().then($DONE, $DONE).catch($DONE);
diff --git a/test/language/module-code/dynamic-import/usage/nested-async-function-is-call-expression-square-brackets.js b/test/language/module-code/dynamic-import/usage/nested-async-function-is-call-expression-square-brackets.js
new file mode 100644
index 0000000000000000000000000000000000000000..9f4a45f0e02c666489aeceefc4f6f94b2055bcbc
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/nested-async-function-is-call-expression-square-brackets.js
@@ -0,0 +1,33 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/is-call-expression-square-brackets.case
+// - src/dynamic-import/default/nested-async-function.template
+/*---
+description: ImportCall is a CallExpression, it can be followed by square brackets (nested in async function)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+async function f() {
+  import('./dynamic-import-module_FIXTURE.js')['then'](x => x).then(imported => {
+
+    assert.sameValue(imported.x, 1);
+
+  }).then($DONE, $DONE).catch($DONE);
+}
+
+f();
diff --git a/test/language/module-code/dynamic-import/usage/nested-async-function-return-await-is-call-expression-square-brackets.js b/test/language/module-code/dynamic-import/usage/nested-async-function-return-await-is-call-expression-square-brackets.js
new file mode 100644
index 0000000000000000000000000000000000000000..97af8e8f9837a2cab803db0c4752e161113cf143
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/nested-async-function-return-await-is-call-expression-square-brackets.js
@@ -0,0 +1,33 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/is-call-expression-square-brackets.case
+// - src/dynamic-import/default/nested-async-function-return-await.template
+/*---
+description: ImportCall is a CallExpression, it can be followed by square brackets (nested in async function, returns awaited)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+async function f() {
+  return await import('./dynamic-import-module_FIXTURE.js')['then'](x => x);
+}
+
+f().then(imported => {
+
+  assert.sameValue(imported.x, 1);
+
+}).then($DONE, $DONE).catch($DONE);
diff --git a/test/language/module-code/dynamic-import/usage/nested-block-import-then-is-call-expression-square-brackets.js b/test/language/module-code/dynamic-import/usage/nested-block-import-then-is-call-expression-square-brackets.js
new file mode 100644
index 0000000000000000000000000000000000000000..422750c0641f05618ea56f71f1ba758e9072832f
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/nested-block-import-then-is-call-expression-square-brackets.js
@@ -0,0 +1,31 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/is-call-expression-square-brackets.case
+// - src/dynamic-import/default/nested-block.template
+/*---
+description: ImportCall is a CallExpression, it can be followed by square brackets (nested block)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+{
+  import('./dynamic-import-module_FIXTURE.js')['then'](x => x).then(imported => {
+
+    assert.sameValue(imported.x, 1);
+
+  }).then($DONE, $DONE).catch($DONE);
+};
diff --git a/test/language/module-code/dynamic-import/usage/nested-do-while-is-call-expression-square-brackets.js b/test/language/module-code/dynamic-import/usage/nested-do-while-is-call-expression-square-brackets.js
new file mode 100644
index 0000000000000000000000000000000000000000..8b8822323e199dce21e2e794729007e4269caaf9
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/nested-do-while-is-call-expression-square-brackets.js
@@ -0,0 +1,31 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/is-call-expression-square-brackets.case
+// - src/dynamic-import/default/nested-do-while.template
+/*---
+description: ImportCall is a CallExpression, it can be followed by square brackets (nested do while syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+do {
+  import('./dynamic-import-module_FIXTURE.js')['then'](x => x).then(imported => {
+
+    assert.sameValue(imported.x, 1);
+
+  }).then($DONE, $DONE).catch($DONE);
+} while (false);
diff --git a/test/language/module-code/dynamic-import/usage/nested-else-import-then-is-call-expression-square-brackets.js b/test/language/module-code/dynamic-import/usage/nested-else-import-then-is-call-expression-square-brackets.js
new file mode 100644
index 0000000000000000000000000000000000000000..95419be6d1addc7986c524a39886ce3369eef3b4
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/nested-else-import-then-is-call-expression-square-brackets.js
@@ -0,0 +1,33 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/is-call-expression-square-brackets.case
+// - src/dynamic-import/default/nested-else.template
+/*---
+description: ImportCall is a CallExpression, it can be followed by square brackets (nested else)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+if (false) {
+
+} else {
+  import('./dynamic-import-module_FIXTURE.js')['then'](x => x).then(imported => {
+
+    assert.sameValue(imported.x, 1);
+
+  }).then($DONE, $DONE).catch($DONE);
+}
diff --git a/test/language/module-code/dynamic-import/usage/nested-function-import-then-is-call-expression-square-brackets.js b/test/language/module-code/dynamic-import/usage/nested-function-import-then-is-call-expression-square-brackets.js
new file mode 100644
index 0000000000000000000000000000000000000000..860cdb5f19d7a3f9415eda886e47241e347f0a61
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/nested-function-import-then-is-call-expression-square-brackets.js
@@ -0,0 +1,32 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/is-call-expression-square-brackets.case
+// - src/dynamic-import/default/nested-function.template
+/*---
+description: ImportCall is a CallExpression, it can be followed by square brackets (nested function)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+function f() {
+  import('./dynamic-import-module_FIXTURE.js')['then'](x => x).then(imported => {
+
+    assert.sameValue(imported.x, 1);
+
+  }).then($DONE, $DONE).catch($DONE);
+}
+f();
diff --git a/test/language/module-code/dynamic-import/usage/nested-if-braceless-is-call-expression-square-brackets.js b/test/language/module-code/dynamic-import/usage/nested-if-braceless-is-call-expression-square-brackets.js
new file mode 100644
index 0000000000000000000000000000000000000000..35349af68117334ecd666592f6ad8e8d1b81535a
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/nested-if-braceless-is-call-expression-square-brackets.js
@@ -0,0 +1,29 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/is-call-expression-square-brackets.case
+// - src/dynamic-import/default/nested-if-braceless.template
+/*---
+description: ImportCall is a CallExpression, it can be followed by square brackets (nested if syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+if (true) import('./dynamic-import-module_FIXTURE.js')['then'](x => x).then(imported => {
+
+  assert.sameValue(imported.x, 1);
+
+}).then($DONE, $DONE).catch($DONE);
diff --git a/test/language/module-code/dynamic-import/usage/nested-if-import-then-is-call-expression-square-brackets.js b/test/language/module-code/dynamic-import/usage/nested-if-import-then-is-call-expression-square-brackets.js
new file mode 100644
index 0000000000000000000000000000000000000000..63b003c9a4b9470cb4ef6b5784a1a56b79036ee5
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/nested-if-import-then-is-call-expression-square-brackets.js
@@ -0,0 +1,31 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/is-call-expression-square-brackets.case
+// - src/dynamic-import/default/nested-if.template
+/*---
+description: ImportCall is a CallExpression, it can be followed by square brackets (nested if)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+if (true) {
+  import('./dynamic-import-module_FIXTURE.js')['then'](x => x).then(imported => {
+
+    assert.sameValue(imported.x, 1);
+
+  }).then($DONE, $DONE).catch($DONE);
+}
diff --git a/test/language/module-code/dynamic-import/usage/nested-while-import-then-is-call-expression-square-brackets.js b/test/language/module-code/dynamic-import/usage/nested-while-import-then-is-call-expression-square-brackets.js
new file mode 100644
index 0000000000000000000000000000000000000000..d5b56b232c2da517ba1fed0e32ead6cc238cf9aa
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/nested-while-import-then-is-call-expression-square-brackets.js
@@ -0,0 +1,33 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/is-call-expression-square-brackets.case
+// - src/dynamic-import/default/nested-while.template
+/*---
+description: ImportCall is a CallExpression, it can be followed by square brackets (nested while)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+let x = 0;
+while (!x) {
+  x++;
+  import('./dynamic-import-module_FIXTURE.js')['then'](x => x).then(imported => {
+
+    assert.sameValue(imported.x, 1);
+
+  }).then($DONE, $DONE).catch($DONE);
+};
diff --git a/test/language/module-code/dynamic-import/usage/nested-with-import-then-eval-gtbndng-indirect-update-dflt.js b/test/language/module-code/dynamic-import/usage/nested-with-import-then-eval-gtbndng-indirect-update-dflt.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8232adb174dd330d35422d8895e1936526e2297
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/nested-with-import-then-eval-gtbndng-indirect-update-dflt.js
@@ -0,0 +1,44 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/eval-gtbndng-indirect-update-dflt.case
+// - src/dynamic-import/default/nested-with.template
+/*---
+description: Modifications to default binding that occur after dependency has been evaluated are reflected in local binding (nested with)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async, noStrict]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    GetBindingValue (N, S)
+
+    [...]
+    3. If the binding for N is an indirect binding, then
+       a. Let M and N2 be the indirection values provided when this binding for
+          N was created.
+       b. Let targetEnv be M.[[Environment]].
+       c. If targetEnv is undefined, throw a ReferenceError exception.
+       d. Let targetER be targetEnv's EnvironmentRecord.
+       e. Return ? targetER.GetBindingValue(N2, S).
+
+---*/
+
+with ({}) {
+    import('./eval-gtbndng-indirect-update-dflt_FIXTURE.js').then(imported => {
+
+        assert.sameValue(imported.default(), 1);
+        assert.sameValue(imported.default, 2);
+
+    }).then($DONE, $DONE).catch($DONE);
+}
diff --git a/test/language/module-code/dynamic-import/usage/nested-with-import-then-eval-gtbndng-indirect-update.js b/test/language/module-code/dynamic-import/usage/nested-with-import-then-eval-gtbndng-indirect-update.js
new file mode 100644
index 0000000000000000000000000000000000000000..d39cd5cfae154f07f8b7e2c772830746a2f6df13
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/nested-with-import-then-eval-gtbndng-indirect-update.js
@@ -0,0 +1,52 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/eval-gtbndng-indirect-update.case
+// - src/dynamic-import/default/nested-with.template
+/*---
+description: Modifications to named bindings that occur after dependency has been evaluated are reflected in local binding (nested with)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async, noStrict]
+includes: [fnGlobalObject.js]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+
+    GetBindingValue (N, S)
+
+    [...]
+    3. If the binding for N is an indirect binding, then
+       a. Let M and N2 be the indirection values provided when this binding for
+          N was created.
+       b. Let targetEnv be M.[[Environment]].
+       c. If targetEnv is undefined, throw a ReferenceError exception.
+       d. Let targetER be targetEnv's EnvironmentRecord.
+       e. Return ? targetER.GetBindingValue(N2, S).
+
+---*/
+
+with ({}) {
+    import('./eval-gtbndng-indirect-update_FIXTURE.js').then(imported => {
+
+        assert.sameValue(imported.x, 1);
+
+        // This function is exposed on the global scope (instead of as an exported
+        // binding) in order to avoid possible false positives from assuming correct
+        // behavior of the semantics under test.
+        fnGlobalObject().test262update();
+
+        assert.sameValue(imported.x, 2);
+
+
+    }).then($DONE, $DONE).catch($DONE);
+}
diff --git a/test/language/module-code/dynamic-import/usage/nested-with-import-then-is-call-expression-square-brackets.js b/test/language/module-code/dynamic-import/usage/nested-with-import-then-is-call-expression-square-brackets.js
new file mode 100644
index 0000000000000000000000000000000000000000..18d95fe17a03710c9b404dae042b7b2b6c937b3b
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/nested-with-import-then-is-call-expression-square-brackets.js
@@ -0,0 +1,31 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/is-call-expression-square-brackets.case
+// - src/dynamic-import/default/nested-with.template
+/*---
+description: ImportCall is a CallExpression, it can be followed by square brackets (nested with)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async, noStrict]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+with ({}) {
+    import('./dynamic-import-module_FIXTURE.js')['then'](x => x).then(imported => {
+
+        assert.sameValue(imported.x, 1);
+
+    }).then($DONE, $DONE).catch($DONE);
+}
diff --git a/test/language/module-code/dynamic-import/usage/nested-with-import-then-returns-promise.js b/test/language/module-code/dynamic-import/usage/nested-with-import-then-returns-promise.js
new file mode 100644
index 0000000000000000000000000000000000000000..0b17dd7aeba79e0c5327e6d1b488e175506bb4f3
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/nested-with-import-then-returns-promise.js
@@ -0,0 +1,31 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/returns-promise.case
+// - src/dynamic-import/default/nested-with.template
+/*---
+description: Dynamic import() returns a Promise object. (nested with)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async, noStrict]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+with ({}) {
+    import('./dynamic-import-module_FIXTURE.js').then(imported => {
+
+        assert.sameValue(imported.x, 1);
+
+    }).then($DONE, $DONE).catch($DONE);
+}
diff --git a/test/language/module-code/dynamic-import/usage/syntax-nested-block-labeled-is-call-expression-square-brackets.js b/test/language/module-code/dynamic-import/usage/syntax-nested-block-labeled-is-call-expression-square-brackets.js
new file mode 100644
index 0000000000000000000000000000000000000000..9aae4a39fc0216692fbc3b2f025ebd88e506a682
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/syntax-nested-block-labeled-is-call-expression-square-brackets.js
@@ -0,0 +1,31 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/is-call-expression-square-brackets.case
+// - src/dynamic-import/default/nested-block-labeled.template
+/*---
+description: ImportCall is a CallExpression, it can be followed by square brackets (nested block syntax)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+label: {
+  import('./dynamic-import-module_FIXTURE.js')['then'](x => x).then(imported => {
+
+    assert.sameValue(imported.x, 1);
+
+  }).then($DONE, $DONE).catch($DONE);
+};
diff --git a/test/language/module-code/dynamic-import/usage/top-level-import-then-is-call-expression-square-brackets.js b/test/language/module-code/dynamic-import/usage/top-level-import-then-is-call-expression-square-brackets.js
new file mode 100644
index 0000000000000000000000000000000000000000..0193cae1faf643cd546ec67ba4acf003b625c860
--- /dev/null
+++ b/test/language/module-code/dynamic-import/usage/top-level-import-then-is-call-expression-square-brackets.js
@@ -0,0 +1,29 @@
+// This file was procedurally generated from the following sources:
+// - src/dynamic-import/is-call-expression-square-brackets.case
+// - src/dynamic-import/default/top-level.template
+/*---
+description: ImportCall is a CallExpression, it can be followed by square brackets (top level)
+esid: sec-import-call-runtime-semantics-evaluation
+features: [dynamic-import]
+flags: [generated, async]
+info: |
+    ImportCall :
+        import( AssignmentExpression )
+
+    1. Let referencingScriptOrModule be ! GetActiveScriptOrModule().
+    2. Assert: referencingScriptOrModule is a Script Record or Module Record (i.e. is not null).
+    3. Let argRef be the result of evaluating AssignmentExpression.
+    4. Let specifier be ? GetValue(argRef).
+    5. Let promiseCapability be ! NewPromiseCapability(%Promise%).
+    6. Let specifierString be ToString(specifier).
+    7. IfAbruptRejectPromise(specifierString, promiseCapability).
+    8. Perform ! HostImportModuleDynamically(referencingScriptOrModule, specifierString, promiseCapability).
+    9. Return promiseCapability.[[Promise]].
+
+---*/
+
+import('./dynamic-import-module_FIXTURE.js')['then'](x => x).then(imported => {
+
+  assert.sameValue(imported.x, 1);
+
+}).then($DONE, $DONE).catch($DONE);