WHLSLLiteralTypeChecker.cpp [plain text]
#include "config.h"
#include "WHLSLLiteralTypeChecker.h"
#if ENABLE(WEBGPU)
#include "WHLSLIntegerLiteralType.h"
#include "WHLSLNativeTypeDeclaration.h"
#include "WHLSLProgram.h"
#include "WHLSLTypeReference.h"
#include "WHLSLVisitor.h"
namespace WebCore {
namespace WHLSL {
#if ASSERT_ENABLED
static AST::NativeTypeDeclaration* getNativeTypeDeclaration(AST::ResolvableType& resolvableType)
{
if (!is<AST::TypeReference>(resolvableType.resolvedType()))
return nullptr;
auto& typeReference = downcast<AST::TypeReference>(resolvableType.resolvedType());
if (!is<AST::NativeTypeDeclaration>(typeReference.resolvedType()))
return nullptr;
return &downcast<AST::NativeTypeDeclaration>(typeReference.resolvedType());
}
class LiteralTypeChecker : public Visitor {
public:
private:
void visit(AST::FloatLiteralType& floatLiteralType) override
{
auto* nativeTypeDeclaration = getNativeTypeDeclaration(floatLiteralType);
ASSERT(nativeTypeDeclaration);
ASSERT(nativeTypeDeclaration->canRepresentFloat()(floatLiteralType.value()));
}
void visit(AST::IntegerLiteralType& integerLiteralType) override
{
auto* nativeTypeDeclaration = getNativeTypeDeclaration(integerLiteralType);
ASSERT(nativeTypeDeclaration);
ASSERT(nativeTypeDeclaration->canRepresentInteger()(integerLiteralType.value()));
}
void visit(AST::UnsignedIntegerLiteralType& unsignedIntegerLiteralType) override
{
auto* nativeTypeDeclaration = getNativeTypeDeclaration(unsignedIntegerLiteralType);
ASSERT(nativeTypeDeclaration);
ASSERT(nativeTypeDeclaration->canRepresentUnsignedInteger()(unsignedIntegerLiteralType.value()));
}
};
#endif // ASSERT_ENABLED
void checkLiteralTypes(Program& program)
{
#if ASSERT_ENABLED
LiteralTypeChecker().Visitor::visit(program);
#else
UNUSED_PARAM(program);
#endif
}
}
}
#endif // ENABLE(WEBGPU)