mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
IRGen/Runtime: Metadata for @convention(c) function types.
For now, C&P a new metadata cache for C function pointers, like we do for blocks and thin types. Swift SVN r27595
This commit is contained in:
@@ -264,6 +264,19 @@ static void _buildNameForMetadata(const Metadata *type,
|
||||
result += ")";
|
||||
return;
|
||||
}
|
||||
case MetadataKind::CFunction: {
|
||||
if (level >= TypeSyntaxLevel::TypeSimple)
|
||||
result += "(";
|
||||
|
||||
result += "@convention(c) ";
|
||||
|
||||
auto func = static_cast<const FunctionTypeMetadata *>(type);
|
||||
_buildFunctionTypeName(func, result);
|
||||
|
||||
if (level >= TypeSyntaxLevel::TypeSimple)
|
||||
result += ")";
|
||||
return;
|
||||
}
|
||||
case MetadataKind::Function: {
|
||||
if (level >= TypeSyntaxLevel::TypeSimple)
|
||||
result += "(";
|
||||
@@ -498,6 +511,7 @@ static bool _conformsToProtocol(const OpaqueValue *value,
|
||||
case MetadataKind::ExistentialMetatype:
|
||||
case MetadataKind::Metatype:
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::Block: // FIXME
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
@@ -559,6 +573,7 @@ static bool _conformsToProtocol(const OpaqueValue *value,
|
||||
case MetadataKind::Existential: // FIXME
|
||||
case MetadataKind::ExistentialMetatype: // FIXME
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::Block: // FIXME
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
@@ -665,6 +680,7 @@ static void findDynamicValueAndType(OpaqueValue *value, const Metadata *type,
|
||||
// Non-polymorphic types.
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject:
|
||||
@@ -728,6 +744,7 @@ static void deallocateDynamicValue(OpaqueValue *value, const Metadata *type) {
|
||||
case MetadataKind::ExistentialMetatype:
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject:
|
||||
@@ -768,6 +785,7 @@ swift_dynamicCastMetatypeToObjectConditional(const Metadata *metatype) {
|
||||
case MetadataKind::ForeignClass:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject:
|
||||
return nullptr;
|
||||
@@ -800,6 +818,7 @@ swift_dynamicCastMetatypeToObjectUnconditional(const Metadata *metatype) {
|
||||
case MetadataKind::ForeignClass:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject: {
|
||||
std::string sourceName = nameForMetadata(metatype);
|
||||
@@ -906,6 +925,7 @@ static bool _dynamicCastToExistential(OpaqueValue *dest,
|
||||
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject:
|
||||
@@ -1048,6 +1068,7 @@ swift::swift_dynamicCastUnknownClass(const void *object,
|
||||
case MetadataKind::ExistentialMetatype:
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject:
|
||||
@@ -1105,6 +1126,7 @@ swift::swift_dynamicCastUnknownClassUnconditional(const void *object,
|
||||
case MetadataKind::ExistentialMetatype:
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject:
|
||||
@@ -1166,6 +1188,7 @@ swift::swift_dynamicCastMetatype(const Metadata *sourceType,
|
||||
case MetadataKind::ExistentialMetatype:
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject:
|
||||
@@ -1198,6 +1221,7 @@ swift::swift_dynamicCastMetatype(const Metadata *sourceType,
|
||||
case MetadataKind::ExistentialMetatype:
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject:
|
||||
@@ -1215,6 +1239,7 @@ swift::swift_dynamicCastMetatype(const Metadata *sourceType,
|
||||
case MetadataKind::ExistentialMetatype:
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject:
|
||||
@@ -1279,6 +1304,7 @@ swift::swift_dynamicCastMetatypeUnconditional(const Metadata *sourceType,
|
||||
case MetadataKind::ExistentialMetatype:
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject:
|
||||
@@ -1312,6 +1338,7 @@ swift::swift_dynamicCastMetatypeUnconditional(const Metadata *sourceType,
|
||||
case MetadataKind::ExistentialMetatype:
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject:
|
||||
@@ -1328,6 +1355,7 @@ swift::swift_dynamicCastMetatypeUnconditional(const Metadata *sourceType,
|
||||
case MetadataKind::ExistentialMetatype:
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject:
|
||||
@@ -1621,6 +1649,7 @@ static bool _dynamicCastToMetatype(OpaqueValue *dest,
|
||||
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject:
|
||||
@@ -1788,6 +1817,7 @@ static bool _dynamicCastToExistentialMetatype(OpaqueValue *dest,
|
||||
case MetadataKind::ForeignClass:
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject:
|
||||
@@ -1888,6 +1918,7 @@ bool swift::swift_dynamicCast(OpaqueValue *dest,
|
||||
case MetadataKind::ExistentialMetatype:
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject:
|
||||
@@ -1943,6 +1974,7 @@ bool swift::swift_dynamicCast(OpaqueValue *dest,
|
||||
case MetadataKind::ExistentialMetatype:
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject:
|
||||
@@ -1959,6 +1991,7 @@ bool swift::swift_dynamicCast(OpaqueValue *dest,
|
||||
// The non-polymorphic types.
|
||||
case MetadataKind::Function:
|
||||
case MetadataKind::ThinFunction:
|
||||
case MetadataKind::CFunction:
|
||||
case MetadataKind::Block:
|
||||
case MetadataKind::HeapLocalVariable:
|
||||
case MetadataKind::ErrorObject:
|
||||
|
||||
Reference in New Issue
Block a user