Assing const As.* functions to type class

Change-Id: I99c588b53f28da119611ef0a5b27820cdaa57fc2
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/20262
Reviewed-by: David Neto <dneto@google.com>
This commit is contained in:
Sarah Mashayekhi 2020-04-23 13:52:51 +00:00 committed by dan sinclair
parent cb883a2817
commit dd218b050d
2 changed files with 78 additions and 0 deletions

View File

@ -108,6 +108,61 @@ bool Type::is_integer_scalar_or_vector() {
return is_unsigned_scalar_or_vector() || is_signed_scalar_or_vector(); return is_unsigned_scalar_or_vector() || is_signed_scalar_or_vector();
} }
const AliasType* Type::AsAlias() const {
assert(IsAlias());
return static_cast<const AliasType*>(this);
}
const ArrayType* Type::AsArray() const {
assert(IsArray());
return static_cast<const ArrayType*>(this);
}
const BoolType* Type::AsBool() const {
assert(IsBool());
return static_cast<const BoolType*>(this);
}
const F32Type* Type::AsF32() const {
assert(IsF32());
return static_cast<const F32Type*>(this);
}
const I32Type* Type::AsI32() const {
assert(IsI32());
return static_cast<const I32Type*>(this);
}
const MatrixType* Type::AsMatrix() const {
assert(IsMatrix());
return static_cast<const MatrixType*>(this);
}
const PointerType* Type::AsPointer() const {
assert(IsPointer());
return static_cast<const PointerType*>(this);
}
const StructType* Type::AsStruct() const {
assert(IsStruct());
return static_cast<const StructType*>(this);
}
const U32Type* Type::AsU32() const {
assert(IsU32());
return static_cast<const U32Type*>(this);
}
const VectorType* Type::AsVector() const {
assert(IsVector());
return static_cast<const VectorType*>(this);
}
const VoidType* Type::AsVoid() const {
assert(IsVoid());
return static_cast<const VoidType*>(this);
}
AliasType* Type::AsAlias() { AliasType* Type::AsAlias() {
assert(IsAlias()); assert(IsAlias());
return static_cast<AliasType*>(this); return static_cast<AliasType*>(this);

View File

@ -81,6 +81,29 @@ class Type {
/// @returns true if this type is an integer scalar or vector /// @returns true if this type is an integer scalar or vector
bool is_integer_scalar_or_vector(); bool is_integer_scalar_or_vector();
/// @returns the type as an alias type
const AliasType* AsAlias() const;
/// @returns the type as an array type
const ArrayType* AsArray() const;
/// @returns the type as a bool type
const BoolType* AsBool() const;
/// @returns the type as a f32 type
const F32Type* AsF32() const;
/// @returns the type as an i32 type
const I32Type* AsI32() const;
/// @returns the type as a matrix type
const MatrixType* AsMatrix() const;
/// @returns the type as a pointer type
const PointerType* AsPointer() const;
/// @returns the type as a struct type
const StructType* AsStruct() const;
/// @returns the type as a u32 type
const U32Type* AsU32() const;
/// @returns the type as a vector type
const VectorType* AsVector() const;
/// @returns the type as a void type
const VoidType* AsVoid() const;
/// @returns the type as an alias type /// @returns the type as an alias type
AliasType* AsAlias(); AliasType* AsAlias();
/// @returns the type as an array type /// @returns the type as an array type