Files
swift-mirror/lib/AST/FunctionRefInfo.cpp
Hamish Knight 73fb36f371 [AST] Split out "is compound" bit on FunctionRefInfo
FunctionRefKind was originally designed to represent
the handling needed for argument labels on function
references, in which the unapplied and compound cases
are effectively the same. However it has since been
adopted in a bunch of other places where the
spelling of the function reference is entirely
orthogonal to the application level.

Split out the application level from the
"is compound" bit. Should be NFC. I've left some
FIXMEs for non-NFC changes that I'll address in a
follow-up.
2024-12-02 14:11:33 +00:00

64 lines
1.8 KiB
C++

//===--- FunctionRefInfo.cpp - Function reference info --------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2024 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
//
//===----------------------------------------------------------------------===//
//
// This file implements the FunctionRefInfo class.
//
//===----------------------------------------------------------------------===//
#include "swift/AST/FunctionRefInfo.h"
#include "swift/AST/DeclNameLoc.h"
#include "swift/AST/Identifier.h"
#include "llvm/Support/raw_ostream.h"
using namespace swift;
FunctionRefInfo FunctionRefInfo::unapplied(DeclNameLoc nameLoc) {
return FunctionRefInfo(ApplyLevel::Unapplied, nameLoc.isCompound());
}
FunctionRefInfo FunctionRefInfo::unapplied(DeclNameRef nameRef) {
return FunctionRefInfo(ApplyLevel::Unapplied, nameRef.isCompoundName());
}
FunctionRefInfo FunctionRefInfo::addingApplicationLevel() const {
auto withApply = [&]() {
switch (getApplyLevel()) {
case ApplyLevel::Unapplied:
return ApplyLevel::SingleApply;
case ApplyLevel::SingleApply:
case ApplyLevel::DoubleApply:
return ApplyLevel::DoubleApply;
}
};
return FunctionRefInfo(withApply(), isCompoundName());
}
void FunctionRefInfo::dump(raw_ostream &os) const {
switch (getApplyLevel()) {
case ApplyLevel::Unapplied:
os << "unapplied";
break;
case ApplyLevel::SingleApply:
os << "single apply";
break;
case ApplyLevel::DoubleApply:
os << "double apply";
break;
}
if (isCompoundName())
os << " (compound)";
}
void FunctionRefInfo::dump() const {
dump(llvm::errs());
}