Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Missing sources should throw a *SyntaxError* when imported #49

Open
nicolo-ribaudo opened this issue Jun 8, 2023 · 3 comments
Open

Comments

@nicolo-ribaudo
Copy link
Member

nicolo-ribaudo commented Jun 8, 2023

Right now this code throws a ReferenceError, because there are no JS source objects:

import source s from "./mod.js";

I believe this code should throw a SyntaxError, even if might appear conter-intuitive. ReferenceError is only used for code that runs, and not before evaluation. As a very strong precedent ("very strong" because it's basically the same thing), import { x } from "./a" is a SyntaxError is ./a does not export x.

Older versions of the language used to have ReferenceErrors for some errors that happen before evaluation, but in ES2020 we updated all of them to be SyntaxErrors (tc39/ecma262#1527).

@guybedford
Copy link
Collaborator

This is still somewhat of a semantic question since source phases aren't really associated with any execution, they are more like slots on the module map.

We could similarly say that this is more like TDZ, since the slot is there but it is not filled. Note also that modules in cycles with TDZ provide reference errors when attempting to access a binding from a module which has not yet been executed.

That all said, I don't have strong opinions and am open to changing the error type, but some further discussion could be worthwhile.

@nicolo-ribaudo
Copy link
Member Author

Re discussed about this in a modules harmony call, what was the resolution?

@guybedford
Copy link
Collaborator

I believe there were no strong opinions. If you still feel strongly towards SyntaxError please feel free to go ahead.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants