aprantl added inline comments.

================
Comment at: source/Utility/FileSpec.cpp:107
+  for (auto i = path.find('/'); i != llvm::StringRef::npos;
+       i = path.find('/', i + 1)) {
+    const auto nextChar = safeCharAtIndex(path, i+1);
----------------
clayborg wrote:
> clayborg wrote:
> > aprantl wrote:
> > > clayborg wrote:
> > > > I am fine switching to using the llvm functions for removing, this is 
> > > > only detecting if any normalization needs to happen. If there is an 
> > > > equivalent LLVM function that will only run through the string one time 
> > > > to detect all needs for normalization (no multiple passes looking for 
> > > > "..", then for "." etc like we used to have), I would be happy to use 
> > > > it, but there doesn't seem to be. We are trying to avoid having to 
> > > > create a "SmallVectorImpl< char >" for all paths if they don't need 
> > > > fixing here. This function is just iterating through an llvm::StringRef 
> > > > just to see if normalization needs to happen. If it does, then we make 
> > > > a SmallVectorImpl< char > and we fix the path. We can easily use llvm 
> > > > functions for the fixing part. 
> > > I see, you want to avoid copying the string when it isn't necessary to do 
> > > so. IMHO the best way to do this is to add a `bool hasDots(const Twine 
> > > &)` function to llvm::sys::path and add a `bool remove_dot_dot` parameter 
> > > to `removeDots()`. Since you have already written the unittests, adding 
> > > the function to LLVM shouldn't be any extra work (I'll help reviewing), 
> > > and we'll have 100 LoC less to maintain.
> > > 
> > > This way we can avoid having two functions that perform path 
> > > normalization that superficially look like they might do the same thing, 
> > > but a year from now nobody can really tell whether they behave exactly 
> > > the same, and whether a bug found in one implementation should also be 
> > > fixed in the other one, etc... .
> > I want to know if there are redundant slashes as well. I want something 
> > like "bool llvm::sys::has(const Twine &, bool dots, bool dot_dots, bool 
> > redundant_slashes)". But I don't see that getting accepted? I just want a 
> > "bool llvm:sys::path::contains_redundant_stuff(const Twine &)".  Not sure 
> > on the name though. needs_normalization? can_be_shortened? Everything in 
> > LLVM right now assumes that dots, dot dots, slashes and realpath stuff 
> > happen in the same function. Not sure how to break that up without ruining 
> > the performance of the one and only loop that should be happening. I like 
> > the current approach since it doesn't require chopping up the string into 
> > an array and iterating through the array.
> Also not sure if the LLVM stuff will try to substitute in the current working 
> directory for "."?
I just read the source code of remove_dots() 
(http://llvm.org/doxygen/Path_8cpp_source.html#l00699) and if I'm not mistaken, 
it actually also removes double-separators as a side-effect, since it iterates 
over the path components of the string as it constructs the copy. It also seems 
to avoid the copy operation if it isn't necessary.

Could you take another look? Perhaps I'm missing something, (or perhaps we can 
just turn this into a small addition to remove_dots).

> Everything in LLVM right now assumes that dots, dot dots, slashes and 
> realpath stuff happen in the same function.
I'm not sure I understand.


https://reviews.llvm.org/D45977



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

Reply via email to