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