brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 762864c Raw
36 lines · cpp
1//===--- SymbolOccurrences.cpp - Clang refactoring library ----------------===//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 "clang/Tooling/Refactoring/Rename/SymbolOccurrences.h"10#include "clang/Tooling/Refactoring/Rename/SymbolName.h"11#include "llvm/ADT/STLExtras.h"12 13using namespace clang;14using namespace tooling;15 16SymbolOccurrence::SymbolOccurrence(const SymbolName &Name, OccurrenceKind Kind,17                                   ArrayRef<SourceLocation> Locations)18    : Kind(Kind) {19  ArrayRef<std::string> NamePieces = Name.getNamePieces();20  assert(Locations.size() == NamePieces.size() &&21         "mismatching number of locations and lengths");22  assert(!Locations.empty() && "no locations");23  if (Locations.size() == 1) {24    new (&SingleRange) SourceRange(25        Locations[0], Locations[0].getLocWithOffset(NamePieces[0].size()));26    return;27  }28  MultipleRanges = std::make_unique<SourceRange[]>(Locations.size());29  NumRanges = Locations.size();30  for (const auto &Loc : llvm::enumerate(Locations)) {31    MultipleRanges[Loc.index()] = SourceRange(32        Loc.value(),33        Loc.value().getLocWithOffset(NamePieces[Loc.index()].size()));34  }35}36