blob: 8ae2d3f9b4026648bdd67d27e1d69a583cac2afe [file] [log] [blame]
//===--- ReferencedNameTracker.h - Records looked-up names ------*- C++ -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
#ifndef SWIFT_REFERENCEDNAMETRACKER_H
#define SWIFT_REFERENCEDNAMETRACKER_H
#include "swift/AST/Identifier.h"
#include "llvm/ADT/DenseMap.h"
namespace swift {
class NominalTypeDecl;
class ReferencedNameTracker {
#define TRACKED_SET(KIND, NAME) \
private: \
llvm::DenseMap<KIND, bool> NAME##s; \
public: \
void add##NAME(KIND new##NAME, bool isCascadingUse) { \
NAME##s[new##NAME] |= isCascadingUse; \
} \
const decltype(NAME##s) &get##NAME##s() const { \
return NAME##s; \
}
TRACKED_SET(DeclBaseName, TopLevelName)
TRACKED_SET(DeclBaseName, DynamicLookupName)
using MemberPair = std::pair<const NominalTypeDecl *, DeclBaseName>;
TRACKED_SET(MemberPair, UsedMember)
#undef TRACKED_SET
};
} // end namespace swift
#endif // LLVM_SWIFT_REFERENCEDNAMETRACKER_H