12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- //===- NodeIntrospection.h -----------------------------------*- C++ -*----===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // This file contains the implementation of the NodeIntrospection.
- //
- //===----------------------------------------------------------------------===//
- #include "clang/Tooling/NodeIntrospection.h"
- #include "clang/AST/AST.h"
- #include "llvm/Support/raw_ostream.h"
- namespace clang {
- namespace tooling {
- void LocationCallFormatterCpp::print(const LocationCall &Call,
- llvm::raw_ostream &OS) {
- if (const LocationCall *On = Call.on()) {
- print(*On, OS);
- if (On->returnsPointer())
- OS << "->";
- else
- OS << '.';
- }
- OS << Call.name() << "()";
- }
- std::string LocationCallFormatterCpp::format(const LocationCall &Call) {
- std::string Result;
- llvm::raw_string_ostream OS(Result);
- print(Call, OS);
- OS.flush();
- return Result;
- }
- namespace internal {
- static bool locationCallLessThan(const LocationCall *LHS,
- const LocationCall *RHS) {
- if (!LHS && !RHS)
- return false;
- if (LHS && !RHS)
- return true;
- if (!LHS && RHS)
- return false;
- auto compareResult = LHS->name().compare(RHS->name());
- if (compareResult < 0)
- return true;
- if (compareResult > 0)
- return false;
- return locationCallLessThan(LHS->on(), RHS->on());
- }
- bool RangeLessThan::operator()(
- std::pair<SourceRange, SharedLocationCall> const &LHS,
- std::pair<SourceRange, SharedLocationCall> const &RHS) const {
- if (LHS.first.getBegin() < RHS.first.getBegin())
- return true;
- else if (LHS.first.getBegin() != RHS.first.getBegin())
- return false;
- if (LHS.first.getEnd() < RHS.first.getEnd())
- return true;
- else if (LHS.first.getEnd() != RHS.first.getEnd())
- return false;
- return locationCallLessThan(LHS.second.get(), RHS.second.get());
- }
- bool RangeLessThan::operator()(
- std::pair<SourceLocation, SharedLocationCall> const &LHS,
- std::pair<SourceLocation, SharedLocationCall> const &RHS) const {
- if (LHS.first == RHS.first)
- return locationCallLessThan(LHS.second.get(), RHS.second.get());
- return LHS.first < RHS.first;
- }
- } // namespace internal
- } // namespace tooling
- } // namespace clang
- #include "clang/Tooling/NodeIntrospection.inc"
|