-
Notifications
You must be signed in to change notification settings - Fork 6.1k
Integrate numerical label IDs to Yul #15969
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
base: add_node_id_dispenser
Are you sure you want to change the base?
Conversation
d7aa648
to
ba47427
Compare
ba47427
to
b45bcb3
Compare
b45bcb3
to
bc7c678
Compare
bc7c678
to
061185e
Compare
Just read through this. Two things so far:
|
Ghosts are documented here: https://github.com/ethereum/solidity/blob/develop/libyul/ASTLabelRegistry.h#L38-L41
It really should be |
This pull request is stale because it has been open for 14 days with no activity. |
With this change, nodes in the Yul AST are no longer referred to by string name (or more precisely: statically managed repository of strings and referenced by hashes thereof) but by numerical ID. The numerical ID belongs to an immutable
ASTLabelRegistry
, in which it is associated to a string label. In turn, the registry is owned by theyul::AST
.During, e.g., optimization it is possible to generate new
LabelID
s, which not yet have an associated label in a registry but encode a parent label (which may be empty) using theyul::LabelIDDispenser
. Newly generated IDs are only valid with respect to their generating instance ofLabelIDDispenser
.At the end of optimization, when f.ex. serialization back into a stringified form is required, the
LabelID
s currently contained in the AST are assigned new labels by theyul::LabelIDDispenser
, generating a new instance ofASTLabelRegistry
.This PR removes
YulString
,yul::NameSimplifier
,yul::NameDispenser
,yul::VarNameCleaner
and replaces them by theLabelID
and related utilities.There is a special case of ghost nodes. These are introduced in CFGs to map switch statements to sequences of if-else blocks but do not live in the actual AST, just the CFG. To this end, a CFG also holds an instance of
ASTLabelRegistry
and manages theLabelID
->string_view
transformation itself. AnASTLabelRegistry
itself does not know how to stringify the special ghost nodes.Depends on #15838.