erichkeane added inline comments.

================
Comment at: clang/lib/Parse/ParseDecl.cpp:447
             Actions.CorrectDelayedTyposInExpr(ParseAssignmentExpression()));
+
+        if (Tok.is(tok::ellipsis)) {
----------------
steffenlarsen wrote:
> erichkeane wrote:
> > steffenlarsen wrote:
> > > erichkeane wrote:
> > > > steffenlarsen wrote:
> > > > > erichkeane wrote:
> > > > > > So I was thinking about this overnight... I wonder if this logic is 
> > > > > > inverted here?  Aaron can better answer, but I wonder if we should 
> > > > > > be instead detecting when we are on the 'last' parameter and it is 
> > > > > > one of these `VariadicExprArgument` things (that accept a pack), 
> > > > > > then dropping the parser into a loop of:
> > > > > > 
> > > > > > while (Tok.is(tok::comma)){
> > > > > >   Tok.Consume();
> > > > > >   ArgExpr = CorrectTypos(ParseAssignmentExpr(...));
> > > > > > }
> > > > > > // finally, consume the closing paren.
> > > > > > 
> > > > > > WDYT?
> > > > > The parsing of attribute arguments is already this lenient. It does 
> > > > > not actually care how many arguments the attribute says it takes 
> > > > > (unless it takes a type and then it will only currently supply _one_ 
> > > > > argument). It simply consumes as many expressions it can before 
> > > > > reaching the end parenthesis, then leaves the attributes to consume 
> > > > > them in `clang/lib/Sema/SemaDeclAttr.cpp`.
> > > > > As a result we do not need any additional work here to handle 
> > > > > variadic arguments, but it also means that we have to introduce the 
> > > > > restrictions that we can only allow packs in the last argument and 
> > > > > allow only that argument to be variadic, as otherwise we have no way 
> > > > > of knowing when and where the packs pass between argument boundaries.
> > > > My point is, I don't think THIS function should be handling the 
> > > > ellipsis, the expression parsing functions we send the parsing of each 
> > > > component off to should do that.
> > > > 
> > > > We unfortunately cannot move the entirety of this parsing section to do 
> > > > that, since 'identifier'/'type', and 'Function' argument types end up 
> > > > needing special handling, but it would be nice if our 'expr' types 
> > > > would all be able to do this, and I suggested earlier that we could 
> > > > start with the `VariadicExprArgument` to make this an easier patch that 
> > > > didn't have to deal with the issues that come with that.
> > > > 
> > > > That said, it would be nice if we could get CLOSE to that.
> > > Sorry. I am still not sure I am following. Do you mean the consumption of 
> > > pack expressions should be moved into the expression parsing so other 
> > > places (not just attributes) would accept it? If so, I am not opposed to 
> > > the idea though I have no idea which expressions these would be nor the 
> > > full implications of such a change. For these we at least have the 
> > > isolation of having to explicitly support the packs in the given 
> > > attributes.
> > I'm saying the other expression parsers should ALREADY properly handle 
> > packs, and we should just use those.
> I think I see what you mean. There is the `Parser::ParseExpressionList` which 
> may fit the bill, though it seems to also accept initializer lists. But since 
> it is an expression the attributes can decide if it is a valid expression for 
> them, so maybe that is not a problem?
Hmm... I don't have a good idea of that, Aaron has better visibility into that 
sort of thing.

Part of the advantage to doing it the way I suggest is that it ends up being a 
single call (that is, the parser should parse the commas!), so we should only 
have to consume the closing paren.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D114439/new/

https://reviews.llvm.org/D114439

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to