sammccall added a comment.

It occurs to me that `claim` is `O(node_tokens + log total_tokens)` which is 
bad when the nodes are large.

Indeed for an input like `namespace { namespace { namespace { ... } } }` time 
is quadratic.

I think this is probably fine in practice. Against adversarial input clang 
certainly can take exponential time, and easily crash too.

If we do need to fix it my best idea is to give each "uninteresting" TokInfo 
(that is, !selected || claimed) a pointer to the next TokInfo with different 
flags. This would allow iteration to quickly skip over contiguous ranges one 
they had been traversed once.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D65486



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

Reply via email to