Move isClassOrClassMetatype into SILType.h.

This will be useful for further devirtualizer clean-up.

Swift SVN r25974
This commit is contained in:
Mark Lacey
2015-03-11 08:25:48 +00:00
parent 1c3fe65f4f
commit 92a85f00f9
2 changed files with 17 additions and 16 deletions

View File

@@ -1434,18 +1434,6 @@ public:
"result must be of the method's type");
}
static bool isClassOrClassMetatype(Type t) {
if (auto *meta = t->getAs<AnyMetatypeType>()) {
return bool(meta->getInstanceType()->getClassOrBoundGenericClass());
} else {
return bool(t->getClassOrBoundGenericClass());
}
}
static bool isClassOrClassMetatype(SILType t) {
return t.isObject() && isClassOrClassMetatype(t.getSwiftRValueType());
}
void checkClassMethodInst(ClassMethodInst *CMI) {
require(CMI->getType() == TC.getConstantType(CMI->getMember()),
"result type of class_method must match type of method");
@@ -1454,9 +1442,9 @@ public:
require(methodType->getRepresentation() == FunctionType::Representation::Thin,
"result method must be of a thin function type");
SILType operandType = CMI->getOperand().getType();
require(isClassOrClassMetatype(operandType.getSwiftType()),
require(operandType.isClassOrClassMetatype(),
"operand must be of a class type");
require(isClassOrClassMetatype(getMethodSelfType(methodType)),
require(getMethodSelfType(methodType).isClassOrClassMetatype(),
"result must be a method of a class");
require(CMI->getMember().isForeign
@@ -1487,9 +1475,9 @@ public:
require(methodType->getRepresentation() == FunctionType::Representation::Thin,
"result method must be of a thin function type");
SILType operandType = CMI->getOperand().getType();
require(isClassOrClassMetatype(operandType.getSwiftType()),
require(operandType.isClassOrClassMetatype(),
"operand must be of a class type");
require(isClassOrClassMetatype(getMethodSelfType(methodType)),
require(getMethodSelfType(methodType).isClassOrClassMetatype(),
"result must be a method of a class");
Type methodClass;