UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TypeAlias.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
11
12namespace uLang
13{
14class CTypeAlias;
15enum class EPathMode : uint8_t;
16
18class CAliasType : public CTypeBase
19{
20public:
21
24
25 CTypeAlias& GetDefinition() const { return _Definition; }
26 const CTypeBase* GetAliasedType() const { return _AliasedType; }
27
28 // CTypeBase interface.
29 virtual const CNormalType& GetNormalType() const override
30 {
31 return _AliasedType->GetNormalType();
32 }
33
34 virtual const CAliasType* AsAliasType() const override
35 {
36 return this;
37 }
38
39 virtual bool CanBeCustomAccessorDataType() const override { return _AliasedType->CanBeCustomAccessorDataType(); }
40 virtual bool CanBePredictsVarDataType() const override { return _AliasedType->CanBePredictsVarDataType(); }
41
46
47private:
48
49 CTypeAlias& _Definition;
50 const CTypeBase* _AliasedType;
51};
52
54class CTypeAlias : public CDefinition
55{
56public:
57 static const CDefinition::EKind StaticDefinitionKind = CDefinition::EKind::TypeAlias;
58
63
64 bool IsInitialized() const
65 {
66 return _TypeType != nullptr;
67 }
68
69 const CTypeType* GetTypeType() const
70 {
71 return _TypeType;
72 }
73
74 const CTypeBase* GetType() const
75 {
76 if (!_PositiveAliasType)
77 {
78 return nullptr;
79 }
80 return _PositiveAliasType.Get();
81 }
82
84 {
85 ULANG_ASSERT(_PositiveAliasType);
86 return _PositiveAliasType->GetAliasedType();
87 }
88
90 {
91 ULANG_ASSERT(!_TypeType);
92 _PositiveAliasType = TURef<CAliasType>::New(*this, PositiveAliasedType);
93 const CAliasType* NegativeAliasType = _PositiveAliasType.Get();
95 {
96 _NegativeAliasType = TURef<CAliasType>::New(*this, NegativeAliasedType);
97 NegativeAliasType = _NegativeAliasType.Get();
98 }
99 _TypeType = &_EnclosingScope.GetProgram().GetOrCreateTypeType(NegativeAliasType, _PositiveAliasType.Get());
100 }
101
102 // CDefinition interface.
105
108
109 virtual bool IsPersistenceCompatConstraint() const override { return false; }
110
120
121private:
122
123 const CTypeType* _TypeType{ nullptr };
124
125 TUPtr<CAliasType> _NegativeAliasType;
126 TUPtr<CAliasType> _PositiveAliasType;
127};
128}
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ULANG_ASSERT(expr)
Definition Common.h:285
Definition TypeAlias.h:19
virtual const CNormalType & GetNormalType() const override
Definition TypeAlias.h:29
const CTypeBase * GetAliasedType() const
Definition TypeAlias.h:26
virtual bool CanBeCustomAccessorDataType() const override
Definition TypeAlias.h:39
virtual const CAliasType * AsAliasType() const override
Definition TypeAlias.h:34
CTypeAlias & GetDefinition() const
Definition TypeAlias.h:25
CAliasType(CTypeAlias &Definition, const CTypeBase *AliasedType)
Definition TypeAlias.h:22
virtual bool CanBePredictsVarDataType() const override
Definition TypeAlias.h:40
virtual CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const override
Definition TypeAlias.h:42
Definition Definition.h:131
void SetAstNode(CExpressionBase *AstNode)
Definition Definition.h:329
CScope & _EnclosingScope
Definition Definition.h:141
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:3240
ULANG_FORCEINLINE CUTF8StringView AsNameStringView() const
Definition Named.h:44
ULANG_FORCEINLINE const char * AsNameCString() const
Definition Named.h:45
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
ULANG_FORCEINLINE CSemanticProgram & GetProgram() const
Definition SemanticScope.h:121
UE_API CUTF8String GetScopePath(uLang::UTF8Char SeparatorChar='.', EPathMode Mode=EPathMode::Default) const
Definition SemanticScope.cpp:60
UE_API CTypeType & GetOrCreateTypeType(const CTypeBase *NegativeType, const CTypeBase *PositiveType)
Definition SemanticProgram.cpp:422
Symbol representing a text string with an associated id.
Definition Symbol.h:98
Definition TypeAlias.h:55
void SetIrNode(CExprTypeAliasDefinition *AstNode)
Definition TypeAlias.h:106
void SetAstNode(CExprTypeAliasDefinition *AstNode)
Definition TypeAlias.h:103
void InitType(const CTypeBase *NegativeAliasedType, const CTypeBase *PositiveAliasedType)
Definition TypeAlias.h:89
const CTypeBase * GetPositiveAliasedType() const
Definition TypeAlias.h:83
CExprTypeAliasDefinition * GetIrNode(bool bForce=false) const
Definition TypeAlias.h:107
CUTF8String GetPath(const uLang::UTF8Char SeparatorChar, const uLang::EPathMode Mode) const
Definition TypeAlias.h:111
virtual bool IsPersistenceCompatConstraint() const override
Definition TypeAlias.h:109
const CTypeType * GetTypeType() const
Definition TypeAlias.h:69
CExprTypeAliasDefinition * GetAstNode() const
Definition TypeAlias.h:104
CTypeAlias(const CSymbol &Name, CScope &EnclosingScope)
Definition TypeAlias.h:59
static const CDefinition::EKind StaticDefinitionKind
Definition TypeAlias.h:57
const CTypeBase * GetType() const
Definition TypeAlias.h:74
bool IsInitialized() const
Definition TypeAlias.h:64
Base class for all types.
Definition SemanticTypes.h:138
virtual const CNormalType & GetNormalType() const =0
CSemanticProgram & GetProgram() const
Definition SemanticTypes.h:143
virtual bool CanBePredictsVarDataType() const
Definition SemanticTypes.h:160
virtual CUTF8String AsCodeRecursive(ETypeSyntaxPrecedence OuterPrecedence, TArray< const CFlowType * > &VisitedFlowTypes, bool bLinkable, ETypeStringFlag Flag) const =0
virtual bool CanBeCustomAccessorDataType() const =0
Definition SemanticTypes.h:381
Definition Array.h:51
static ULANG_FORCEINLINE TUPtrG New(AllocatorArgsType &&... AllocatorArgs, CtorArgsType &&... CtorArgs)
Definition UniquePointer.h:29
Definition VVMEngineEnvironment.h:23
ETypeSyntaxPrecedence
Definition SemanticTypes.h:100
EPathMode
Definition SemanticScope.h:67
uLang::TUTF8String< CHeapRawAllocator > CUTF8String
A string allocated on the heap.
Definition UTF8String.h:269
uint8_t UTF8Char
UTF-8 octet.
Definition Unicode.h:20
ETypeStringFlag
Definition SemanticTypes.h:121
Definition VstNode.h:1131