Skip to content
New issue

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

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

Already on GitHub? # to your account

Spec is unclear on function body identifier context #1574

Closed
tomstuart opened this issue Jan 9, 2023 · 4 comments · Fixed by #1578
Closed

Spec is unclear on function body identifier context #1574

tomstuart opened this issue Jan 9, 2023 · 4 comments · Fixed by #1578

Comments

@tomstuart
Copy link
Contributor

As far as I can tell, the text format spec doesn’t explain how a module’s initial identifier context should reach the body of a function definition, which I assume it must somehow.

The func production synthesises an identifier context $I''$ for the function body by composing $I'$ (synthesised by typeuse) with a context containing the function definition’s local variable identifiers, so the inherited attribute $I$ containing the module’s initial context is not directly used. But the typeuse production itself also discards $I$: the $I'$ in its synthesised attribute contains only the parameter identifiers. The only syntactic occurrence of $I$ in these productions is when typeuse looks up the definition of the function’s type.

It’s therefore unclear how the remaining contents of $I$ are made available to the function body. The prose accompanying the typeuse production does mention “the updated identifier context including possible parameter identifiers” (emphasis mine), which perhaps implies that $I'$ is intended to be formed by extending the inherited attribute $I$ rather than discarding it (e.g. $I' = I \oplus \lbrace \mathsf{locals}~(\epsilon)^n \rbrace$ etc), but that’s just a guess.

How is this intended to work? Can the spec be updated to clarify?

@rossberg
Copy link
Member

Yes, thanks for pointing out! There is a composition missing. Please see #1578 for a fix.

@tomstuart
Copy link
Contributor Author

Thank you! #1578 does a good job of clarifying that (contrary to my guess above) the typeuse production is supposed to include only the parameter identifiers in $I'$, with these and the local variable identifiers getting composed with the initial context $I$ in the func production to form the local context $I''$ for the function body.

@rossberg
Copy link
Member

Both would work, of course, and I believe your guess was indeed my original intention. But I just figured that the patch in #1578 avoids duplicating the composition.

@tomstuart
Copy link
Contributor Author

Yeah, it’s neater this way — typeuse is self-contained and only reports any parameter identifiers, and then func is responsible for assembling the pieces. I like it.

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

Successfully merging a pull request may close this issue.

2 participants