//===--- FunctionRefKind.h - Function reference kind ------------*- 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 // //===----------------------------------------------------------------------===// // // This file defines the FunctionRefKind enum, which is used to describe how // //===----------------------------------------------------------------------===// #ifndef SWIFT_AST_FUNCTION_REF_KIND_H #define SWIFT_AST_FUNCTION_REF_KIND_H #include "llvm/ADT/StringRef.h" namespace swift { /// Describes how a function is referenced within an expression node, /// which dictates whether argument labels are part of the resulting /// function type or not. /// /// How a function is referenced comes down to how it was spelled in /// the source code, e.g., was it called in the source code and was it /// spelled as a compound name. enum class FunctionRefKind : unsigned { /// The function was referenced using a bare function name (e.g., /// 'f') and not directly called. Unapplied, /// The function was referenced using a bare function name and was /// directly applied once, e.g., "f(a: 1, b: 2)". SingleApply, /// The function was referenced using a bare function name and was /// directly applied two or more times, e.g., "g(x)(y)". DoubleApply, /// The function was referenced using a compound function name, /// e.g., "f(a:b:)". Compound, }; /// Produce a string describing a function reference kind, for /// debugging purposes. llvm::StringRef getFunctionRefKindStr(FunctionRefKind refKind); } #endif // SWIFT_AST_FUNCTION_REF_KIND_H