1 //===-- Generators.cpp - Generator Registry ----------------------*- C++-*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "Generators.h"
10 
11 LLVM_INSTANTIATE_REGISTRY(clang::doc::GeneratorRegistry)
12 
13 namespace clang {
14 namespace doc {
15 
16 llvm::Expected<std::unique_ptr<Generator>>
17 findGeneratorByName(llvm::StringRef Format) {
18   for (auto I = GeneratorRegistry::begin(), E = GeneratorRegistry::end();
19        I != E; ++I) {
20     if (I->getName() != Format)
21       continue;
22     return I->instantiate();
23   }
24   return llvm::make_error<llvm::StringError>("Can't find generator: " + Format,
25                                              llvm::inconvertibleErrorCode());
26 }
27 
28 // This anchor is used to force the linker to link in the generated object file
29 // and thus register the generators.
30 extern volatile int YAMLGeneratorAnchorSource;
31 extern volatile int MDGeneratorAnchorSource;
32 static int LLVM_ATTRIBUTE_UNUSED YAMLGeneratorAnchorDest =
33     YAMLGeneratorAnchorSource;
34 static int LLVM_ATTRIBUTE_UNUSED MDGeneratorAnchorDest =
35     MDGeneratorAnchorSource;
36 
37 } // namespace doc
38 } // namespace clang
39