clayborg 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:
> 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 "."?


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