mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
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.
64 lines
1.8 KiB
C++
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());
|
|
}
|