Ok, break down and add some cast<>'ing helper methods to the Type class

to reduce the number of cast<>'s we have.  This allows someone to use
things like Ty->getVectorNumElements() instead of 
cast<VectorType>(Ty)->getNumElements() when you know that a type is a
vector.

It would be a great general cleanup to move the codebase to use these,
I will do so in the code I'm touching.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148999 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2012-01-26 00:01:10 +00:00
parent 83694a984c
commit 6e3abaa77f
2 changed files with 65 additions and 0 deletions

View File

@ -314,6 +314,32 @@ public:
///
unsigned getNumContainedTypes() const { return NumContainedTys; }
//===--------------------------------------------------------------------===//
// Helper methods corresponding to subclass methods. This forces a cast to
// the specified subclass and calls its accessor. "getVectorNumElements" (for
// example) is shorthand for cast<VectorType>(Ty)->getNumElements(). This is
// only intended to cover the core methods that are frequently used, helper
// methods should not be added here.
unsigned getIntegerBitWidth() const;
Type *getFunctionParamType(unsigned i) const;
unsigned getFunctionNumParams() const;
bool isFunctionVarArg() const;
// TODO: StructType
Type *getSequentialElementType() const;
uint64_t getArrayNumElements() const;
Type *getArrayElementType() const { return getSequentialElementType(); }
unsigned getVectorNumElements() const;
Type *getVectorElementType() const { return getSequentialElementType(); }
unsigned getPointerAddressSpace() const;
Type *getPointerElementType() const { return getSequentialElementType(); }
//===--------------------------------------------------------------------===//
// Static members exported by the Type class itself. Useful for getting
// instances of Type.

View File

@ -197,6 +197,45 @@ bool Type::isSizedDerivedType() const {
return true;
}
//===----------------------------------------------------------------------===//
// Subclass Helper Methods
//===----------------------------------------------------------------------===//
unsigned Type::getIntegerBitWidth() const {
return cast<IntegerType>(this)->getBitWidth();
}
bool Type::isFunctionVarArg() const {
return cast<FunctionType>(this)->isVarArg();
}
Type *Type::getFunctionParamType(unsigned i) const {
return cast<FunctionType>(this)->getParamType(i);
}
unsigned Type::getFunctionNumParams() const {
return cast<FunctionType>(this)->getNumParams();
}
Type *Type::getSequentialElementType() const {
return cast<SequentialType>(this)->getElementType();
}
uint64_t Type::getArrayNumElements() const {
return cast<ArrayType>(this)->getNumElements();
}
unsigned Type::getVectorNumElements() const {
return cast<VectorType>(this)->getNumElements();
}
unsigned Type::getPointerAddressSpace() const {
return cast<PointerType>(this)->getAddressSpace();
}
//===----------------------------------------------------------------------===//
// Primitive 'Type' data
//===----------------------------------------------------------------------===//