[PATCH] D41102: Setup clang-doc frontend framework

Roman Lebedev via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 6 13:01:13 PST 2018


lebedev.ri added a comment.

Nice!
Some further notes based on the SHA1 nature.



================
Comment at: clang-doc/BitcodeWriter.cpp:74
+  AbbrevGen(Abbrev,
+            {// 0. Fixed-size integer (ref type)
+             llvm::BitCodeAbbrevOp(llvm::BitCodeAbbrevOp::Fixed,
----------------
Those are mixed up.
`USRLengthSize` is definitively supposed to be second.


================
Comment at: clang-doc/BitcodeWriter.cpp:81
+             // 2. The string blob
+             llvm::BitCodeAbbrevOp(llvm::BitCodeAbbrevOp::Blob)});
+}
----------------
The sha1 is all-printable, so how about using `BitCodeAbbrevOp::Encoding::Char6` ?
Char4 would work best, but it is not there.


================
Comment at: clang-doc/BitcodeWriter.cpp:149
+          {MEMBER_TYPE_ACCESS, {"Access", &IntAbbrev}},
+          {NAMESPACE_USR, {"USR", &StringAbbrev}},
+          {NAMESPACE_NAME, {"Name", &StringAbbrev}},
----------------
Ha, and all the `*_USR` are actually `StringAbbrev`'s, not confusing at all :)


================
Comment at: clang-doc/BitcodeWriter.cpp:309
+  assert(Ref.USR.size() < (1U << BitCodeConstants::USRLengthSize));
+  Record.push_back(Ref.USR.size());
+  Stream.EmitRecordWithBlob(Abbrevs.get(ID), Record, Ref.USR);
----------------
Now it would make sense to also assert that this sha1(usr).strlen() == 20


================
Comment at: clang-doc/BitcodeWriter.h:46
+  static constexpr unsigned ReferenceTypeSize = 8U;
+  static constexpr unsigned USRLengthSize = 16U;
+};
----------------
Can definitively lower this to `5U` (2^6 == 32, which is more than the 20 8-bit chars of sha1)


================
Comment at: clang-doc/Representation.h:59
+
+  SmallString<16> USR;
+  InfoType RefType = InfoType::IT_default;
----------------
Now that USR is sha1'd, this is **always** 20 8-bit characters long.


================
Comment at: clang-doc/Representation.h:107
+
+  SmallString<16> USR;
+  SmallString<16> Name;
----------------
`20`
Maybe place `using USRString = SmallString<20>; // SHA1 of USR` somewhere and use it everywhere?


https://reviews.llvm.org/D41102





More information about the cfe-commits mailing list