UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SemanticInterface.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2// uLang Compiler Public API
3
4#pragma once
5
18
19#define UE_API VERSECOMPILER_API
20
21namespace uLang
22{
24class CInterface : public CDefinition, public CNominalType, public CLogicalScope
25{
26public:
27 static const ETypeKind StaticTypeKind = ETypeKind::Interface;
28 static const CDefinition::EKind StaticDefinitionKind = CDefinition::EKind::Interface;
29
30 // Attributes on the interface macro, like "interface<unique>"
33
35
37
39
41
43
45
46 bool _bHasCyclesBroken { false };
47
48 // Construct a generalized positive interface
49 CInterface(const CSymbol& Name, CScope& EnclosingScope, const TArray<CInterface*>& SuperInterfaces = {})
50 : CInterface(EnclosingScope, Name, SuperInterfaces, this, {}, false)
51 {
52 }
53
54 // construct a positive interface instantiation
73
74 // Construct a negative interface from a positive interface
76
81
83
84 // CTypeBase interface.
87 UE_API virtual EComparability GetComparability() const override;
89 virtual bool CanBeCustomAccessorDataType() const override { return true; }
90 virtual bool CanBePredictsVarDataType() const override { return true; }
91
92 // CScope interface.
93 virtual CSymbol GetScopeName() const override { return CNamed::GetName(); }
94 virtual const CTypeBase* ScopeAsType() const override { return this; }
95 virtual const CDefinition* ScopeAsDefinition() const override { return this; }
96 UE_API virtual void CreateNegativeFunction(const CFunction& PositiveFunction) const override;
97
98 // CLogicalScope interface.
100 const CSymbol& Name,
102 const SQualifier& Qualifier = SQualifier::Unknown(),
103 const CAstPackage* ContextPackage = nullptr,
105
106 // CNominalType interface.
107 virtual const CDefinition* Definition() const override { return this; }
108
109 // CDefinition interface.
112
115
116 virtual const CLogicalScope* DefinitionAsLogicalScopeNullable() const override { return this; }
117
119
124
125 virtual bool IsPersistenceCompatConstraint() const override { return false; }
126
127 UE_API bool IsUnique() const;
128
130 UE_API bool HasCastableAttribute() const;
131
134
135 virtual bool IsPersistable() const override { return false; }
136
138 virtual bool IsExplicitlyCastable() const override { return FindExplicitlyCastableBase() != nullptr; }
139
141 virtual bool IsExplicitlyConcrete() const override { return false; }
142
145
147 UE_API bool IsInterface(const CInterface& Interface) const;
148};
149
151{
152public:
154 : CInstantiatedType(Program, Polarity, Move(Arguments))
155 , _Interface(&Interface)
156 {
157 }
158
159 virtual bool CanBeCustomAccessorDataType() const override { return false; };
160
161protected:
162 UE_API virtual const CNormalType& CreateNormalType() const override;
163
164private:
165 const CInterface* _Interface;
166};
167
168// Eagerly instantiate an interface.
170 const CInterface&,
173
175 const CInterface&,
177
181
183 const TArray<CInterface*>&,
185
187
189 CLogicalScope& InstScope,
190 const CNormalType& InstType,
191 const CFunction&,
193
194VERSECOMPILER_API void SetInstantiatedOverriddenDefinition(CDefinition& InstDefinition, const CNormalType& InstType, const CDefinition&);
195
197
199
201}
202
203#undef UE_API
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
T * New(FMemStackBase &Mem, int32 Count=1, int32 Align=DEFAULT_ALIGNMENT)
Definition MemStack.h:259
@ Num
Definition MetalRHIPrivate.h:234
#define UE_API
Definition SColorGradingComponentViewer.h:12
UEBinkAudioDecodeInterface * Interface
Definition binka_ue_decode_test.cpp:24
Definition Array.h:670
Definition Expression.h:3494
Base class for everything that can have attributes attached to it (classes, expressions,...
Definition Attributable.h:51
Definition Definition.h:131
void SetAstNode(CExpressionBase *AstNode)
Definition Definition.h:329
CExpressionBase * GetAstNode() const
Definition Definition.h:231
EKind
Definition Definition.h:135
void SetIrNode(CExpressionBase *IrNode)
Definition Definition.h:334
CExpressionBase * GetIrNode(bool bForce=false) const
Definition Definition.h:232
Definition Expression.h:2918
Definition SemanticFunction.h:75
Definition SemanticInterface.h:151
CInstantiatedInterface(CSemanticProgram &Program, const CInterface &Interface, ETypePolarity Polarity, TArray< STypeVariableSubstitution > Arguments)
Definition SemanticInterface.h:153
virtual UE_API const CNormalType & CreateNormalType() const override
Definition SemanticInterface.cpp:213
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticInterface.h:159
Definition SemanticTypes.h:1228
Definition SemanticInterface.h:25
TURefArray< CInterface > _InstantiatedInterfaces
Definition SemanticInterface.h:40
SAccessLevel DerivedConstructorAccessLevel() const
Definition SemanticInterface.h:77
virtual bool IsPersistenceCompatConstraint() const override
Definition SemanticInterface.h:125
UE_API bool HasFinalSuperBaseAttribute() const
Does this interface hold a <final_super_base> attribute?
Definition SemanticInterface.cpp:192
virtual const CDefinition * Definition() const override
Definition SemanticInterface.h:107
TArray< STypeVariableSubstitution > _TypeVariableSubstitutions
Definition SemanticInterface.h:38
CInterface(const CSymbol &Name, CScope &EnclosingScope, const TArray< CInterface * > &SuperInterfaces={})
Definition SemanticInterface.h:49
CAttributable _EffectAttributable
Definition SemanticInterface.h:31
TOptional< SAccessLevel > _ConstructorAccessLevel
Definition SemanticInterface.h:32
virtual bool IsExplicitlyCastable() const override
Is this interface castable either by having a castable attribute or inheriting one.
Definition SemanticInterface.h:138
void SetAstNode(CExprInterfaceDefinition *AstNode)
Definition SemanticInterface.h:110
CSemanticProgram & GetProgram() const
Definition SemanticTypes.h:143
virtual const CDefinition * ScopeAsDefinition() const override
Definition SemanticInterface.h:95
static const ETypeKind StaticTypeKind
Definition SemanticInterface.h:27
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 SemanticInterface.cpp:79
CExprInterfaceDefinition * GetIrNode(bool bForce=false) const
Definition SemanticInterface.h:114
UE_API bool IsInterface(const CInterface &Interface) const
Determine if current interface is the same interface or a sub interface of the specified Interface
Definition SemanticInterface.cpp:197
CInterface * _GeneralizedInterface
Definition SemanticInterface.h:36
TArray< CInterface * > _SuperInterfaces
Definition SemanticInterface.h:34
CInterface(CScope &EnclosingScope, const CSymbol &Name, const TArray< CInterface * > &SuperInterfaces, CInterface *GeneralizedInterface, TArray< STypeVariableSubstitution > TypeVariableSubstitutions, bool bHasCyclesBroken)
Definition SemanticInterface.h:55
UE_API bool IsUnique() const
Definition SemanticInterface.cpp:150
virtual bool IsExplicitlyConcrete() const override
Interfaces are never explicitly concrete.
Definition SemanticInterface.h:141
virtual CSymbol GetScopeName() const override
Definition SemanticInterface.h:93
virtual bool CanBePredictsVarDataType() const override
Definition SemanticInterface.h:90
virtual bool CanBeCustomAccessorDataType() const override
Definition SemanticInterface.h:89
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 SemanticInterface.cpp:89
bool _bHasCyclesBroken
Definition SemanticInterface.h:46
CExprInterfaceDefinition * GetAstNode() const
Definition SemanticInterface.h:111
CInterface * _NegativeInterface
Definition SemanticInterface.h:44
virtual UE_API void CreateNegativeFunction(const CFunction &PositiveFunction) const override
Definition SemanticInterface.cpp:144
virtual UE_API EComparability GetComparability() const override
Definition SemanticInterface.cpp:112
UE_API bool HasCastableAttribute() const
Does this interface hold a castable attribute?
Definition SemanticInterface.cpp:169
bool IsParametric() const
Definition SemanticInterface.h:120
virtual const CTypeBase * ScopeAsType() const override
Definition SemanticInterface.h:94
virtual UE_API CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition SemanticInterface.cpp:24
bool HasCyclesBroken() const
Definition SemanticInterface.h:118
virtual const CLogicalScope * DefinitionAsLogicalScopeNullable() const override
Definition SemanticInterface.h:116
void SetIrNode(CExprInterfaceDefinition *AstNode)
Definition SemanticInterface.h:113
static const CDefinition::EKind StaticDefinitionKind
Definition SemanticInterface.h:28
TUPtr< CInterface > _OwnedNegativeInterface
Definition SemanticInterface.h:42
virtual bool IsPersistable() const override
Definition SemanticInterface.h:135
UE_API const CNominalType * FindExplicitlyCastableBase() const
Return first class in the inheritance chain that contains the castable attribute. Otherwise null.
Definition SemanticInterface.cpp:174
Definition SemanticScope.h:242
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 Array.h:51
Definition UniquePointerArray.h:16
Definition UniquePointer.h:15
Definition VVMEngineEnvironment.h:23
TArray< CInterface * > GetNegativeInterfaces(const TArray< CInterface * > &Interfaces)
Definition SemanticInterface.cpp:330
ETypeSyntaxPrecedence
Definition SemanticTypes.h:100
void InstantiatePositiveFunction(CLogicalScope &InstScope, const CNormalType &InstType, const CFunction &Function, const TArray< STypeVariableSubstitution > &Substitutions)
Definition SemanticInterface.cpp:358
TArray< STypeVariableSubstitution > InstantiateTypeVariableSubstitutions(const TArray< STypeVariableSubstitution > &TypeVariables, const TArray< STypeVariableSubstitution > &Substitutions)
Definition SemanticInterface.cpp:283
TArray< CInterface * > InstantiatePositiveInterfaces(const TArray< CInterface * > &Interfaces, const TArray< STypeVariableSubstitution > &Substitutions)
Definition SemanticInterface.cpp:315
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
TSRef< CFunction > CreateNegativeMemberFunction(CLogicalScope &NegativeScope, const CFunction &PositiveFunction)
Definition SemanticInterface.cpp:380
ETypeStringFlag
Definition SemanticTypes.h:121
void SetInstantiatedOverriddenDefinition(CDefinition &InstDefinition, const CNormalType &InstType, const CDefinition &Definition)
Definition SemanticInterface.cpp:341
void SetNegativeInterfaceMemberDefinitionTypes(const CInterface &PositiveInterface)
Definition SemanticInterface.cpp:388
CInterface * InstantiateInterface(const CInterface &Interface, ETypePolarity Polarity, const TArray< STypeVariableSubstitution > &Substitutions)
Definition SemanticInterface.cpp:300
ULANG_FORCEINLINE TRemoveReference< T >::Type && Move(T &&Obj)
Definition References.h:86
CInterface * InstantiatePositiveInterface(const CInterface &Interface, const TArray< STypeVariableSubstitution > &Substitutions)
Definition SemanticInterface.cpp:244
EComparability
Definition SemanticTypes.h:113
EMemberOrigin
Specifies whether to find only member definitions originating in the current type,...
Definition MemberOrigin.h:10
void SetNegativeMemberDefinitionType(CFunction &NegativeFunction, const CFunction &PositiveFunction)
Definition SemanticInterface.cpp:403
Definition AccessLevel.h:15
Information about a given qualifier.
Definition Definition.h:35
static SQualifier Unknown()
Definition Definition.h:81
Definition Optional.h:23