blob: 6e81bb7d8897ba78dafa9bf7f4c81708ecfa9028 [file] [log] [blame]
//===--- ResilienceExpansion.h ----------------------------------*- 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_AST_RESILIENCE_EXPANSION_H
#define SWIFT_AST_RESILIENCE_EXPANSION_H
namespace swift {
/// A specification for how much to expand resilient types.
///
/// Right now, this is just a placeholder; a proper expansion
/// specification will probably need to be able to express things like
/// 'expand any type that was fragile in at least such-and-such
/// version'.
enum class ResilienceExpansion : unsigned {
/// A minimal expansion does not expand types that do not have a
/// universally fragile representation. This provides a baseline
/// for what all components can possibly support.
/// - All exported functions must be compiled to at least provide
/// a minimally-expanded entrypoint, or else it will be
/// impossible for components that do not have that type
/// to call the function.
/// - Similarly, any sort of abstracted function call must go through
/// a minimally-expanded entrypoint.
///
/// Minimal expansion will generally pass all resilient types indirectly.
Minimal,
/// A maximal expansion expands all types with fragile
/// representation, even when they're not universally fragile. This
/// is better when internally manipulating values or when working
/// with specialized entry points for a function.
Maximal,
Last_ResilienceExpansion = Maximal
};
} // namespace swift
#endif // LLVM_SWIFT_AST_CAPTURE_INFO_H