UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DataDefinition.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
12
13#define UE_API VERSECOMPILER_API
14
15namespace uLang
16{
17class CExprDefinition;
18class CExprIdentifierFunction;
19class CTypeBase;
20
21static SAccessLevel::EKind DefaultVarAccessLevelKind = SAccessLevel::EKind::Public;
22
36
41{
42public:
43 static const CDefinition::EKind StaticDefinitionKind = CDefinition::EKind::Data;
44 friend class CExprDataDefinition;
45
46 bool _bNamed = false; // Named member - must be explicitly ?named rather than determined by index
47
48 // The type of this data definition in the negative position.
49 const CTypeBase* _NegativeType = nullptr;
50
51 // A parameter `X` of type `type` is encoded as `:type(X, X) where X:type`.
52 // `_ImplicitParam` points to the corresponding type variable.
53 const CTypeVariable* _ImplicitParam = nullptr;
54
59
65
66 // CDefinition interface.
69
72
74 UE_API CExprDefinition* GetIrNode(bool bForce = false) const;
75
76 UE_API bool IsNativeRepresentation() const;
77
78 void SetType(const CTypeBase* Type) { _Type = Type; }
79 const CTypeBase* GetType() const { return _Type; }
80
81 UE_API CUTF8String GetScopePath(uLang::UTF8Char SeparatorChar = '.', CScope::EPathMode Mode = CScope::EPathMode::Default) const;
82
97
99 {
101 _bHasInitializer = true;
102 }
103 bool HasInitializer() const
104 {
105 return GetPrototypeDefinition()->_bHasInitializer;
106 }
107
114
115 void SetIsVar()
116 {
118 _bIsVar = true;
119 }
120
121 void SetIsLive(bool bIsLive)
122 {
123 _bIsLive = bIsLive;
124 }
125
127 {
129 return GetPrototypeDefinition()->_VarAccessLevel;
130 }
131
132 bool IsVar() const
133 {
134 return GetPrototypeDefinition()->_bIsVar;
135 }
136
137 bool IsLive() const
138 {
139 return GetPrototypeDefinition()->_bIsLive;
140 }
141
143 {
145 return GetDefinitionAccessibilityRoot().AsChecked<CDataDefinition>().SelfVarAccessLevel().Get(DefaultVarAccessLevelKind);
146 }
147
148 UE_API bool IsVarWritableFrom(const CScope&) const;
149
154
155 UE_API bool IsModuleScopedVar() const;
156
158
159 UE_API virtual bool IsPersistenceCompatConstraint() const override;
160
162 UE_API bool CanHaveCustomAccessors() const;
163
164 UE_API bool HasPredictsAttribute() const;
166
167 // Used for default value of data definitions in interfaces.
169
170private:
171 TOptional<SAccessLevel> _VarAccessLevel;
172 const CTypeBase* _Type{nullptr};
173 mutable bool _bPersistenceCompatConstraint{false};
174 bool _bIsVar{false};
175 bool _bIsLive{false};
176 bool _bHasInitializer{false};
177};
178
179} // namespace uLang
180
181#undef UE_API
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
const bool
Definition NetworkReplayStreaming.h:178
#define UE_API
Definition SColorGradingComponentViewer.h:12
#define ULANG_ASSERT(expr)
Definition Common.h:285
Definition DataDefinition.h:41
TSPtr< CExpressionBase > DefaultValue
Definition DataDefinition.h:168
void SetIsLive(bool bIsLive)
Definition DataDefinition.h:121
void SetIsVar()
Definition DataDefinition.h:115
UE_API void MarkPersistenceCompatConstraint() const
Definition DataDefinition.cpp:87
void SetVarAccessLevel(TOptional< SAccessLevel > &&AccessLevel)
Definition DataDefinition.h:108
const CTypeBase * _NegativeType
Definition DataDefinition.h:49
virtual UE_API bool IsPersistenceCompatConstraint() const override
Definition DataDefinition.cpp:100
static const CDefinition::EKind StaticDefinitionKind
Definition DataDefinition.h:43
UE_API CExprDefinition * GetAstNode() const
Definition DataDefinition.cpp:16
UE_API CExprDefinition * GetIrNode(bool bForce=false) const
Definition DataDefinition.cpp:25
bool IsVar() const
Definition DataDefinition.h:132
const CDataDefinition * GetPrototypeDefinition() const
Definition DataDefinition.h:68
UE_API bool IsVarWritableFrom(const CScope &) const
Definition DataDefinition.cpp:68
UE_API void SetIrNode(CExprDefinition *AstNode)
Definition DataDefinition.cpp:21
const CTypeBase * GetType() const
Definition DataDefinition.h:79
const CTypeVariable * _ImplicitParam
Definition DataDefinition.h:53
CDataDefinition(const CSymbol &IdentName, CScope &EnclosingScope)
Definition DataDefinition.h:55
UE_API CUTF8String GetScopePath(uLang::UTF8Char SeparatorChar='.', CScope::EPathMode Mode=CScope::EPathMode::Default) const
Definition DataDefinition.cpp:58
CDataDefinition(const CSymbol &IdentName, CScope &EnclosingScope, const CTypeBase *Type)
Definition DataDefinition.h:60
UE_API bool IsModuleScopedVar() const
Definition DataDefinition.cpp:74
bool _bNamed
Definition DataDefinition.h:46
UE_API bool CanHaveCustomAccessors() const
Definition DataDefinition.cpp:105
const CDataDefinition & GetBaseClassOverriddenDefinition() const
Definition DataDefinition.h:93
bool HasInitializer() const
Definition DataDefinition.h:103
bool IsLive() const
Definition DataDefinition.h:137
SAccessLevel DerivedVarAccessLevel() const
Definition DataDefinition.h:142
void SetPrototypeDefinition(const CDataDefinition &PrototypeDefinition)
Definition DataDefinition.h:67
void SetOverriddenDefinition(const CDataDefinition &OverriddenDefinition)
Definition DataDefinition.h:83
void SetHasInitializer()
Definition DataDefinition.h:98
SClassVarAccessorFunctions _OptionalAccessors
Definition DataDefinition.h:161
const TOptional< SAccessLevel > & SelfVarAccessLevel() const
Definition DataDefinition.h:126
UE_API bool HasPredictsAttribute() const
Definition DataDefinition.cpp:112
const CDataDefinition & GetBaseOverriddenDefinition() const
Definition DataDefinition.h:89
const CDataDefinition & GetDefinitionVarAccessibilityRoot() const
Definition DataDefinition.h:150
UE_API bool IsNativeRepresentation() const
Definition DataDefinition.cpp:31
UE_API bool CanBeAccessedFromPredicts() const
Definition DataDefinition.cpp:117
const CDataDefinition * GetOverriddenDefinition() const
Definition DataDefinition.h:84
void SetType(const CTypeBase *Type)
Definition DataDefinition.h:78
UE_API void SetAstNode(CExprDefinition *AstNode)
Definition DataDefinition.cpp:12
Definition Definition.h:131
const CDefinition * GetPrototypeDefinition() const
Definition Definition.h:219
const CDefinition & GetDefinitionAccessibilityRoot() const
Definition Definition.h:285
const CDefinition & GetBaseOverriddenDefinition() const
Definition Definition.h:206
EKind
Definition Definition.h:135
void SetPrototypeDefinition(const CDefinition &PrototypeDefinition)
Definition Definition.h:324
const CDefinition * GetOverriddenDefinition() const
Definition Definition.h:202
void SetOverriddenDefinition(const CDefinition &OverriddenDefinition)
Definition Definition.h:294
TDefinition & AsChecked()
Definition Definition.h:368
UE_API const CDefinition & GetBaseClassOverriddenDefinition() const
Definition Definition.cpp:57
Definition Expression.h:2981
Definition Expression.h:1249
Definition SemanticScope.h:73
Symbol representing a text string with an associated id.
Definition Symbol.h:98
Base class for all types.
Definition SemanticTypes.h:138
Definition TypeVariable.h:21
Definition Map.h:13
Definition SharedPointer.h:77
Definition VVMEngineEnvironment.h:23
EPathMode
Definition SemanticScope.h:67
uint8_t UTF8Char
UTF-8 octet.
Definition Unicode.h:20
ULANG_FORCEINLINE TRemoveReference< T >::Type && Move(T &&Obj)
Definition References.h:86
Definition AccessLevel.h:15
EKind
Definition AccessLevel.h:17
Definition DataDefinition.h:24
CSymbol SetterName
Definition DataDefinition.h:29
TMap< int, const CFunction * > Setters
Definition DataDefinition.h:26
CSymbol GetterName
Definition DataDefinition.h:28
TMap< int, const CFunction * > Getters
Definition DataDefinition.h:25
Definition Optional.h:23