aaron.ballman added inline comments.

================
Comment at: include/clang/AST/DeclBase.h:1139
+  void dump(raw_ostream &Out, bool Deserialize = false,
+            ASTDumpOutputFormat OutputFormat = ADOF_Default) const;
 
----------------
steveire wrote:
> I think we've talked about this before, but I don't think growing interfaces 
> like this is the best way forward. An enum is a less-good replacement for an 
> object (ie making the user of the API responsible for creating the dumper 
> they want to use).
> 
> I think that could be made more convenient in the future. What do you think?
I think that may be a good future improvement, yes.

One thing to take on balance when considering this for the future is that 
`dump()` can be called from within a debugger and that's a bit harder to 
accomplish with an object interface. I'm not certain that will be a big issue 
for my use case, but it may matter to some folks.


================
Comment at: include/clang/AST/JSONNodeDumper.h:55
+  }
+
+  /// Add a child of the current node with an optional label.
----------------
riccibruno wrote:
> Perhaps you should perfect-forward `DoAddChild` ?
Hmm, if I was doing that, I'd probably prefer to use `std::invoke()` to call 
the function, but we can't use that because it's C++17. Do you have concerns if 
I don't make that change just yet (we don't do it from `TextNodeDumper` either).


================
Comment at: include/clang/AST/JSONNodeDumper.h:53
+  template <typename Fn> void AddChild(Fn DoAddChild) {
+    return AddChild("inner", DoAddChild);
+  }
----------------
steveire wrote:
> You have 
> 
>     !Label.empty() ? Label : "inner";
> 
> below. This looks needlessly non-DRY?
There are calls to `AddChild()` from the AST traverser that pass in an empty 
string, which is how I got to the state I'm in (see 
`ASTNodeTraverser::Visit(const Stmt *, StringRef)`). I can pull the explicit 
label from this call and just pass an empty string.


================
Comment at: include/clang/AST/JSONNodeDumper.h:130
+// JSON and then dump to a file because the AST is an ordered collection of
+// nodes but our JSON objects are modelled as an unordered container. We can
+// use JSON facilities for constructing the terminal fields in a node because
----------------
steveire wrote:
> I'm no expert in JSON, so I'm not certain if this has implications.
> 
> Do entries in a JSON object (ie not an Array-type) have order? Are you 
> 'giving' them order here which is not part of how JSON is usually parsed (eg 
> by third party tools)?
> 
> Can you create ordered JSON (arrays) where it is needed? I see that `inner` 
> is already an array, so I'm probably missing the part that is 'modelled as an 
> unordered container'. Can you point that out to me?
Oh, good catch! I need to update those comments because they got stale.

> Can you create ordered JSON (arrays) where it is needed? I see that inner is 
> already an array, so I'm probably missing the part that is 'modelled as an 
> unordered container'. Can you point that out to me?

It's the key/value pair bits that are unordered, and that turns out to not 
matter here. I wrote that comment during a very early pass when I was passing 
around JSON objects more liberally and I had run into a situation where I was 
using kv pairs but order mattered (I don't even recall what the case was off 
the top of my head now). With the new design, these comments are stale -- I've 
corrected that.


================
Comment at: include/clang/AST/JSONNodeDumper.h:161
+      OS << ",\n";
+    OS << Indentation << "\"" << Key << "\": {\n";
+    Indentation += "  ";
----------------
steveire wrote:
> Is it possible this 'textual' JSON generation could produce invalid JSON? One 
> of the things a library solution ensures is balanced braces and valid syntax 
> etc. I'm not familiar enough with JSON to know if it has dark corners.
I don't believe this will produce invalid JSON, short of aborting mid-stream.


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

https://reviews.llvm.org/D60910



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

Reply via email to