<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">You definitely want to represent the original declaration in the AST — never just expand it right away into the underlying semantics.<div class=""><br class=""></div><div class="">Others know the AST much better than I do, but: I think you could *also* implement the easy way as well, by adding implicit UsingShadowDecls for each enumerator, each linked to the original UsingEnumDecl.  Or better yet, somehow add a single shadow decl that is a transparent lookup context, somehow.</div><div class=""><br class=""></div><div class="">I believe UsingShadowDecls are introduced by UsingDecls to handle whenever multiple individual declarations need to be introduced into a context — someone correct me if I’m wrong.  There is definitely precedent for introducing implicit declarations simply for lookup purposes, e.g. VarTemplateDecl instantiations get added to a DeclContext.  It’s annoying to deal with but since it’s already being done, I see no reason not to introducing UsingShadowDecls to handle the implementation in this way.</div><div class=""><br class=""></div><div class="">- Dave</div><div class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Jul 10, 2020, at 7:01 AM, Shachaf Co via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org" class="">cfe-dev@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hi all,<div class=""><br class=""></div><div class="">I'm new to Clang, and decided that I want to implement a small C++20 feature - the "using enum" proposal (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1099r5.html" class="">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1099r5.html</a>).</div><div class=""><br class=""></div><div class="">The first part of the proposal, supporting syntax such as "using Color::RED" is easy enough to implement, and basically requires removing an if-statement and adding some diagnostics.</div><div class=""><br class=""></div><div class="">However, I struggle finding the correct way to implement the "using enum Color" syntax. There are two approaches that I see when trying to implement it.</div><div class=""><br class=""></div><div class="">The first approach is "expanding" it to a list of using-declarations (i.e "using enum Color" would be equivalent to "using Color::RED, Color::BLUE, ...). This approach is easier to implement, however the resulting AST won't be as accurate.</div><div class=""><br class=""></div><div class="">The second approach is creating a new AST node representing a "UsingEnumDecl". This will generate a more "correct" AST, however it is much more complicated to implement - it is more similar to using directives ("using namespace ns"), whose implementation is complicated and heavily affects the name lookup.</div><div class=""><br class=""></div><div class="">What do you think is the correct way to implement the feature? Is reducing the complexity worth degrading the accuracy of the AST?</div><div class=""><br class=""></div><div class="">Thanks,</div><div class="">Shachaf</div></div>
_______________________________________________<br class="">cfe-dev mailing list<br class=""><a href="mailto:cfe-dev@lists.llvm.org" class="">cfe-dev@lists.llvm.org</a><br class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev<br class=""></div></blockquote></div><br class=""></div></body></html>