Repository: node
Issue: No stack trace with missing async keyword and dynamic imports
Labels: esm

<!--
Thank you for reporting an issue.

This issue tracker is for bugs and issues found within Node.js core.
If you require more general support please file an issue on our help
repo. https://github.com/nodejs/help


Please fill in as much of the template below as you're able.

Version: output of `node -v`
Platform: output of `uname -a` (UNIX), or version and 32 or 64-bit (Windows)
Subsystem: if known, please specify affected core module name
-->

* **Version**: v13.9.0
* **Platform**: Linux PC_NAME 5.3.0-40-generic nodejs/modules#32~18.04.1-Ubuntu SMP Mon Feb 3 14:05:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
* **Subsystem**: 

### What steps will reproduce the bug?
Consider the following code:

#### a.mjs
```js
(async () => {
    "use strict";
    
	let b = await import("./b.mjs");
	await b.default();
})();
```

#### b.mjs
```js
import fs from 'fs';

function bug() {
	// The something doesn't have to exist
	console.log(await fs.promises.readFile("/proc/cpuinfo", "utf-8"));
}
export default async function () {
	await bug();
}
```

#### Explanation
There is obviously a bug in `b.mjs` above. The `bug()` function is missing the `async` keyword`. However, when I attempt to execute the above, I get the following error:

```
(node:30870) UnhandledPromiseRejectionWarning: SyntaxError: Unexpected reserved word
    at Loader.moduleStrategy (internal/modules/esm/translators.js:81:18)
    at async link (internal/modules/esm/module_job.js:37:21)
(node:30870) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:30870) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
```

This isn't particularly helpful. Now, consider the following snippet:

**c.mjs:**
```js
import fs from 'fs';

function bug() {
	// The something doesn't have to exist
	console.log(await fs.promises.readFile("/proc/cpuinfo", "utf-8"));
}

(async () => {
    "use strict";
    
    await bug();
})();
```

There's bug in this one too, but executing it yields a very different and much more helpful error:

```
file:///tmp/c.mjs:5
	console.log(await fs.promises.readFile("/proc/cpuinfo", "utf-8"));
	            ^^^^^

SyntaxError: Unexpected reserved word
    at Loader.moduleStrategy (internal/modules/esm/translators.js:81:18)
    at async link (internal/modules/esm/module_job.js:37:21)
```

Much better. Node gives us a helping hand by telling us where the error occurred.

### How often does it reproduce? Is there a required condition?
This bug in the error message only appears to occur when a module is dynamically imported with `import("./path/to/file.mjs")`. Specifically, the first error message is missing this bit:

```
file:///tmp/c.mjs:5
	console.log(await fs.promises.readFile("/proc/cpuinfo", "utf-8"));
	            ^^^^^
```

...obviously the filepath and line number would be different for b.mjs is this bit was added.

### What is the expected behavior?
The first error message should look like the second.
<!--
If possible please provide textual output instead of screenshots.
-->
When dynamically importing a module that is missing the async keyword on a method, the error message should tell me where the error occurred.

### What do you see instead?
The bit there it tells me where the "unexpected reserved word" was found is missing. See above for examples of what's gone wrong.

<!--
If possible please provide textual output instead of screenshots.
-->

### Additional information
If possible, when it's the `await` keyword that was detected as unexpected, the error message should reflect this more closely. For example, it might be helpful to say `SyntaxError: Unexpected reserved word "await" (did you forget the "async" keyword?)" or something like that.
<!--
Tell us anything else you think we should know.
-->