brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 30a18e3 Raw
76 lines · cpp
1//===-- RPCServerHeaderEmitter.cpp ----------------------------------------===//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-exception6//7//===----------------------------------------------------------------------===//8 9#include "RPCServerHeaderEmitter.h"10#include "RPCCommon.h"11 12#include "clang/AST/AST.h"13#include "clang/AST/Mangle.h"14#include "clang/Frontend/CompilerInstance.h"15 16#include "llvm/ADT/StringRef.h"17#include "llvm/Support/ToolOutputFile.h"18#include "llvm/Support/raw_ostream.h"19 20using namespace clang;21using namespace lldb_rpc_gen;22 23void RPCServerHeaderEmitter::EmitMethod(const Method &method) {24  // We'll be using the mangled name in order to disambiguate25  // overloaded methods.26  const std::string &MangledName = method.MangledName;27 28  EmitLine("class " + MangledName +29           " : public rpc_common::RPCFunctionInstance {");30  EmitLine("public:");31  IndentLevel++;32  EmitConstructor(MangledName);33  EmitDestructor(MangledName);34  EmitHandleRPCCall();35  IndentLevel--;36  EmitLine("};");37}38 39void RPCServerHeaderEmitter::EmitHandleRPCCall() {40  EmitLine("bool HandleRPCCall(rpc_common::Connection &connection, "41           "rpc_common::RPCStream &send, rpc_common::RPCStream &response) "42           "override;");43}44 45void RPCServerHeaderEmitter::EmitConstructor(const std::string &MangledName) {46  EmitLine(MangledName + "() : RPCFunctionInstance(\"" + MangledName +47           "\") {}");48}49 50void RPCServerHeaderEmitter::EmitDestructor(const std::string &MangledName) {51  EmitLine("~" + MangledName + "() override {}");52}53 54std::string RPCServerHeaderEmitter::GetHeaderGuard() {55  const std::string UpperFilenameNoExt =56      llvm::sys::path::stem(57          llvm::sys::path::filename(OutputFile->getFilename()))58          .upper();59  return "GENERATED_LLDB_RPC_SERVER_" + UpperFilenameNoExt + "_H";60}61 62void RPCServerHeaderEmitter::Begin() {63  const std::string HeaderGuard = GetHeaderGuard();64  EmitLine("#ifndef " + HeaderGuard);65  EmitLine("#define " + HeaderGuard);66  EmitLine("");67  EmitLine("#include <lldb-rpc/common/RPCFunction.h>");68  EmitLine("");69  EmitLine("namespace rpc_server {");70}71 72void RPCServerHeaderEmitter::End() {73  EmitLine("} // namespace rpc_server");74  EmitLine("#endif // " + GetHeaderGuard());75}76