-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
See: oxc-project/oxc#6881 (comment)
We want to avoid implementing GetAddress for &T because it's error-prone. But often in transformer you only have a &T not a &Box<T> and want to get it's address (e.g. in a visitor like exit_function).
This is legitimate because the &mut T passed into visitor function is always a reference to value in the arena.
We could achieve this by:
- Pushing
Ancestorto the stack of ancestors before callingenter_*and pop it after callingexit_*. TraverseAncestry::parentreturn notstack.last()but 1 ancestor before it.TraverseAncestry::ancestorreturn the item at indexlast_index - level - 1(notlast_index - level).TraverseAncestry::ancestorsskip the last item on stack.- Always push to ancestors stack in all
walk_*functions (I think we skip that for leaf nodes at present).
Then existing APIs behave as they do now, but TraverseAncestry::current_address can get the address of the current node with stack.last().address().
Problem: What about visitors for enums e.g. Expression? current_address would return the address of parent node, because enums don't get an Ancestor. Either:
- Live with it. or
- Move pushing to ancestor stack up into the
walk_*functions for enums (a bit tricky, because some nodes don't always live within an enum).
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels