23#define UE_API VERSECOMPILER_API
43class CSemanticProgram;
48class CClassDefinition;
56#define VERSE_ENUM_SEMANTIC_TYPE_KINDS(v) \
57 v(Unknown, CUnknownType)\
58 v(False, CFalseType) \
62 v(Comparable, CComparableType) \
63 v(Logic, CLogicType) \
65 v(Rational, CRationalType) \
66 v(Float, CFloatType) \
67 v(Char8, CChar8Type) \
68 v(Char32, CChar32Type) \
70 v(Range, CRangeType) \
74 v(Enumeration, CEnumeration) \
75 v(Array, CArrayType) \
76 v(Generator, CGeneratorType) \
78 v(Pointer, CPointerType) \
79 v(Reference, CReferenceType) \
80 v(Option, COptionType) \
81 v(Interface, CInterface) \
82 v(Tuple, CTupleType) \
83 v(Function, CFunctionType) \
84 v(Variable, CTypeVariable) \
85 v(Named, CNamedType) \
86 v(Persistable, CPersistableType) \
87 v(Castable, CCastableType) \
88 v(Concrete, CConcreteType)
93#define VISIT_KIND(Name, CppType) Name,
223 template<
typename TType>
226 template<
typename TType>
229 template<
typename TType>
230 bool IsA()
const {
return _Kind == TType::StaticTypeKind; }
232 template<
typename TType>
235 template<
typename TType>
278template<ETypeKind Kind>
287 if (Kind == ETypeKind::False) {
return "false"; }
288 else if (Kind == ETypeKind::True) {
return "true"; }
289 else if (Kind == ETypeKind::Void) {
return "void"; }
290 else if (Kind == ETypeKind::Any) {
return "any"; }
291 else if (Kind == ETypeKind::Comparable) {
return "comparable"; }
292 else if (Kind == ETypeKind::Logic) {
return "logic"; }
293 else if (Kind == ETypeKind::Rational) {
return "rational"; }
294 else if (Kind == ETypeKind::Char8) {
return "char"; }
295 else if (Kind == ETypeKind::Char32) {
return "char32"; }
296 else if (Kind == ETypeKind::Path) {
return "path"; }
297 else if (Kind == ETypeKind::Range) {
return "$range"; }
298 else if (Kind == ETypeKind::Persistable) {
return "persistable"; }
305 if (Kind == ETypeKind::Comparable
306 || Kind == ETypeKind::Logic
307 || Kind == ETypeKind::Rational
308 || Kind == ETypeKind::Char8
309 || Kind == ETypeKind::Char32
310 || Kind == ETypeKind::False)
314 else if (Kind == ETypeKind::True || Kind == ETypeKind::Void)
326 return Kind ==
Cases<
331 ETypeKind::Persistable>;
336 return Kind == ETypeKind::False;
341 return Kind == ETypeKind::False;
346 return Kind ==
Cases<
356 return Kind ==
Cases<
426 Left.NegativeType ==
Right.NegativeType &&
433 Left.NegativeType !=
Right.NegativeType ||
439 if (
Left.NegativeType ==
Right.NegativeType)
441 return Left.PositiveType <
Right.PositiveType;
443 return Left.NegativeType <
Right.NegativeType;
449 return {_NegativeType, _PositiveType};
486 return Left.SuperType ==
Right.SuperType;
491 return Left.SuperType !=
Right.SuperType;
559 return Left.SuperType ==
Right.SuperType;
564 return Left.SuperType !=
Right.SuperType;
646 Left.NegativeValueType ==
Right.NegativeValueType &&
647 Left.PositiveValueType ==
Right.PositiveValueType;
653 Left.NegativeValueType !=
Right.NegativeValueType ||
654 Left.PositiveValueType !=
Right.PositiveValueType;
659 if (
Left.NegativeValueType <
Right.NegativeValueType)
663 if (
Right.NegativeValueType <
Left.NegativeValueType)
667 return Left.PositiveValueType <
Right.PositiveValueType;
887 , _ValueType(&ValueType)
998 return SKey{_KeyType, _ValueType, _bWeak};
1016 , _Elements(
Move(Elements))
1018 , _LastVisitStamp(0u)
1070 , _ReturnType(ReturnType)
1128 bool _bImplicitlySpecialized;
1200 Left._TypeVariable ==
Right._TypeVariable &&
1201 Left._NegativeType ==
Right._NegativeType &&
1202 Left._PositiveType ==
Right._PositiveType;
1220 Left._NegativeType ==
Right._NegativeType &&
1221 Left._PositiveType ==
Right._PositiveType;
1229 virtual const CNormalType& GetNormalType()
const override
1235 return *_NormalType;
1247 , _Polarity(Polarity)
1248 , _Substitutions(
Move(Arguments))
1363 , _MinInclusive(
Min)
1364 , _MaxInclusive(
Max)
1398 , _MinInclusive(
Min)
1399 , _MaxInclusive(
Max)
1405 double GetMin()
const {
return _MinInclusive; }
1406 double GetMax()
const {
return _MaxInclusive; }
1425 double _MinInclusive;
1426 double _MaxInclusive;
1438 if (
Left.TypeVariable <
Right.TypeVariable)
1442 if (
Right.TypeVariable <
Left.TypeVariable)
1466namespace SemanticTypeUtils
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ULANG_ENUM_BIT_FLAGS(Enum,...)
Definition EnumUtils.h:6
#define UE_API
Definition SColorGradingComponentViewer.h:12
#define VERSE_ENUM_SEMANTIC_TYPE_KINDS(v)
Definition SemanticTypes.h:56
#define ULANG_FORCEINLINE
Definition Common.h:188
#define ULANG_UNREACHABLE()
Definition Common.h:243
#define ULANG_ASSERTF(expr, format,...)
Definition Common.h:290
Definition TypeAlias.h:19
Definition SemanticTypes.h:788
virtual bool IsPersistable() const override
Definition SemanticTypes.h:831
bool IsStringType() const
Definition SemanticTypes.h:799
const CTypeBase * GetElementType() const
Definition SemanticTypes.h:796
virtual bool IsExplicitlyConcrete() const override
Definition SemanticTypes.h:841
virtual CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition SemanticTypes.h:805
virtual bool IsExplicitlyCastable() const override
Definition SemanticTypes.h:836
virtual EComparability GetComparability() const override
Definition SemanticTypes.h:812
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticTypes.h:809
CArrayType(CSemanticProgram &Program, const CTypeBase *ElementType)
Definition SemanticTypes.h:792
static const ETypeKind StaticTypeKind
Definition SemanticTypes.h:790
Definition Expression.h:3494
Definition SemanticTypes.h:460
CCastableType(CSemanticProgram &Program, const CTypeBase &SuperType)
Definition SemanticTypes.h:464
static const ETypeKind StaticTypeKind
Definition SemanticTypes.h:462
virtual SmallDefinitionArray FindTypeMember(const CSymbol &MemberName, EMemberOrigin Origin, const SQualifier &Qualifier, VisitStampType VisitStamp) const override
Definition SemanticTypes.h:523
virtual bool IsExplicitlyConcrete() const override
Definition SemanticTypes.h:515
virtual SmallDefinitionArray FindInstanceMember(const CSymbol &MemberName, EMemberOrigin Origin, const SQualifier &Qualifier, const CAstPackage *ContextPackage, VisitStampType VisitStamp) const override
Definition SemanticTypes.h:519
virtual bool IsExplicitlyCastable() const override
Definition SemanticTypes.h:513
const CTypeBase & SuperType() const
Definition SemanticTypes.h:474
const CTypeBase * _SuperType
Definition SemanticTypes.h:529
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticTypes.h:517
virtual bool IsPersistable() const override
Definition SemanticTypes.h:511
virtual CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const
Definition SemanticTypes.h:502
virtual const CTypeBase * GetInnerType() const override
Definition SemanticTypes.h:469
Definition SemanticClass.h:207
Definition SemanticClass.h:33
Definition SemanticTypes.h:533
CConcreteType(CSemanticProgram &Program, const CTypeBase &SuperType)
Definition SemanticTypes.h:537
const CTypeBase * _SuperType
Definition SemanticTypes.h:602
virtual bool IsExplicitlyCastable() const override
Definition SemanticTypes.h:586
virtual bool IsExplicitlyConcrete() const override
Definition SemanticTypes.h:588
virtual SmallDefinitionArray FindTypeMember(const CSymbol &MemberName, EMemberOrigin Origin, const SQualifier &Qualifier, VisitStampType VisitStamp) const override
Definition SemanticTypes.h:596
const CTypeBase & SuperType() const
Definition SemanticTypes.h:547
virtual const CTypeBase * GetInnerType() const override
Definition SemanticTypes.h:542
virtual bool IsPersistable() const override
Definition SemanticTypes.h:584
virtual CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const
Definition SemanticTypes.h:575
virtual SmallDefinitionArray FindInstanceMember(const CSymbol &MemberName, EMemberOrigin Origin, const SQualifier &Qualifier, const CAstPackage *ContextPackage, VisitStampType VisitStamp) const override
Definition SemanticTypes.h:592
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticTypes.h:590
static const ETypeKind StaticTypeKind
Definition SemanticTypes.h:535
Definition DataDefinition.h:41
Definition Definition.h:131
Definition SemanticTypes.h:1392
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticTypes.h:1421
int64_t MaxRanking() const
Definition SemanticTypes.h:1408
virtual EComparability GetComparability() const override
Definition SemanticTypes.h:1416
double GetMin() const
Definition SemanticTypes.h:1405
virtual bool CanBePredictsVarDataType() const override
Definition SemanticTypes.h:1422
int64_t MinRanking() const
Definition SemanticTypes.h:1407
CFloatType(CSemanticProgram &Program, double Min, double Max, int64_t MinRanking, int64_t MaxRanking)
Definition SemanticTypes.h:1396
virtual UE_API CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition SemanticTypes.cpp:411
bool IsInhabitable() const
Definition SemanticTypes.h:1410
bool IsIntrinsicFloatType() const
Definition SemanticTypes.h:1411
virtual bool IsPersistable() const override
Definition SemanticTypes.h:1417
double GetMax() const
Definition SemanticTypes.h:1406
virtual bool IsExplicitlyCastable() const override
Definition SemanticTypes.h:1418
virtual bool IsExplicitlyConcrete() const override
Definition SemanticTypes.h:1419
static constexpr ETypeKind StaticTypeKind
Definition SemanticTypes.h:1394
Definition SemanticTypes.h:1144
UE_API void EmptyFlowEdges() const
Definition SemanticTypes.cpp:495
virtual CFlowType * AsFlowType() override
Definition SemanticTypes.h:1170
CFlowType(CSemanticProgram &Program, ETypePolarity Polarity, const CTypeBase *Child)
Definition SemanticTypes.h:1146
virtual UE_API const CNormalType & GetNormalType() const override
Definition SemanticTypes.cpp:575
TSet< const CFlowType * > & FlowEdges() const
Definition SemanticTypes.h:1159
virtual UE_API CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition SemanticTypes.cpp:580
UE_API void AddFlowEdge(const CFlowType *) const
Definition SemanticTypes.cpp:486
UE_API const CTypeBase * GetChild() const
Definition SemanticTypes.cpp:475
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticTypes.h:1176
virtual const CFlowType * AsFlowType() const override
Definition SemanticTypes.h:1172
UE_API void SetChild(const CTypeBase *) const
Definition SemanticTypes.cpp:480
UE_API ETypePolarity Polarity() const
Definition SemanticTypes.cpp:470
Definition SemanticTypes.h:1055
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticTypes.h:1119
const CTypeBase & GetReturnType() const
Definition SemanticTypes.h:1077
virtual bool IsExplicitlyConcrete() const override
Definition SemanticTypes.h:1117
void BuildTypeVariableCode(CUTF8StringBuilder &Builder, ETypeStringFlag Flag=ETypeStringFlag::Simple) const
Definition SemanticTypes.h:1101
const CTypeBase & GetParamsType() const
Definition SemanticTypes.h:1076
virtual bool IsExplicitlyCastable() const override
Definition SemanticTypes.h:1115
UE_API void BuildEffectAttributeCode(CUTF8StringBuilder &Builder) const
Definition SemanticTypes.cpp:296
SEffectSet GetEffects() const
Definition SemanticTypes.h:1078
static ParamTypes AsParamTypes(CTypeBase const *const &Type)
Definition SemanticTypes.h:1086
UE_API void BuildParameterBlockCode(CUTF8StringBuilder &Builder, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const
Definition SemanticTypes.cpp:309
virtual bool IsPersistable() const override
Definition SemanticTypes.h:1113
bool ImplicitlySpecialized() const
Definition SemanticTypes.h:1079
UE_API void BuildTypeVariableCode(CUTF8StringBuilder &Builder, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const
Definition SemanticTypes.cpp:281
static const ETypeKind StaticTypeKind
Definition SemanticTypes.h:1057
const TArray< const CTypeVariable * > & GetTypeVariables() const
Definition SemanticTypes.h:1080
virtual UE_API CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition SemanticTypes.cpp:329
CFunctionType(CSemanticProgram &Program, const CTypeBase &ParamsType, const CTypeBase &ReturnType, const SEffectSet Effects, TArray< const CTypeVariable * > &&TypeVariables={}, bool ImplicitlySpecialized=false)
Definition SemanticTypes.h:1061
UE_API bool CanBeCalledFromPredicts() const
Definition SemanticTypes.cpp:359
ParamTypes GetParamTypes() const
Definition SemanticTypes.h:1095
TRangeView< CTypeBase const *const *, CTypeBase const *const * > ParamTypes
Definition SemanticTypes.h:1059
static UE_API const CTypeBase * GetOrCreateParamType(CSemanticProgram &, CTupleType::ElementArray &&ParamTypes)
Definition SemanticTypes.cpp:271
Definition SemanticTypes.h:851
static const ETypeKind StaticTypeKind
Definition SemanticTypes.h:853
virtual bool IsExplicitlyConcrete() const override
Definition SemanticTypes.h:871
virtual bool IsPersistable() const override
Definition SemanticTypes.h:867
CGeneratorType(CSemanticProgram &Program, const CTypeBase *ElementType)
Definition SemanticTypes.h:855
virtual bool IsExplicitlyCastable() const override
Definition SemanticTypes.h:869
virtual CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition SemanticTypes.h:862
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticTypes.h:873
const CTypeBase * GetElementType() const
Definition SemanticTypes.h:859
Definition SemanticTypes.h:280
virtual bool IsExplicitlyCastable() const override
Definition SemanticTypes.h:334
virtual CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition SemanticTypes.h:285
virtual EComparability GetComparability() const override
Definition SemanticTypes.h:303
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticTypes.h:344
static const ETypeKind StaticTypeKind
Definition SemanticTypes.h:282
virtual bool CanBePredictsVarDataType() const override
Definition SemanticTypes.h:354
virtual bool IsPersistable() const override
Definition SemanticTypes.h:324
virtual bool IsExplicitlyConcrete() const override
Definition SemanticTypes.h:339
Definition SemanticTypes.h:1228
virtual ~CInstantiatedType()=default
virtual const CNormalType & CreateNormalType() const =0
const TArray< STypeVariableSubstitution > & GetSubstitutions() const
Definition SemanticTypes.h:1258
ETypePolarity GetPolarity() const
Definition SemanticTypes.h:1256
CInstantiatedType(CSemanticProgram &Program, ETypePolarity Polarity, TArray< STypeVariableSubstitution > Arguments)
Definition SemanticTypes.h:1245
Definition SemanticTypes.h:1357
virtual EComparability GetComparability() const override
Definition SemanticTypes.h:1375
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticTypes.h:1381
virtual bool IsPersistable() const override
Definition SemanticTypes.h:1377
virtual bool IsExplicitlyCastable() const override
Definition SemanticTypes.h:1378
const FIntOrNegativeInfinity & GetMin() const
Definition SemanticTypes.h:1368
static constexpr ETypeKind StaticTypeKind
Definition SemanticTypes.h:1359
virtual UE_API CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition SemanticTypes.cpp:369
virtual bool CanBePredictsVarDataType() const override
Definition SemanticTypes.h:1382
CIntType(CSemanticProgram &Program, const FIntOrNegativeInfinity &Min, const FIntOrPositiveInfinity &Max)
Definition SemanticTypes.h:1361
bool IsInhabitable() const
Definition SemanticTypes.h:1371
virtual bool IsExplicitlyConcrete() const override
Definition SemanticTypes.h:1379
const FIntOrPositiveInfinity & GetMax() const
Definition SemanticTypes.h:1369
Definition SemanticInterface.h:25
Definition SemanticTypes.h:622
const CTypeBase * _PositiveValueType
Definition SemanticTypes.h:678
const CTypeBase * NegativeValueType() const
Definition SemanticTypes.h:631
virtual const CTypeBase * GetInnerType() const override
Definition SemanticTypes.h:636
const CTypeBase * PositiveValueType() const
Definition SemanticTypes.h:633
CInvariantValueType(ETypeKind Kind, CSemanticProgram &Program, const CTypeBase *NegativeValueType, const CTypeBase *PositiveValueType)
Definition SemanticTypes.h:624
const CTypeBase * _NegativeValueType
Definition SemanticTypes.h:677
Definition SemanticTypes.h:880
virtual CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition SemanticTypes.h:941
virtual bool IsExplicitlyConcrete() const override
Definition SemanticTypes.h:935
CMapType(CSemanticProgram &Program, const CTypeBase &KeyType, const CTypeBase &ValueType, bool bWeak)
Definition SemanticTypes.h:884
virtual EComparability GetComparability() const override
Definition SemanticTypes.h:907
const CTypeBase * GetValueType() const
Definition SemanticTypes.h:897
virtual bool IsPersistable() const override
Definition SemanticTypes.h:922
const CTypeBase * GetKeyType() const
Definition SemanticTypes.h:892
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticTypes.h:956
virtual bool IsExplicitlyCastable() const override
Definition SemanticTypes.h:930
static const ETypeKind StaticTypeKind
Definition SemanticTypes.h:882
bool IsWeak() const
Definition SemanticTypes.h:902
Definition SemanticTypes.h:1269
bool HasValue() const
Definition SemanticTypes.h:1284
virtual const CNamedType * AsNamedType() const override
Definition SemanticTypes.h:1292
virtual CNamedType * AsNamedType() override
Definition SemanticTypes.h:1290
virtual bool IsExplicitlyConcrete() const override
Definition SemanticTypes.h:1347
CNamedType(CSemanticProgram &Program, CSymbol Name, const CTypeBase *ValueType, bool HasDefault)
Definition SemanticTypes.h:1273
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticTypes.h:1349
virtual UE_API CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition SemanticTypes.cpp:598
CSymbol GetName() const
Definition SemanticTypes.h:1280
static constexpr ETypeKind StaticTypeKind
Definition SemanticTypes.h:1271
const CTypeBase * GetValueType() const
Definition SemanticTypes.h:1282
virtual bool IsPersistable() const override
Definition SemanticTypes.h:1343
UE_API const CTupleType & ToTupleType() const
Definition SemanticTypes.cpp:621
virtual bool IsExplicitlyCastable() const override
Definition SemanticTypes.h:1345
Class defining instance and class objects.
Definition SemanticTypes.h:608
virtual const CNominalType * AsNominalType() const override
Definition SemanticTypes.h:618
virtual const CDefinition * Definition() const =0
CNominalType(ETypeKind Kind, CSemanticProgram &Program)
Definition SemanticTypes.h:610
virtual UE_API CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition SemanticTypes.cpp:78
A normal type: a head normal form of types where the head is not a parametric type instantiation.
Definition SemanticTypes.h:217
virtual const CNominalType * AsNominalType() const
Definition SemanticTypes.h:250
virtual SmallDefinitionArray FindTypeMember(const CSymbol &MemberName, EMemberOrigin Origin, const SQualifier &Qualifier, VisitStampType VisitStamp) const
Definition SemanticTypes.h:268
virtual const CTypeBase * GetInnerType() const
Definition SemanticTypes.h:247
virtual SmallDefinitionArray FindInstanceMember(const CSymbol &MemberName, EMemberOrigin Origin, const SQualifier &Qualifier, const CAstPackage *ContextPackage, VisitStampType VisitStamp) const
Definition SemanticTypes.h:266
TType const & AsChecked() const
Definition SemanticTypes.h:227
virtual bool IsExplicitlyConcrete() const =0
virtual bool IsPersistable() const =0
UE_API SmallDefinitionArray FindTypeMember(const CSymbol &MemberName, EMemberOrigin Origin, const SQualifier &Qualifier) const
Definition SemanticTypes.cpp:69
TType * AsNullable()
Definition SemanticTypes.h:233
virtual bool IsExplicitlyCastable() const =0
ETypeKind GetKind() const
Definition SemanticTypes.h:221
TType const * AsNullable() const
Definition SemanticTypes.h:236
bool IsA() const
Definition SemanticTypes.h:230
virtual const CNormalType & GetNormalType() const override
Definition SemanticTypes.h:271
UE_API SmallDefinitionArray FindInstanceMember(const CSymbol &MemberName, EMemberOrigin Origin, const SQualifier &Qualifier, const CAstPackage *ContextPackage=nullptr) const
Definition SemanticTypes.cpp:64
virtual const CTypeBase * GetReferenceValueType() const
Definition SemanticTypes.h:242
TType & AsChecked()
Definition SemanticTypes.h:224
CNormalType(ETypeKind Kind, CSemanticProgram &Program)
Definition SemanticTypes.h:219
virtual EComparability GetComparability() const
Definition SemanticTypes.h:253
Definition SemanticTypes.h:760
static const ETypeKind StaticTypeKind
Definition SemanticTypes.h:762
virtual bool IsPersistable() const override
Definition SemanticTypes.h:779
virtual bool IsExplicitlyConcrete() const override
Definition SemanticTypes.h:781
virtual bool CanBePredictsVarDataType() const override
Definition SemanticTypes.h:775
virtual CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition SemanticTypes.h:769
virtual bool IsExplicitlyCastable() const override
Definition SemanticTypes.h:780
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticTypes.h:774
virtual EComparability GetComparability() const override
Definition SemanticTypes.h:778
const CTypeBase * GetValueType() const
Definition SemanticTypes.h:766
Definition SemanticTypes.h:685
virtual bool IsExplicitlyConcrete() const override
Definition SemanticTypes.h:703
virtual bool IsPersistable() const override
Definition SemanticTypes.h:699
virtual bool IsExplicitlyCastable() const override
Definition SemanticTypes.h:701
static const ETypeKind StaticTypeKind
Definition SemanticTypes.h:687
virtual CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition SemanticTypes.h:692
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticTypes.h:705
Definition SemanticTypes.h:712
virtual bool IsPersistable() const override
Definition SemanticTypes.h:729
virtual const CTypeBase * GetReferenceValueType() const override
Definition SemanticTypes.h:719
virtual CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition SemanticTypes.h:722
static const ETypeKind StaticTypeKind
Definition SemanticTypes.h:714
virtual bool IsExplicitlyCastable() const override
Definition SemanticTypes.h:731
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticTypes.h:735
virtual bool IsExplicitlyConcrete() const override
Definition SemanticTypes.h:733
Definition SemanticProgram.h:277
Symbol representing a text string with an associated id.
Definition Symbol.h:98
Definition SemanticTypes.h:1008
virtual UE_API EComparability GetComparability() const override
Definition SemanticTypes.cpp:195
int32_t NumNonNamedElements() const
Definition SemanticTypes.h:1031
virtual bool IsExplicitlyConcrete() const override
Definition SemanticTypes.h:1043
static const ETypeKind StaticTypeKind
Definition SemanticTypes.h:1010
const CTypeBase * operator[](int32_t Index) const
Definition SemanticTypes.h:1024
virtual UE_API CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition SemanticTypes.cpp:162
virtual UE_API bool IsPersistable() const override
Definition SemanticTypes.cpp:212
virtual UE_API CUTF8String AsParamsCode(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool WithColon, ETypeStringFlag Flag) const override
Definition SemanticTypes.cpp:171
TArrayG< const CTypeBase *, TInlineElementAllocator< 4 > > ElementArray
Definition SemanticTypes.h:1012
ULANG_FORCEINLINE int32_t Num() const
Definition SemanticTypes.h:1023
int32_t GetFirstNamedIndex() const
Definition SemanticTypes.h:1030
UE_API ElementArray ElementsWithSortedNames() const
Definition SemanticTypes.cpp:224
virtual bool IsExplicitlyCastable() const override
Definition SemanticTypes.h:1042
UE_API const CNamedType * FindNamedType(CSymbol Name) const
Definition SemanticTypes.cpp:244
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticTypes.h:1037
CTupleType(CSemanticProgram &Program, ElementArray &&Elements, int32_t FirstNamedIndex)
Definition SemanticTypes.h:1014
ULANG_FORCEINLINE bool TryMarkVisited(VisitStampType VisitStamp) const
Definition SemanticTypes.h:1021
const ElementArray & GetElements() const
Definition SemanticTypes.h:1025
Base class for all types.
Definition SemanticTypes.h:138
virtual const CNormalType & GetNormalType() const =0
virtual const CAliasType * AsAliasType() const
Definition SemanticTypes.h:156
virtual CFlowType * AsFlowType()
Definition SemanticTypes.h:152
virtual ~CTypeBase()
Definition SemanticTypes.h:141
CUTF8String AsParamsCode(ETypeSyntaxPrecedence OuterPrecedence=ETypeSyntaxPrecedence::Min, ETypeStringFlag Flag=ETypeStringFlag::Simple) const
Definition SemanticTypes.h:182
CSemanticProgram & GetProgram() const
Definition SemanticTypes.h:143
virtual const CFlowType * AsFlowType() const
Definition SemanticTypes.h:154
virtual bool CanBePredictsVarDataType() const
Definition SemanticTypes.h:160
CTypeBase(CSemanticProgram &Program)
Definition SemanticTypes.h:140
virtual CNamedType * AsNamedType()
Definition SemanticTypes.h:148
virtual CUTF8String AsParamsCode(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool WithColon, ETypeStringFlag Flag=ETypeStringFlag::Simple) const
Definition SemanticTypes.h:188
CUTF8String AsCode(ETypeSyntaxPrecedence OuterPrecedence=ETypeSyntaxPrecedence::Min, ETypeStringFlag Flag=ETypeStringFlag::Simple) const
Definition SemanticTypes.h:167
CUTF8String AsLinkableCode() const
Definition SemanticTypes.h:202
virtual CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const =0
virtual bool CanBeCustomAccessorDataType() const =0
virtual const CNamedType * AsNamedType() const
Definition SemanticTypes.h:150
Definition SemanticTypes.h:381
bool IsExplicitlyConcrete() const override
Definition SemanticTypes.h:414
bool IsCastableSubtype() const
Definition SemanticTypes.h:412
CTypeType(CSemanticProgram &Program, const CTypeBase *NegativeType, const CTypeBase *PositiveType)
Definition SemanticTypes.h:385
static const ETypeKind StaticTypeKind
Definition SemanticTypes.h:383
const CTypeBase * PositiveType() const
Definition SemanticTypes.h:406
virtual UE_API CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition SemanticTypes.cpp:118
bool IsPersistable() const override
Definition SemanticTypes.h:408
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticTypes.h:452
bool IsConcreteSubtype() const
Definition SemanticTypes.h:416
bool IsExplicitlyCastable() const override
Definition SemanticTypes.h:410
const CTypeBase * NegativeType() const
Definition SemanticTypes.h:404
virtual SmallDefinitionArray FindInstanceMember(const CSymbol &MemberName, EMemberOrigin Origin, const SQualifier &Qualifier, const CAstPackage *ContextPackage, VisitStampType VisitStamp) const override
Definition SemanticTypes.h:394
Definition TypeVariable.h:21
Definition SemanticTypes.h:742
const CTypeBase * _ValueType
Definition SemanticTypes.h:753
CValueType(ETypeKind Kind, CSemanticProgram &Program, const CTypeBase *ValueType)
Definition SemanticTypes.h:744
virtual const CTypeBase * GetInnerType() const override
Definition SemanticTypes.h:747
ULANG_FORCEINLINE int32_t Num() const
Definition Array.h:402
Definition Function.h:839
Definition UniquePointerArray.h:16
TUTF8StringBuilder & Append(UTF8Char Char)
Definition UTF8StringBuilder.h:323
StringType MoveToString()
Definition UTF8StringBuilder.h:257
ULANG_FORCEINLINE const char * AsCString() const
Definition UTF8String.h:50
VERSECOMPILER_API bool IsSubtype(const CTypeBase *PositiveType1, const CTypeBase *PositiveType2, const uint32_t UploadedAtFnVersion)
Determine if PositiveType1 is a subtype of PositiveType2
Definition SemanticTypes.cpp:2961
VERSECOMPILER_API const CTypeBase * Meet(const CTypeBase *Type1, const CTypeBase *Type2, const uint32_t UploadedAtFnVersion)
Compute the meet of Type1 and Type2: the "greatest" type that contains only values contained by both ...
Definition SemanticTypes.cpp:3820
VERSECOMPILER_API const CTypeBase & AsPositive(const CTypeBase &, const TArray< SInstantiatedTypeVariable > &)
Definition SemanticTypes.cpp:1564
VERSECOMPILER_API const CTypeBase * DecayReference(const CTypeBase *)
Definition SemanticTypes.cpp:5306
VERSECOMPILER_API void FillTypeVariablePolarities(const CTypeBase *, ETypePolarity, STypeVariablePolarities &)
Definition SemanticTypes.cpp:5590
VERSECOMPILER_API const CTypeBase * RemovePointer(const CTypeBase *Type, ETypePolarity Polarity)
Definition SemanticTypes.cpp:5219
VERSECOMPILER_API void FillTypeVariablePolaritiesImpl(const CTypeBase *, ETypePolarity, STypeVariablePolarities &, TArray< SNormalTypePolarity > &Visited)
Definition SemanticTypes.cpp:5325
VERSECOMPILER_API bool IsAttributeType(const CTypeBase *Type)
Definition SemanticTypes.cpp:4694
VERSECOMPILER_API const CTypeBase * Substitute(const CTypeBase &, ETypePolarity Polarity, const TArray< STypeVariableSubstitution > &InstTypeVariables)
Definition SemanticTypes.cpp:683
bool IsStringType(const CNormalType &NormalType)
Definition SemanticTypes.h:1534
VERSECOMPILER_API const CTypeBase * Join(const CTypeBase *Type1, const CTypeBase *Type2, const uint32_t UploadedAtFnVersion)
Compute the join of Type1 and Type2: the "least" type that contains all values contained by either Ty...
Definition SemanticTypes.cpp:3287
VERSECOMPILER_API CClassDefinition * EnclosingClassOfDataDefinition(const CDataDefinition *Def)
Definition SemanticTypes.cpp:5289
VERSECOMPILER_API void ForEachDataType(const CTypeBase *, const TFunction< void(const CTypeBase *)> &)
Definition SemanticTypes.cpp:4890
VERSECOMPILER_API const CTypeBase & SkipEmptyFlowType(const CTypeBase &)
Definition SemanticTypes.cpp:3059
VERSECOMPILER_API const CTypeBase * RemoveReference(const CTypeBase *Type, ETypePolarity Polarity)
Definition SemanticTypes.cpp:5234
VERSECOMPILER_API bool Constrain(const CTypeBase *PositiveType1, const CTypeBase *NegativeType2, const uint32_t UploadedAtFnVersion)
Constrain PositiveType1 to be a subtype of NegativeType2
Definition SemanticTypes.cpp:2955
VERSECOMPILER_API void ForEachDataTypeRecursive(const CTypeBase *, const TFunction< void(const CTypeBase *)> &)
Definition SemanticTypes.cpp:5014
bool IsAgentTypeExclusive(const CTypeBase *Type)
Definition SemanticTypes.cpp:5066
VERSECOMPILER_API const char * IsEditableToCMessage(EIsEditable IsEditable)
Definition SemanticTypes.cpp:5028
VERSECOMPILER_API void VisitAllDefinitions(const CTypeBase *Type, const CAstPackage *VisitorPackage, const TFunction< void(const CDefinition &, const CSymbol &)> &Functor)
Definition SemanticTypes.cpp:4706
VERSECOMPILER_API const CTypeBase & AsPolarity(const CTypeBase &, const TArray< SInstantiatedTypeVariable > &, ETypePolarity)
Definition SemanticTypes.cpp:1555
VERSECOMPILER_API const CTypeBase & SkipIdentityFlowType(const CFlowType &, ETypePolarity, const uint32_t UploadedAtFnVersion)
Definition SemanticTypes.cpp:3040
VERSECOMPILER_API bool Matches(const CTypeBase *PositiveType1, const CTypeBase *NegativeType2, const uint32_t UploadedAtFnVersion)
Determine if argument PositiveType1 is a match for parameter NegativeType2
Definition SemanticTypes.cpp:2971
VERSECOMPILER_API EIsEditable IsEditableType(const uLang::CTypeBase *Type, const CAstPackage *ContextPackage)
Definition SemanticTypes.cpp:5073
VERSECOMPILER_API TArray< STypeVariableSubstitution > Instantiate(const TArray< const CTypeVariable * > &TypeVariables, const uint32_t UploadedAtFnVersion)
Definition SemanticTypes.cpp:1025
VERSECOMPILER_API const CNormalType & StripVariableAndConstraints(const CNormalType &)
Definition SemanticTypes.cpp:5249
VERSECOMPILER_API bool IsUnknownType(const CTypeBase *Type)
Definition SemanticTypes.cpp:4688
VERSECOMPILER_API EIsEditable IsEditableClassType(const uLang::CTypeBase *Type)
Definition SemanticTypes.cpp:5171
bool IsLeaderboardType(const CNormalType &NormalType)
Definition SemanticTypes.cpp:5056
VERSECOMPILER_API const CInterface * AsSingleInterface(const CNormalType &NegativeType, const CNormalType &PositiveType)
Definition SemanticTypes.cpp:650
bool IsMessageType(const CNormalType &NormalType)
Definition SemanticTypes.cpp:5048
VERSECOMPILER_API bool AreDomainsDistinct(const CTypeBase *DomainType1, const CTypeBase *DomainType2, const uint32_t UploadedAtFnVersion)
Determine whether there two types are distinct; i.e. that there are no values that are members of bot...
Definition SemanticTypes.cpp:4605
VERSECOMPILER_API const CTypeBase & Canonicalize(const CTypeBase &)
Definition SemanticTypes.cpp:1450
VERSECOMPILER_API const CClass * AsSingleClass(const CNormalType &NegativeType, const CNormalType &PositiveType)
Definition SemanticTypes.cpp:631
EIsEditable
Definition SemanticTypes.h:1552
@ CastableTypesNotEditable
@ ClassifiableSubsetParametricArgumentInvalid
VERSECOMPILER_API bool IsEquivalent(const CTypeBase *PositiveType1, const CTypeBase *PositiveType2, const uint32_t UploadedAtFnVersion)
Determine if PositiveType1 is equivalent to PositiveType2
Definition SemanticTypes.cpp:2966
VERSECOMPILER_API const CTypeBase & AsNegative(const CTypeBase &, const TArray< SInstantiatedTypeVariable > &)
Definition SemanticTypes.cpp:1569
Definition VVMEngineEnvironment.h:23
const char * TypeKindAsCString(ETypeKind Type)
Definition SemanticTypes.cpp:24
ETypeSyntaxPrecedence
Definition SemanticTypes.h:100
constexpr TCases< Args... > Cases
Definition Cases.h:35
ETypePolarity FlipPolarity(ETypePolarity Polarity)
Definition SemanticTypes.h:1133
uint32_t VisitStampType
Used to mark scopes already visited during a search.
Definition VisitStamp.h:11
ETypePolarity
Definition SemanticTypes.h:1131
ETypeKind
Definition SemanticTypes.h:92
VISIT_KIND(Name, CppType)
uLang::TUTF8String< CHeapRawAllocator > CUTF8String
A string allocated on the heap.
Definition UTF8String.h:269
ETypeStringFlag
Definition SemanticTypes.h:121
ETypeConstraintFlags
Definition SemanticTypes.h:127
ULANG_FORCEINLINE TRemoveReference< T >::Type && Move(T &&Obj)
Definition References.h:86
TRangeView< T *, T * > SingletonRangeView(T &Arg)
Definition RangeView.h:77
EComparability
Definition SemanticTypes.h:113
EMemberOrigin
Specifies whether to find only member definitions originating in the current type,...
Definition MemberOrigin.h:10
const char * GetConstraintTypeAsCString(ETypeConstraintFlags TypeConstraints, bool bIsSubtype)
Definition SemanticTypes.cpp:36
U16 Index
Definition radfft.cpp:71
Definition VstNode.h:1131
Definition SemanticTypes.h:481
friend bool operator!=(const Key &Left, const Key &Right)
Definition SemanticTypes.h:489
friend bool operator==(const Key &Left, const Key &Right)
Definition SemanticTypes.h:484
friend bool operator<(const Key &Left, const Key &Right)
Definition SemanticTypes.h:494
const CTypeBase * SuperType
Definition SemanticTypes.h:482
Definition SemanticTypes.h:554
friend bool operator!=(const Key &Left, const Key &Right)
Definition SemanticTypes.h:562
friend bool operator==(const Key &Left, const Key &Right)
Definition SemanticTypes.h:557
friend bool operator<(const Key &Left, const Key &Right)
Definition SemanticTypes.h:567
const CTypeBase * SuperType
Definition SemanticTypes.h:555
Definition SemanticTypes.h:639
friend bool operator!=(const Key &Left, const Key &Right)
Definition SemanticTypes.h:650
const CTypeBase * PositiveValueType
Definition SemanticTypes.h:641
const CTypeBase * NegativeValueType
Definition SemanticTypes.h:640
friend bool operator==(const Key &Left, const Key &Right)
Definition SemanticTypes.h:643
friend bool operator<(const Key &Left, const Key &Right)
Definition SemanticTypes.h:657
Definition SemanticTypes.h:959
friend bool operator<(const SKey &Left, const SKey &Right)
Definition SemanticTypes.h:974
const CTypeBase * _KeyType
Definition SemanticTypes.h:960
friend bool operator==(const SKey &Left, const SKey &Right)
Definition SemanticTypes.h:964
friend bool operator!=(const SKey &Left, const SKey &Right)
Definition SemanticTypes.h:969
bool _bWeak
Definition SemanticTypes.h:962
const CTypeBase * _ValueType
Definition SemanticTypes.h:961
Definition SemanticTypes.h:1295
friend bool operator!=(const Key &Left, const Key &Right)
Definition SemanticTypes.h:1308
friend bool operator==(const Key &Left, const Key &Right)
Definition SemanticTypes.h:1300
const CTypeBase * ValueType
Definition SemanticTypes.h:1297
bool HasValue
Definition SemanticTypes.h:1298
CSymbol Name
Definition SemanticTypes.h:1296
friend bool operator<(const Key &Left, const Key &Right)
Definition SemanticTypes.h:1316
Definition SemanticTypes.h:419
friend bool operator!=(const Key &Left, const Key &Right)
Definition SemanticTypes.h:430
friend bool operator==(const Key &Left, const Key &Right)
Definition SemanticTypes.h:423
const CTypeBase * PositiveType
Definition SemanticTypes.h:421
const CTypeBase * NegativeType
Definition SemanticTypes.h:420
friend bool operator<(const Key &Left, const Key &Right)
Definition SemanticTypes.h:437
Definition SemanticTypes.h:1207
const CTypeBase * _PositiveType
Definition SemanticTypes.h:1209
friend bool operator==(const SInstantiatedTypeVariable &Left, const SInstantiatedTypeVariable &Right)
Definition SemanticTypes.h:1217
const CTypeBase * _NegativeType
Definition SemanticTypes.h:1208
SInstantiatedTypeVariable(const CTypeBase *NegativeType, const CTypeBase *PositiveType)
Definition SemanticTypes.h:1211
Definition SemanticTypes.h:1453
friend bool operator==(const SNormalTypePolarity &Left, const SNormalTypePolarity &Right)
Definition SemanticTypes.h:1457
const CNormalType * NormalType
Definition SemanticTypes.h:1454
const ETypePolarity Polarity
Definition SemanticTypes.h:1455
Information about a given qualifier.
Definition Definition.h:35
Definition SemanticTypes.h:1432
ETypePolarity Polarity
Definition SemanticTypes.h:1434
friend bool operator<(const STypeVariablePolarity &Left, const STypeVariablePolarity &Right)
Definition SemanticTypes.h:1436
const CTypeVariable * TypeVariable
Definition SemanticTypes.h:1433
Definition SemanticTypes.h:1185
friend bool operator==(const STypeVariableSubstitution &Left, const STypeVariableSubstitution &Right)
Definition SemanticTypes.h:1197
const CTypeBase * _PositiveType
Definition SemanticTypes.h:1188
const CTypeVariable * _TypeVariable
Definition SemanticTypes.h:1186
STypeVariableSubstitution(const CTypeVariable *TypeVariable, const CTypeBase *NegativeType, const CTypeBase *PositiveType)
Definition SemanticTypes.h:1190
const CTypeBase * _NegativeType
Definition SemanticTypes.h:1187