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

Identity cover grammar #224

Open
waldemarhorwat opened this issue Apr 9, 2024 · 4 comments
Open

Identity cover grammar #224

waldemarhorwat opened this issue Apr 9, 2024 · 4 comments

Comments

@waldemarhorwat
Copy link

The CoverAwaitExpressionAndAwaitUsingDeclarationHead and AwaitExpression grammars are identical, so I'm curious about the editorial decision to reparse in that case.

The proposal includes instances of static semantics reparsing a CoverAwaitExpressionAndAwaitUsingDeclarationHead as an AwaitExpression, and generating an error if that fails, but it can't fail.

I assume the reason to keep the cover conceptually separate from the identical covered grammar is so that assertions like that in AwaitExpression work cleanly; if so, an informative note might be in order.

@rbuckton
Copy link
Collaborator

rbuckton commented Apr 9, 2024

@syg, @michaelficarra, @bakkot do you have thoughts on this? Is it worth leaving the cover in?

@syg
Copy link

syg commented Jun 10, 2024

I was similarly confused by this. I think even had to ask @rbuckton to explain why it's the same grammar. Definitely worth at least a note. I think on net, having an identical-in-content-but-differently-named production is a positive on readability. I don't know of a better way to do it in any case.

@waldemarhorwat
Copy link
Author

If all you want is an identical-in-content-but-differently-named production, you might not need a cover grammar. A production that expands to another production might work.

@rbuckton
Copy link
Collaborator

We do something similar to this in the spec already in that CoverCallExpressionAndAsyncArrowHead is identical to CallMemberExpression. IIRC, the only places where we use a production as both the actual production and as a cover for a different production are ArrayLiteralExpression and ObjectLiteralExpression.

In my opinion, calling it out as a cover makes it more obvious to the spec reader that the syntax has other implications to consider.

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

3 participants