souffle  2.0.2-371-g6315b36
Data Structures | Namespaces | Macros | Functions
TypeSystem.cpp File Reference
#include "ast/analysis/TypeSystem.h"
#include "ast/Type.h"
#include "souffle/utility/FunctionalUtil.h"
#include "souffle/utility/StreamUtil.h"
#include "souffle/utility/StringUtil.h"
#include "souffle/utility/tinyformat.h"
#include <cassert>
#include <initializer_list>
Include dependency graph for TypeSystem.cpp:

Go to the source code of this file.

Data Structures

struct  souffle::ast::analysis::TypeVisitor< R >
 A visitor for Types. More...
 
class  souffle::ast::analysis::VisitOnceTypeVisitor< R >
 A visitor for types visiting each type only once (effectively breaking recursive cycles). More...
 

Namespaces

 souffle
 
 souffle::ast
 
 souffle::ast::analysis
 

Macros

#define CREATE_PRIMITIVE(TYPE)
 
#define FORWARD(TYPE)   if (auto* t = dynamic_cast<const TYPE##Type*>(&type)) return visit##TYPE##Type(*t);
 
#define VISIT(TYPE)
 

Functions

bool souffle::ast::analysis::areEquivalentTypes (const Type &a, const Type &b)
 Determine if two types are equivalent. More...
 
TypeSet souffle::ast::analysis::getGreatestCommonSubtypes (const Type &a, const Type &b)
 Computes the greatest common sub types of the two given types. More...
 
TypeSet souffle::ast::analysis::getGreatestCommonSubtypes (const TypeSet &a, const TypeSet &b)
 The set of pair-wise greatest common sub types of the types in the two given sets. More...
 
TypeSet souffle::ast::analysis::getGreatestCommonSubtypes (const TypeSet &set)
 Computes the greatest common sub types of all the types in the given set. More...
 
TypeAttribute souffle::ast::analysis::getTypeAttribute (const Type &type)
 
std::optional< TypeAttributesouffle::ast::analysis::getTypeAttribute (const TypeSet &type)
 
std::string souffle::ast::analysis::getTypeQualifier (const Type &type)
 Returns full type qualifier for a given type. More...
 
bool souffle::ast::analysis::haveCommonSupertype (const Type &a, const Type &b)
 Determine if there exist a type t such that a <: t and b <: t. More...
 
bool souffle::ast::analysis::isADTEnum (const AlgebraicDataType &type)
 Determine if ADT is enumerations (are all constructors empty) More...
 
bool souffle::ast::analysis::isOfKind (const Type &type, TypeAttribute kind)
 Check if the type is of a kind corresponding to the TypeAttribute. More...
 
bool souffle::ast::analysis::isOfKind (const TypeSet &typeSet, TypeAttribute kind)
 
bool souffle::ast::analysis::isOfRootType (const Type &type, const Type &root)
 Determines whether the given type is a sub-type of the given root type. More...
 
bool souffle::ast::analysis::isSubtypeOf (const Type &a, const Type &b)
 Determines whether type a is a subtype of type b. More...
 

Macro Definition Documentation

◆ CREATE_PRIMITIVE

#define CREATE_PRIMITIVE (   TYPE)
Value:
auto& TYPE##Type = createType<PrimitiveType>( \
#TYPE, static_cast<const ConstantType&>(getType("__" #TYPE "Constant")));

◆ FORWARD

#define FORWARD (   TYPE)    if (auto* t = dynamic_cast<const TYPE##Type*>(&type)) return visit##TYPE##Type(*t);

Definition at line 100 of file TypeSystem.cpp.

◆ VISIT

#define VISIT (   TYPE)
Value:
virtual R visit##TYPE##Type(const TYPE##Type& type) const { \
return visitType(type); \
}

Definition at line 114 of file TypeSystem.cpp.

std::type
ElementType type
Definition: span.h:640