lebedev.ri added inline comments.

================
Comment at: clang-doc/ClangDocBinary.h:82
+
+static std::map<BlockId, std::string> BlockIdNameMap = {
+  {NAMESPACE_BLOCK_ID, "NamespaceBlock"},
----------------
lebedev.ri wrote:
> Nice!
> Some thoughts:
> 1. I agree it makes sense to keep it close to the enum definition, in 
> header...
> 2. This will result in global constructor. Generally they are frowned upon in 
> LLVM. But since this is a standalone binary, it may be ok?
> 3. Have you tried using `StringRef` here, instead of `std::string`?
> 4. `std::map` is in general a bad idea.
>       Since the `enum`'s enumerators are all small and consecutive, maybe try 
> `llvm::IndexedMap`?
Also, this should be `static const`, since the underlying enum won't change on 
the fly.

`#llvm` suggests to use TableGen here, i'm not sure how that would work.

As i have now noticed, there isn't a init-list constructor, so I think 
**something** like this might work:
```
static const llvm::IndexedMap<BlockId> BlockIdNameMap = []() {
  llvm::IndexedMap<BlockId> map;
  map.reserve(BI_LAST);

  // There is no init-list constructor for the IndexedMap, so have to improvise
  static const std::initializer_list<std::pair<BlockId, const char* const>> 
inits = {
    {NAMESPACE_BLOCK_ID, "NamespaceBlock"},
    ...
  };
  for(const auto& init : inits)
    map[init.first] = init.second;
}();
```

Also, even though `llvm::IndexedMap<>` is using `llvm::SmallVector<>` 
internally, it does not expose the initial size as template parameter, 
unfortunately, but hardcodes it to `0`. I think it would be great to add one 
more template parameter to `llvm::IndexedMap<>`, which would default to `0`, 
but would allow us here to avoid all memory allocation altogether.

What do you think? If you do agree that using `IndexedMap` seems like the right 
choice, but **don't** want to write the patch for template parameter, i might 
look into it..


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D41102



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

Reply via email to