Fold "AbstractCC" into SILFunctionType::Representation.

These aren't really orthogonal concerns--you'll never have a @thick @cc(objc_method), or an @objc_block @cc(witness_method)--and we have gross decision trees all over the codebase that try to hopscotch between the subset of combinations that make sense. Stop the madness by eliminating AbstractCC and folding its states into SILFunctionTypeRepresentation. This cleans up a ton of code across the compiler.

I couldn't quite eliminate AbstractCC's information from AST function types, since SIL type lowering transiently created AnyFunctionTypes with AbstractCCs set, even though these never occur at the source level. To accommodate type lowering, allow AnyFunctionType::ExtInfo to carry a SILFunctionTypeRepresentation, and arrange for the overlapping representations to share raw values.

In order to avoid disturbing test output, AST and SILFunctionTypes are still printed and parsed using the existing @thin/@thick/@objc_block and @cc() attributes, which is kind of gross, but lets me stage in the real source-breaking change separately.

Swift SVN r27095
This commit is contained in:
Joe Groff
2015-04-07 21:59:39 +00:00
parent e5cbb67d7d
commit ad0d20c07a
59 changed files with 976 additions and 962 deletions

View File

@@ -244,14 +244,14 @@ public:
bool isZombie() const { return Zombie; }
/// Returns the calling convention used by this entry point.
AbstractCC getAbstractCC() const {
return getLoweredFunctionType()->getAbstractCC();
SILFunctionTypeRepresentation getRepresentation() const {
return getLoweredFunctionType()->getRepresentation();
}
/// Returns true if this function has a calling convention that has a self
/// argument.
bool hasSelfArgument() const {
return getLoweredFunctionType()->hasSelfArgument();
bool hasSelfParam() const {
return getLoweredFunctionType()->hasSelfParam();
}
StringRef getName() const { return Name; }