20#define UE_API VERSECOMPILER_API
26class CClassDefinition;
78 SEffectSet ConstructorEffects = EffectSets::ClassAndInterfaceDefault);
87 SEffectSet ConstructorEffects,
181 template<
typename TFunc>
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_API
Definition SColorGradingComponentViewer.h:12
#define ULANG_ENSUREF(expr, format,...)
Definition Common.h:292
#define ULANG_ASSERT(expr)
Definition Common.h:285
#define ULANG_FORCEINLINE
Definition Common.h:188
Definition Expression.h:3494
Base class for everything that can have attributes attached to it (classes, expressions,...
Definition Attributable.h:51
UE_API bool HasAttributeClass(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition Attributable.cpp:89
UE_API bool HasAttributeSubclass(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition Attributable.cpp:94
UE_API void AddAttribute(SAttribute Attribute)
Definition Attributable.cpp:278
UE_API TOptional< SAttribute > FindAttribute(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition Attributable.cpp:209
Definition SemanticClass.h:207
CClassDefinition(const CSymbol &ClassName, CScope &EnclosingScope, CClass *Superclass=nullptr, TArray< CInterface * > &&SuperInterfaces={}, EStructOrClass StructOrClass=EStructOrClass::Class)
Definition SemanticClass.h:212
UE_API bool HasAttributeClass(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition Attributable.cpp:89
virtual const CLogicalScope * DefinitionAsLogicalScopeNullable() const override
Definition SemanticClass.h:238
virtual bool IsPersistenceCompatConstraint() const override
Definition SemanticClass.h:240
TOptional< SAccessLevel > _ConstructorAccessLevel
Definition SemanticClass.h:210
CAttributable _EffectAttributable
Definition SemanticClass.h:209
UE_API bool HasAttributeSubclass(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition Attributable.cpp:94
UE_API void SetIrNode(CExprClassDefinition *AstNode)
Definition SemanticClass.cpp:443
SAccessLevel DerivedConstructorAccessLevel() const
Definition SemanticClass.h:226
UE_API TArray< TSRef< CExpressionBase > > FindMembersWithPredictsAttribute(bool bIncludeSupers=false) const
Definition SemanticClass.cpp:407
UE_API CExprClassDefinition * GetAstNode() const
Definition SemanticClass.cpp:402
UE_API void SetAstNode(CExprClassDefinition *AstNode)
Definition SemanticClass.cpp:398
UE_API void AddAttribute(SAttribute Attribute)
Definition Attributable.cpp:278
UE_API CExprClassDefinition * GetIrNode(bool bForce=false) const
Definition SemanticClass.cpp:447
UE_API TOptional< SAttribute > FindAttribute(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition Attributable.cpp:209
Definition SemanticClass.h:33
UE_API bool HasFinalSuperAttribute() const
Does this class hold a <final_super> attribute?
Definition SemanticClass.cpp:184
virtual UE_API CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition SemanticClass.cpp:208
bool HasCyclesBroken() const
Definition SemanticClass.h:385
virtual UE_API void CreateNegativeDataDefinition(const CDataDefinition &PositiveDataDefinition) const override
Definition SemanticClass.cpp:197
virtual UE_API SmallDefinitionArray FindDefinitions(const CSymbol &Name, EMemberOrigin Origin=EMemberOrigin::InheritedOrOriginal, const SQualifier &Qualifier=SQualifier::Unknown(), const CAstPackage *ContextPackage=nullptr, VisitStampType VisitStamp=GenerateNewVisitStamp()) const override
Definition SemanticClass.cpp:262
TArray< CInterface * > _AllInheritedInterfaces
Definition SemanticClass.h:47
UE_API bool IsUnique() const
Definition SemanticClass.cpp:98
const EStructOrClass _StructOrClass
Definition SemanticClass.h:41
TArray< CInterface * > _SuperInterfaces
Definition SemanticClass.h:44
UE_API bool ImplementsInterface(const CInterface &Interface) const
Determine if current class implements Interface
Definition SemanticClass.cpp:382
bool IsNativeRepresentation() const
Definition SemanticClass.cpp:72
virtual const CDefinition * ScopeAsDefinition() const override
Definition SemanticClass.h:155
UE_API bool IsPersistable() const override
Definition SemanticClass.cpp:377
bool IsExplicitlyCastable() const override
Is this class castable either by having a castable attribute or inheriting one.
Definition SemanticClass.h:144
CClassDefinition *const _Definition
Definition SemanticClass.h:40
void ForEachAncestorClassOrInterface(const TFunc &Func)
Definition SemanticClass.h:182
UE_API void SetSuperclass(CClass *SuperClass)
Definition SemanticClass.h:279
UE_API bool HasCastableAttribute() const
Does this class hold a castable attribute?
Definition SemanticClass.cpp:153
virtual const CTypeBase * ScopeAsType() const override
Definition SemanticClass.h:154
CClass * _GeneralizedClass
Definition SemanticClass.h:56
bool HasAttributeClass(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition SemanticClass.h:365
TArray< STypeVariableSubstitution > _TypeVariableSubstitutions
Definition SemanticClass.h:58
UE_API const CClass * FindInitialConcreteBase() const
Return topmost class in the inheritance chain that contains the concrete attribute or null.
Definition SemanticClass.cpp:140
static const CDefinition::EKind StaticDefinitionKind
Definition SemanticClass.h:36
bool _bHasCyclesBroken
Definition SemanticClass.h:66
SEffectSet _ConstructorEffects
Definition SemanticClass.h:49
bool HasAttributeSubclass(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition SemanticClass.h:370
virtual bool CanBePredictsVarDataType() const override
Definition SemanticClass.h:176
bool IsSuperclassOf(const CClass &Subclass) const
Determine if current class is a superclass / ancestor / parent of the specified Class (and not the sa...
Definition SemanticClass.h:331
bool IsStruct() const
Is this class a struct?
Definition SemanticClass.h:113
bool IsClass(const CClass &Class) const
Determine if current class is the same class or a subclass of the specified Class
Definition SemanticClass.h:286
UE_API bool HasFinalSuperBaseAttribute() const
Does this class hold a <final_super_base> attribute?
Definition SemanticClass.cpp:179
virtual UE_API SmallDefinitionArray FindInstanceMember(const CSymbol &Name, EMemberOrigin Origin, const SQualifier &Qualifier=SQualifier::Unknown(), const CAstPackage *ContextPackage=nullptr, VisitStampType VisitStamp=CScope::GenerateNewVisitStamp()) const override
Definition SemanticClass.cpp:272
UE_API void AddAttribute(SAttribute) const
Definition SemanticClass.h:375
UE_API bool HasConcreteAttribute() const
Does this class hold a concrete attribute?
Definition SemanticClass.cpp:122
TURefArray< CClass > _InstantiatedClasses
Definition SemanticClass.h:60
virtual const CDefinition * Definition() const override
Definition SemanticClass.h:273
TOptional< SAttribute > FindAttribute(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition SemanticClass.h:380
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticClass.h:175
virtual UE_API void CreateNegativeFunction(const CFunction &PositiveFunction) const override
Definition SemanticClass.cpp:203
virtual CSymbol GetScopeName() const override
Definition SemanticClass.h:153
UE_API const CTypeType * GetTypeType() const
Definition SemanticClass.cpp:66
UE_API const CNominalType * FindExplicitlyCastableBase() const
Return first class in the inheritance chain that contains the castable attribute. Otherwise null.
Definition SemanticClass.cpp:158
static const ETypeKind StaticTypeKind
Definition SemanticClass.h:35
virtual void SetRevision(SemanticRevision Revision) override
Definition SemanticClass.h:349
UE_API bool IsPersistent() const
Definition SemanticClass.cpp:92
CClass * _Superclass
Definition SemanticClass.h:42
UE_API bool IsAbstract() const
Definition SemanticClass.cpp:87
bool IsParametric() const
Definition SemanticClass.h:200
virtual UE_API EComparability GetComparability() const override
Definition SemanticClass.cpp:303
bool IsExplicitlyConcrete() const override
Is this class concrete either by having a concrete attribute or inheriting one.
Definition SemanticClass.h:135
CClass * _NegativeClass
Definition SemanticClass.h:64
TUPtr< CClass > _OwnedNegativeClass
Definition SemanticClass.h:62
TArray< CExprCodeBlock * > _IrBlockClauses
Definition SemanticClass.h:54
UE_API const CClass * FindConcreteBase() const
Return first class in the inheritance chain that contains the concrete attribute or null.
Definition SemanticClass.cpp:127
bool IsSubclassOf(const CClass &Superclass) const
Determine if current class is a subclass / descendant / child of the specified Class (and not the sam...
Definition SemanticClass.h:311
bool IsNative() const
Definition SemanticClass.h:115
virtual UE_API SAccessLevel GetDefaultDefinitionAccessLevel() const override
Definition SemanticClass.cpp:189
Definition DataDefinition.h:41
Definition Definition.h:131
UE_API bool IsNative() const
Definition Definition.cpp:106
EKind
Definition Definition.h:135
Definition Expression.h:2950
Definition SemanticFunction.h:75
Definition SemanticClass.h:246
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticClass.h:254
CInstantiatedClass(CSemanticProgram &Program, const CClass &Class, ETypePolarity Polarity, TArray< STypeVariableSubstitution > Arguments)
Definition SemanticClass.h:248
virtual UE_API const CNormalType & CreateNormalType() const override
Definition SemanticClass.cpp:452
Definition SemanticTypes.h:1228
Definition SemanticInterface.h:25
Definition SemanticScope.h:242
friend class CScope
Definition SemanticScope.h:313
ULANG_FORCEINLINE const CSymbol & GetName() const
Definition Named.h:41
Class defining instance and class objects.
Definition SemanticTypes.h:608
A normal type: a head normal form of types where the head is not a parametric type instantiation.
Definition SemanticTypes.h:217
Definition SemanticScope.h:73
static UE_API VisitStampType GenerateNewVisitStamp()
Generates a new stamp id.
Definition SemanticScope.cpp:562
Definition SemanticProgram.h:277
Symbol representing a text string with an associated id.
Definition Symbol.h:98
Base class for all types.
Definition SemanticTypes.h:138
CSemanticProgram & GetProgram() const
Definition SemanticTypes.h:143
Definition UniquePointerArray.h:16
Definition UniquePointer.h:15
Definition VVMEngineEnvironment.h:23
ETypeSyntaxPrecedence
Definition SemanticTypes.h:100
CClass * InstantiateClass(const CClass &Class, ETypePolarity Polarity, const TArray< STypeVariableSubstitution > &Substitutions)
Definition SemanticClass.cpp:566
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
EStructOrClass
Definition StructOrClass.h:8
uint32_t SemanticRevision
For storing revisions of functions, classes etc.
Definition Revision.h:11
ETypeStringFlag
Definition SemanticTypes.h:121
ULANG_FORCEINLINE TRemoveReference< T >::Type && Move(T &&Obj)
Definition References.h:86
EComparability
Definition SemanticTypes.h:113
EMemberOrigin
Specifies whether to find only member definitions originating in the current type,...
Definition MemberOrigin.h:10
void SetNegativeClassMemberDefinitionTypes(const CClass &PositiveClass)
Definition SemanticClass.cpp:581
Definition AccessLevel.h:15
Definition Attributable.h:20
Information about a given qualifier.
Definition Definition.h:35
static SQualifier Unknown()
Definition Definition.h:81