An interface as is presented with git add -p is just an idea for future work 
at this point. Right now, cpp11-migrate is going to apply transforms wholesale 
to files with no user input other than what is given on the command line. As 
mentioned in the design doc, there are plans to introduce more ways for user 
input especially as the transforms get more complicated. This is basically the 
very first commit for this tool. We have to start somewhere after all.


================
Comment at: cpp11-migrate/Cpp11Migrate.cpp:39-42
@@ +38,6 @@
+// Helper RAII class for created Transforms.
+class TransformVec {
+public:
+  typedef std::vector<Transform*>::const_iterator const_iterator;
+
+public:
----------------
Sean Silva wrote:
> Can you just use a regular vector of smart pointers?
I can do that. Does LLVM have a utility smart pointer that's recommended?

================
Comment at: cpp11-migrate/Cpp11Migrate.cpp:82-83
@@ -40,1 +81,4 @@
+
+#define AddTransformOpt(List, Name, T, Desc) \
+  List.getParser().addLiteralOption(Name, &ConstructTransform<T>, Desc);
 
----------------
Sean Silva wrote:
> Why is this a macro?
It mirrors the EnumValN macro from the command line library. The point is to 
make adding options for transforms nicer.

================
Comment at: cpp11-migrate/Cpp11Migrate.cpp:123
@@ +122,3 @@
+  // Final Syntax check.
+  if (!TransformList.empty()) {
+    ClangTool EndSyntaxTool(OptionsParser.getCompilations(),
----------------
Sean Silva wrote:
> Not specifying any transforms should probably just be an error during option 
> parsing.
Just an arbitrary decision I made. I can make it at error if that's preferred.

================
Comment at: cpp11-migrate/Cpp11Migrate.cpp:124-129
@@ +123,8 @@
+  if (!TransformList.empty()) {
+    ClangTool EndSyntaxTool(OptionsParser.getCompilations(),
+                            OptionsParser.getSourcePathList());
+    if (EndSyntaxTool.run(
+        newFrontendActionFactory<clang::SyntaxOnlyAction>()) != 0) {
+      return 1;
+    }
+  }
----------------
Sean Silva wrote:
> What is the purpose of doing this if it doesn't roll back the changes?
> 
> If the tool "fails to transform my files" (`return 1`), then I expect it to 
> not modify my files (or at least leave them in some well-defined state; or at 
> the absolute minimum give me a useful diagnostic explaining the situation). 
> The same could be said for the `return 1` in the transform-apply loop.
Reverting the state of files is something that's not fully implemented due to 
the simple interface provided by rewriting. The point of this commit is simply 
to port the loop convert tool into the cpp11-migrate tool to get things moving. 
Some work is going to need to be done with clang itself to get things to work 
properly according to the design.

================
Comment at: cpp11-migrate/Transform.h:58-59
@@ +57,4 @@
+private:
+  bool ChangesMade;
+  bool ChangesNotMade;
+};
----------------
Sean Silva wrote:
> Why are there two flags here? When would one not be the opposite of the 
> other? Maybe a better name is necessary?
This is a port of loop-convert functionality. Loop-convert kept track of 
changes made, changes it might have made if they did not overlap with other 
changes (deferred it called them), and changes that it would have made if the 
user's tolerance for risk was high enough (rejected). Since I'm not sure what 
cpp11-migrate is going to do with regards to tracking that info yet I just 
hooked up the loop-convert functionality to these flags. 'changes made' 
indicates changes were actually made. 'changes-not-made' means there were 
changes not made (deferred or rejected by original nomenclature).

I didn't spend a lot of time thinking about nice names considering the 
uncertain nature of this functionality.


http://llvm-reviews.chandlerc.com/D251

BRANCH
  loop-convert

ARCANIST PROJECT
  clang-tools-extra
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to