UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Expression.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
16
17#define UE_API VERSECOMPILER_API
18
19namespace uLang
20{
21
22// Forward declarations
23class CAstNode;
24class CAstCompilationUnit;
25class CCaptureScope;
26class CControlScope;
27class CEnumeration;
28class CEnumerator;
29class CExpressionBase;
30class CExprCodeBlock;
31class CExprIdentifierBase;
32class CSemanticProgram;
33class CSnippet;
34class CModule;
35class CModulePart;
36class CModuleAlias;
37class CSemanticProgram;
38class CSnippet;
39class CTypeAlias;
40class CTypeVariable;
41
42// NOTE: (YiLiangSiew) Currently, Visual Verse relies on the numerical values of these enumerations. If you
43// change this, be sure to update `BaseVisualVerseSettings.ini` as well.
44#define VERSE_VISIT_AST_NODE_TYPES(v) \
45 /* Helper expressions */ \
46 v(Error_, CExprError) /* An expression that could not be analyzed due to an error. Attempts to analyze should propagate the error. */ \
47 v(Placeholder_, CExprPlaceholder) /* Corresponds to a Placeholder Vst node. */ \
48 v(External, CExprExternal) /* An (unknown) external expression - should never reach the code generator */ \
49 v(PathPlusSymbol, CExprPathPlusSymbol) /* Path of the current scope plus a symbol - /unrealengine.com/UnrealEngine@5 */ \
50 \
51 /* Literals */ \
52 v(Literal_Logic, CExprLogic) /* Logic literal - true/false */ \
53 v(Literal_Number, CExprNumber) /* Integer literal - 42, 0, -123, 123_456_789, 0x12fe, 0b101010 */ \
54 /* or Float literal - 42.0, 0.0, -123.0, 123_456.0, 3.14159, .5, -.33, 4.2e1, -1e6, 7.5e-8 */ \
55 v(Literal_Char, CExprChar) /* Character literal - 'a', '\n' */ \
56 v(Literal_String, CExprString) /* String literal - "Hello, world!", "Line 1\nLine2" */ \
57 v(Literal_Path, CExprPath) /* Path literal - /unrealengine.com/UnrealEngine@5 */ \
58 v(Literal_Enum, CExprEnumLiteral) /* Enumerator - Color.Red, Size.XXL */ \
59 v(Literal_Type, CExprType) /* Type - type{<expr>} */ \
60 v(Literal_Function, CExprFunctionLiteral) /* a=>b or function(a){b} */ \
61 \
62 /* Identifiers */ \
63 v(Identifier_Unresolved, CExprIdentifierUnresolved) /* An existing identifier that is unresolved. It is produced by desugaring and consumed by analysis. */ \
64 v(Identifier_Class, CExprIdentifierClass) /* Type identifier - e.g. my_type, int, color, string */ \
65 v(Identifier_Module, CExprIdentifierModule) /* Module name */ \
66 v(Identifier_ModuleAlias, CExprIdentifierModuleAlias) /* Module alias name */ \
67 v(Identifier_Enum, CExprEnumerationType) /* Enum name */ \
68 v(Identifier_Interface, CExprInterfaceType) /* Interface name */ \
69 v(Identifier_Data, CExprIdentifierData) /* Scoped data-definition (class member, local, etc.) */ \
70 v(Identifier_TypeAlias, CExprIdentifierTypeAlias) /* Access to type alias */ \
71 v(Identifier_TypeVariable, CExprIdentifierTypeVariable) /* Access to a type variable */ \
72 v(Identifier_Function, CExprIdentifierFunction) /* Access to functions */ \
73 v(Identifier_OverloadedFunction, CExprIdentifierOverloadedFunction) /* An overloaded function identifier that hasn't been resolved to a specific overload. */ \
74 v(Identifier_Self, CExprSelf) /* Access to the instance the current function is being invoked on. */ \
75 v(Identifier_Local, CExprLocal) /* Access to the the current scope for the identifier that has this qualifier. */ \
76 v(Identifier_BuiltInMacro, CExprIdentifierBuiltInMacro) /* An intrinsic macro: option{}, logic{}, array{}, etc. */ \
77 \
78 /* Multi purpose syntax */ \
79 v(Definition, CExprDefinition) /* represents syntactic forms elt:domain=value, elt:domain, elt=value */ \
80 \
81 /* Macro */ \
82 v(MacroCall, CExprMacroCall) /* macro invocations should be resolved by the compiler; the code generator should never encounter this. */ \
83 \
84 /* Invocations */ \
85 v(Invoke_Invocation, CExprInvocation) /* Routine call - expr1.call(expr2, expr3) */ \
86 v(Invoke_UnaryArithmetic, CExprUnaryArithmetic) /* negation */ \
87 v(Invoke_BinaryArithmetic, CExprBinaryArithmetic) /* add, sub, mul, div; two operands only */ \
88 v(Invoke_ShortCircuitAnd, CExprShortCircuitAnd) /* short-circuit evaluation of logic and */ \
89 v(Invoke_ShortCircuitOr, CExprShortCircuitOr) /* short-circuit evaluation of logic or */ \
90 v(Invoke_LogicalNot, CExprLogicalNot) /* logical not operator */ \
91 v(Invoke_Comparison, CExprComparison) /* comparison operators */ \
92 v(Invoke_QueryValue, CExprQueryValue) /* Querying the value of a logic or option. */ \
93 v(Invoke_MakeOption, CExprMakeOption) /* Making an option value. */ \
94 v(Invoke_MakeArray, CExprMakeArray) /* Making an array value. */ \
95 v(Invoke_MakeMap, CExprMakeMap) /* Making a map value. */ \
96 v(Invoke_MakeTuple, CExprMakeTuple) /* Making a tuple value - (1, 2.0f, "three") */ \
97 v(Invoke_TupleElement, CExprTupleElement) /* Tuple element access `TupleExpr(Idx)` */ \
98 v(Invoke_MakeRange, CExprMakeRange) /* Making a range value. */ \
99 v(Invoke_Type, CExprInvokeType) /* Invoke a type as a function on a value - type(expr) or type[expr]. */ \
100 v(Invoke_PointerToReference, CExprPointerToReference) /* Access the mutable reference behind the pointer. */ \
101 v(Invoke_Set, CExprSet) /* Evaluate operand to an l-expression. */ \
102 v(Invoke_NewPointer, CExprNewPointer) /* Create a new pointer from an initial value. */ \
103 v(Invoke_ReferenceToValue, CExprReferenceToValue) /* Evaluates the value of an expression yielding a reference type. */ \
104 \
105 v(Assignment, CExprAssignment) /* Assignment operation - expr1 = expr2, expr1 := expr2, expr1 += expr2, etc. */ \
106 \
107 /* TypeFormers */ \
108 v(Invoke_ArrayFormer, CExprArrayTypeFormer) /* Invoke (at compile time) a formation of an array of another type */ \
109 v(Invoke_GeneratorFormer, CExprGeneratorTypeFormer) /* Invoke (at compile time) a formation of an generator type. */ \
110 v(Invoke_MapFormer, CExprMapTypeFormer) /* Invoke (at compile time) a formation of a map from a key and value type. */ \
111 v(Invoke_OptionFormer, CExprOptionTypeFormer) /* Invoke (at compile time) a formation of an option of some primitive type */ \
112 v(Invoke_Subtype, CExprSubtype) /* Invoke (at compile time) a formation of a metaclass type. */ \
113 v(Invoke_TupleType, CExprTupleType) /* Get or create a tuple based on `tuple(type1, type2, ...)` */ \
114 v(Invoke_Arrow, CExprArrow) /* Create a function type from a parameter and return type. */ \
115 \
116 v(Invoke_ArchetypeInstantiation, CExprArchetypeInstantiation) /* Initializer list style instantiation - Type{expr1, id=expr2, ...} */ \
117 \
118 /* Flow Control */ \
119 v(Flow_CodeBlock, CExprCodeBlock) /* Code block - block {expr1; expr2} */ \
120 v(Flow_Let, CExprLet) /* let {definition1; definition2} */ \
121 v(Flow_Defer, CExprDefer) /* defer {expr1; expr2} */ \
122 v(Flow_If, CExprIf) /* Conditional with failable tests- if (Test[]) {clause1}, if (Test[]) {clause1} else {else_clause} */ \
123 v(Flow_Iteration, CExprIteration) /* Bounded iteration over an iterable type - for(Num:Nums, ...) {DoStuff(Num, ...)} */ \
124 v(Flow_Loop, CExprLoop) /* Simple loop - loop {DoStuff()} */ \
125 v(Flow_Break, CExprBreak) /* Control flow early exit - loop {if (IsEarlyExit[]) {break}; DoLoopStuff()} */ \
126 v(Flow_Return, CExprReturn) /* Return statement - return expr */ \
127 v(Flow_ProfileBlock, CExprProfileBlock) /* profile block */\
128 \
129 v(Ir_For, CIrFor) /* Bounded iteration over an iterable type - for(Num:Nums) {DoStuff(Num)} */ \
130 v(Ir_ForBody, CIrForBody) /* Only used inside CIrFor, and only around the body of the innermost CIrFor */ \
131 v(Ir_ArrayAdd, CIrArrayAdd) /* Append an item to an array */ \
132 v(Ir_MapAdd, CIrMapAdd) /* Add a key-value pair to a map */ \
133 v(Ir_ArrayUnsafeCall, CIrArrayUnsafeCall) /* Infallibly access an element of an array */ \
134 v(Ir_ConvertToDynamic, CIrConvertToDynamic) /* Converts a value to a dynamically typed value. */ \
135 v(Ir_ConvertFromDynamic, CIrConvertFromDynamic) /* Converts a value from a dynamically typed value. */ \
136 \
137 /* Concurrency Primitives */ \
138 v(Concurrent_Sync, CExprSync) /* sync {Coro1(); Coro2()} */ \
139 v(Concurrent_Rush, CExprRush) /* rush {Coro1(); Coro2()} */ \
140 v(Concurrent_Race, CExprRace) /* race {Coro1(); Coro2()} */ \
141 v(Concurrent_SyncIterated, CExprSyncIterated) /* sync(Item:Container) {Item.Coro1(); Coro2(Item)} */ \
142 v(Concurrent_RushIterated, CExprRushIterated) /* rush(Item:Container) {Item.Coro1(); Coro2(Item)} */ \
143 v(Concurrent_RaceIterated, CExprRaceIterated) /* race(Item:Container) {Item.Coro1(); Coro2(Item)} */ \
144 v(Concurrent_Branch, CExprBranch) /* branch {Coro1(); Coro2()} */ \
145 v(Concurrent_Spawn, CExprSpawn) /* spawn {Coro()} */ \
146 v(Concurrent_Await, CExprAwait) /* await {E} */ \
147 v(Concurrent_Upon, CExprUpon) /* upon(E1) {E2} */ \
148 v(Concurrent_When, CExprWhen) /* when(E1) {E2} */ \
149 \
150 /* Definitions */ \
151 v(Definition_Module, CExprModuleDefinition) \
152 v(Definition_Enum, CExprEnumDefinition) \
153 v(Definition_Interface, CExprInterfaceDefinition) \
154 v(Definition_Class, CExprClassDefinition) \
155 v(Definition_Data, CExprDataDefinition) \
156 v(Definition_IterationPair, CExprIterationPairDefinition) \
157 v(Definition_Function, CExprFunctionDefinition) \
158 v(Definition_TypeAlias, CExprTypeAliasDefinition) \
159 v(Definition_Using, CExprUsing) \
160 v(Definition_Import, CExprImport) \
161 v(Definition_Where, CExprWhere) \
162 v(Definition_Var, CExprVar) \
163 v(Definition_Live, CExprLive) \
164 v(Definition_ScopedAccessLevel, CExprScopedAccessLevelDefinition) \
165 v(Invoke_MakeNamed, CExprMakeNamed) /* ?ParamName:=Value pair - or default value placeholder (value not set) */ \
166 \
167 /* Containing Context - may contain expressions though they aren't expressions themselves */ \
168 v(Context_Project, CAstProject) \
169 v(Context_CompilationUnit, CAstCompilationUnit) \
170 v(Context_Package, CAstPackage) \
171 v(Context_Snippet, CExprSnippet)
172
173#define FORWARD_DECLARE(_, Class) class Class;
175#undef FORWARD_DECLARE
176
183{
184#define VISIT_AST_NODE_TYPE(Name, Class) Name,
186#undef VISIT_AST_NODE_TYPE
187};
188
190{
191 const char* _EnumeratorName;
192 const char* _CppClassName;
193};
194
197
198//---------------------------------------------------------------------------------------
199// Indicates whether an expression should return immediately - such as functions, after a
200// duration (including immediately) such as coroutines or either.
202{
203 Immediate = 1 << 0, // May only call an immediate expression (such as a function call) and any async expression (such as a coroutine call) should result in an error.
204 Async = 1 << 1, // May only call an async expression (such as a coroutine call) and any immediate expression (such as a function call) should result in an error. Only true within one of the pre-defined calling contexts (`sync{}`, `race{}`, etc.).
205 Any_ = Immediate | Async // Calling either immediate or async expressions is allowed.
206};
207
209{
210 switch(InvokeTime)
211 {
212 case EInvokeTime::Immediate: return "Immediate";
213 case EInvokeTime::Async: return "Async";
214 case EInvokeTime::Any_: return "Any_";
215 default: ULANG_UNREACHABLE();
216 }
217}
218
224{
226 virtual void VisitImmediate(const char* FieldName, CUTF8StringView Value) {}
227 virtual void VisitImmediate(const char* FieldName, int64_t Value) {}
228 virtual void VisitImmediate(const char* FieldName, double Value) {}
229 virtual void VisitImmediate(const char* FieldName, bool Value) {}
230 virtual void VisitImmediate(const char* FieldName, const CTypeBase* Type) {}
231 virtual void VisitImmediate(const char* FieldName, const CDefinition& Definition) {}
232 virtual void VisitImmediate(const char* FieldName, const Verse::Vst::Node& VstNode) {}
233
234 void VisitImmediate(const char* FieldName, const char* CString) { VisitImmediate(FieldName, CUTF8StringView(CString)); }
235
236 virtual void Visit(const char* FieldName, CAstNode& AstNode) = 0;
237 virtual void BeginArray(const char* FieldName, intptr_t Num) {}
238 virtual void VisitElement(CAstNode& AstNode) = 0;
239 virtual void EndArray() {}
240
241 template<typename NodeType, bool bAllowNull, typename AllocatorType, typename... AllocatorArgTypes>
243 {
244 if (!bAllowNull || NodePointer.IsValid())
245 {
246 Visit(FieldName, *NodePointer);
247 }
248 }
249
250 template<typename NodeType, bool bAllowNull, typename AllocatorType, typename... AllocatorArgTypes>
258
259 template<typename NodeType, bool bAllowNull, typename NodeAllocatorType, typename ElementAllocatorType, typename... ElementAllocatorArgTypes>
260 void VisitArray(const char* FieldName, const TArrayG<TSPtrG<NodeType, bAllowNull, NodeAllocatorType>, ElementAllocatorType, ElementAllocatorArgTypes...>& Array)
261 {
262 BeginArray(FieldName, Array.Num());
264 {
265 if (!bAllowNull || Element.IsValid())
266 {
267 VisitElement(*Element);
268 }
269 }
270 EndArray();
271 }
272
273 template<typename NodeType, bool bAllowNull, typename ElementAllocatorType, typename... RawAllocatorArgTypes>
275 {
276 BeginArray(FieldName, Array.Num());
277 for (NodeType* Node : Array)
278 {
279 if (!bAllowNull || Node)
280 {
282 }
283 }
284 EndArray();
285 }
286};
287
289{
291};
292
296class CAstNode : public CSharedMix
297{
298public:
300
301 UE_API virtual ~CAstNode();
302
303 virtual EAstNodeType GetNodeType() const = 0;
304 virtual const CExpressionBase* AsExpression() const { return nullptr; }
305 virtual CExpressionBase* AsExpression() { return nullptr; }
306 virtual bool MayHaveAttributes() const { return true; }
307 virtual const CExprIdentifierBase* AsIdentifierBase() const { return nullptr; }
308
312 virtual void VisitImmediates(SAstVisitor& Visitor) const
313 {
314 const char* VstMappingTypeString;
315 switch(_VstMappingType)
316 {
317 case EVstMappingType::Ast: VstMappingTypeString = "Ast"; break;
318 case EVstMappingType::AstNonReciprocal: VstMappingTypeString = "AstNonReciprocal"; break;
319 case EVstMappingType::Ir: VstMappingTypeString = "Ir"; break;
320 default: ULANG_UNREACHABLE();
321 };
322 Visitor.VisitImmediate("VstMappingType", VstMappingTypeString);
323 if (_MappedVstNode)
324 {
325 Visitor.VisitImmediate("MappedVstNode", *_MappedVstNode);
326 }
327 }
328
332 virtual void VisitChildren(SAstVisitor& Visitor) const {}
333
339 template<typename FunctionType>
341
342 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
343 // Text methods
344 virtual CUTF8String GetErrorDesc() const = 0;
345
346 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
347 // Syntax <> Semantic Mapping
349
355
361
362 // True if this AstNode is used to represent an IrNode. Needed to disable some asserts and clean up code.
363 // Will be removed when IrNodes have their own type.
364 bool IsIrNode() const
365 {
367 }
368
370 {
372 }
373
374protected:
375
376 friend struct Verse::Vst::Node;
377 // Syntax<>Semantic mapping
379 mutable const Verse::Vst::Node* _MappedVstNode{nullptr};
380};
381
387{
388public:
389
394
395 virtual const CExpressionBase* AsExpression() const override { return this; }
396 virtual CExpressionBase* AsExpression() override { return this; }
397 virtual bool MayHaveAttributes() const override { return false; }
398
400 // True if this expression can be path of a segment. It works at all times, i.e., also before macro expression have been processed.
401 // The MacroSymbols argument is used in the latter case.
402 virtual bool CanBePathSegment(const TMacroSymbols& MacroSymbols) const { return false; }
403 virtual void VisitImmediates(SAstVisitor& Visitor) const override
404 {
406 if (_Report.IsSet())
407 {
408 Visitor.VisitImmediate("ResultType", _Report->ResultType);
409 }
410 }
411
412 // Determines if expression is immediate (completes within the current update/frame) or
413 // async (completes within the current update/frame or later).
414 //
415 // @TODO: SOL-1423, DetermineInvokeTime() re-traverses the expression tree, which could add up time wise
416 // (approaching on n^2) -- there should be a beter way to check this on the initial ProcessExpression()
418
419 // Returns itself or the first async sub-expression or return nullptr if it and all its sub-expressions are immediate.
420 virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const { return nullptr; }
421
422 // Returns whether the expression may fail.
423 virtual bool CanFail(const CAstPackage* Package) const { return false; }
424
425 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
426 // Type methods
427 UE_API virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const;
430
431 bool IsAnalyzed() const { return _Report.IsSet(); }
432
433 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
434 // Comparison
435 static bool BaseCompare(const CExpressionBase& A, const CExpressionBase& B)
436 {
437 return
438 A.GetNodeType() == B.GetNodeType() &&
439 A._Report == B._Report;
440 }
441 virtual bool operator==(const CExpressionBase& Other) const = 0;
442 bool operator!=(const CExpressionBase& Other) const { return !(*this == Other); }
443 static bool IsSubExprEqual(const CExpressionBase* Lhs, const CExpressionBase* Rhs);
444 static bool IsSubExprEqual(const CExpressionBase& Lhs, const CExpressionBase& Rhs);
445 static bool IsSubExprEqual(const TSPtr<CExpressionBase>& Lhs, const TSPtr<CExpressionBase>& Rhs);
446 static bool IsSubExprEqual(const TSRef<CExpressionBase>& Lhs, const TSRef<CExpressionBase>& Rhs);
447 template <typename TRange1, typename TRange2>
448 static bool AreSubExprsEqual(const TRange1&, const TRange2&);
449
450 const CTypeBase* IrGetResultType() const { return _Report ? _Report->ResultType : nullptr; }
452 {
453 if (TypeBase)
454 {
456 }
457 else
458 {
459 _Report.Reset();
460 }
461 }
462protected:
463
464 // Analysis Results
466 {
467 bool operator==(const SAnalysisResult& Other) const { return ResultType == Other.ResultType; }
470 };
471
473
474}; // CExpressionBase
475
476
482{
483public:
484 // Methods
485
491
496
503
504 CExprCompoundBase() = default;
505
506 bool IsEmpty() const { return _SubExprs.IsEmpty(); }
507 int32_t SubExprNum() const { return _SubExprs.Num(); }
508 const uLang::CExpressionBase* GetLastSubExpr() const { return _SubExprs.Last(); }
516 {
517 ULANG_ASSERTF(Index >= 0 && Index < _SubExprs.Num(), "Replacing invalid subexpression index");
518 _SubExprs.ReplaceAt(Move(SubExpr), Index);
519 }
520
521 UE_API virtual bool CanFail(const CAstPackage* Package) const override;
522 UE_API virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override;
523 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.VisitArray("SubExprs", _SubExprs); }
524 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
525
526protected:
527
528 // Internal data
529
531};
532
533
538{
539private:
540 // Operands
543
544public:
545
546 const TSPtr<CExpressionBase>& Lhs() const { return _Lhs; }
547 const TSPtr<CExpressionBase>& Rhs() const { return _Rhs; }
548 TSPtr<CExpressionBase>&& TakeRhs() { return Move(_Rhs); }
551
553
554 virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override { const CExpressionBase* AsyncExpr = _Lhs->FindFirstAsyncSubExpr(Program); return AsyncExpr ? AsyncExpr : _Rhs->FindFirstAsyncSubExpr(Program); }
555 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("Lhs", _Lhs); Visitor.Visit("Rhs", _Rhs); }
556};
557
558
559
560// Note - if these subclasses of CExpressionBase become more sophisticated they should
561// probably be moved to their own files.
562
563
568{
569public:
570 // Methods
571
573
574 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::External; }
575 virtual CUTF8String GetErrorDesc() const override { return "external{}"; }
576 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::External; }
577};
578
579
584{
585public:
586
587 bool _Value;
588
589 UE_API explicit CExprLogic(const CSemanticProgram& Program, bool Value);
590
591 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Literal_Logic; }
592 virtual CUTF8String GetErrorDesc() const override { return _Value ? "true" : "false"; }
593 virtual bool operator==(const CExpressionBase& Other) const override { return BaseCompare(*this, Other) && _Value == static_cast<const CExprLogic&>(Other)._Value; }
594
595 virtual void VisitImmediates(SAstVisitor& Visitor) const override { CExpressionBase::VisitImmediates(Visitor); Visitor.VisitImmediate("Value", _Value); }
596};
597
598
603{
604private:
605 union
606 {
609 };
610 bool _bIsFloat : 1;
611
612public:
613
615 : _IntValue(0)
616 , _bIsFloat(false)
617 {}
618
620
622
623 bool IsFloat() const { return _bIsFloat; }
624 Integer GetIntValue() const { ULANG_ASSERTF(!_bIsFloat, "Float number being treated as integer."); return _IntValue; }
626 Float GetFloatValue() const { ULANG_ASSERTF( _bIsFloat, "Int number being treated as float"); return _FloatValue; }
628
629 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Literal_Number; }
630 virtual CUTF8String GetErrorDesc() const override { return _bIsFloat ? "float literal" : "integer literal"; }
631 virtual bool operator==(const CExpressionBase& Other) const override {
632 return BaseCompare(*this, Other) && this->_IntValue == static_cast<const CExprNumber&>(Other)._IntValue;
633 }
634
635 virtual void VisitImmediates(SAstVisitor& Visitor) const override
636 {
638 if (_bIsFloat)
639 {
640 Visitor.VisitImmediate("FloatValue", _FloatValue);
641 }
642 else
643 {
644 Visitor.VisitImmediate("IntValue", _IntValue);
645 }
646 }
647};
648
649
654{
655public:
656 enum class EType
657 {
660 };
661
664
667 , _Type(Type)
668 {
670 {
671 ULANG_ASSERTF(_CodePoint <= 0xFF, "utf8 code units must be <= 0xFF");
672 }
673 }
674
676 {
677 switch (_Type)
678 {
680 {
681 const UTF8Char CodeUnit = {static_cast<UTF8Char>(_CodePoint)};
682 return CUTF8StringView(&CodeUnit, &CodeUnit + 1);
683 }
685 {
687 return CUTF8StringView(Utf8.Units, Utf8.Units + Utf8.NumUnits);
688 }
689 default:
691 }
692 }
693
694 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Literal_Char; }
695 virtual CUTF8String GetErrorDesc() const override { return "char literal"; }
696 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Literal_Char && _CodePoint == static_cast<const CExprChar&>(Other)._CodePoint; }
697
698 virtual void VisitImmediates(SAstVisitor& Visitor) const override { CExpressionBase::VisitImmediates(Visitor); Visitor.VisitImmediate("CodePoint", static_cast<int64_t>(_CodePoint)); }
699};
700
701
706{
707public:
708 // Note that in the future this (or a related class) may include an array of substrings and sub-expressions for string interpolation.
709
710 // Ready to use string with any escaped characters translated
712
715
716 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Literal_String; }
717 virtual CUTF8String GetErrorDesc() const override { return "string literal"; }
718 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Literal_String && _String == static_cast<const CExprString&>(Other)._String; }
719
720 virtual void VisitImmediates(SAstVisitor& Visitor) const override { CExpressionBase::VisitImmediates(Visitor); Visitor.VisitImmediate("String", _String); }
721};
722
727{
728public:
729 // Ready to use path with any escaped characters translated
731
733 : _Path(Move(Path)) {}
734
735 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Literal_Path; }
736 virtual CUTF8String GetErrorDesc() const override { return "path literal"; }
737 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Literal_Path && _Path == static_cast<const CExprPath&>(Other)._Path; }
738
739 virtual void VisitImmediates(SAstVisitor& Visitor) const override { CExpressionBase::VisitImmediates(Visitor); Visitor.VisitImmediate("Path", _Path); }
740};
741
746{
747public:
749
750 explicit CExprPathPlusSymbol(const CSymbol& Symbol)
751 : _Symbol(Symbol) {}
752
753 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::PathPlusSymbol; }
754 virtual CUTF8String GetErrorDesc() const override { return "path plus symbol"; }
755 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::PathPlusSymbol && _Symbol == static_cast<const CExprPathPlusSymbol&>(Other)._Symbol; }
756};
757
762{
763public:
764
766 : _Context(Move(Context)), _Qualifier(Move(Qualifier))
767 {}
768
769 const TSPtr<CExpressionBase>& Context() const { return _Context; }
770 const TSPtr<CExpressionBase>& Qualifier() const { return _Qualifier; }
771
772 TSPtr<CExpressionBase>&& TakeContext() { return Move(_Context); }
773 TSPtr<CExpressionBase>&& TakeQualifier() { return Move(_Qualifier); }
774
776 {
777 _Context = Move(Context);
778 }
779
781 {
782 _Qualifier = Move(Qualifier);
783 }
784
785 // CAstNode interface.
786 virtual bool MayHaveAttributes() const override { return true; }
787
788 // CExpressionBase interface.
789 virtual bool CanFail(const CAstPackage* Package) const override { return _Context.IsValid() && _Context->CanFail(Package); }
790 virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override
791 {
792 const CExpressionBase* AsyncExpr = nullptr;
793 if (_Context) { AsyncExpr = _Context->FindFirstAsyncSubExpr(Program); }
794 if (!AsyncExpr && _Qualifier) { AsyncExpr = _Qualifier->FindFirstAsyncSubExpr(Program); }
795 return AsyncExpr;
796 }
797 virtual bool operator==(const CExpressionBase& Other) const override
798 {
800 && _Context == static_cast<const CExprIdentifierBase&>(Other)._Context
801 && _Qualifier == static_cast<const CExprIdentifierBase&>(Other)._Qualifier;
802 }
803
804 virtual void VisitChildren(SAstVisitor& Visitor) const override
805 {
806 Visitor.Visit("Context", _Context);
807 }
808
810 virtual const CDefinition* IdentifierDefinition() const
811 {
812 return nullptr;
813 }
814
816 virtual const CExprIdentifierBase* AsIdentifierBase() const override { return this; }
817
818private:
819 TSPtr<CExpressionBase> _Context;
820 TSPtr<CExpressionBase> _Qualifier;
821};
822
828{
829public:
830 // Specific enumerator this represents - note that it also contains a pointer to its enumeration type.
832
837
838 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Literal_Enum; }
839 virtual CUTF8String GetErrorDesc() const override { return "enumerator"; }
840 UE_API virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override;
841 virtual bool operator==(const CExpressionBase& Other) const override { return CExprIdentifierBase::operator==(Other) && _Enumerator == static_cast<const CExprEnumLiteral&>(Other)._Enumerator; }
842 UE_API virtual void VisitImmediates(SAstVisitor& Visitor) const override;
843 virtual const CDefinition* IdentifierDefinition() const override;
844};
845
850{
851public:
852
854
860
861 const CTypeType* GetTypeType() const
862 {
863 return static_cast<const CTypeType*>(_Report->ResultType);
864 }
865
866 const CTypeBase* GetType() const
867 {
868 const CTypeType* TypeType = GetTypeType();
869 return TypeType->PositiveType();
870 }
871
872 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Literal_Type; }
873 virtual CUTF8String GetErrorDesc() const override { return "type"; }
874 virtual bool operator==(const CExpressionBase& Other) const override { return GetNodeType() == Other.GetNodeType() && IsSubExprEqual(_AbstractValue, static_cast<const CExprType&>(Other)._AbstractValue); }
875 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("AbstractValue", _AbstractValue); }
876};
877
882{
883public:
884
889
890 const TSRef<CExpressionBase>& Domain() const { return _Domain; }
891 const TSRef<CExpressionBase>& Range () const { return _Range ; }
892
895
896 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Literal_Function; }
897 virtual CUTF8String GetErrorDesc() const override { return "function literal"; }
898 virtual bool operator==(const CExpressionBase& Other) const override
899 {
900 return GetNodeType() == Other.GetNodeType()
901 && IsSubExprEqual(_Domain, static_cast<const CExprFunctionLiteral&>(Other)._Domain)
902 && IsSubExprEqual(_Range, static_cast<const CExprFunctionLiteral&>(Other)._Range);
903 }
904 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("Domain", _Domain); Visitor.Visit("Range", _Range); }
905
906private:
909};
910
915{
916public:
919 {
920 SetResultType(Type);
921 }
922
923 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Identifier_Self; }
924 virtual CUTF8String GetErrorDesc() const override { return "'Self'"; }
925 virtual const CDefinition* IdentifierDefinition() const override
926 {
927 // TODO: (yiliang.siew) Implement this.
928 return nullptr;
929 }
930};
931
934{
935public:
936 CExprLocal(const CScope& Scope) : CExprIdentifierBase(), _Scope(Scope)
937 {}
938
939 virtual EAstNodeType GetNodeType() const override
940 {
941 return EAstNodeType::Identifier_Local;
942 }
943
944 virtual CUTF8String GetErrorDesc() const override
945 {
946 return "'(local:)'";
947 }
948
949 const CScope& GetScope() const
950 {
951 return _Scope;
952 }
953
954private:
955 const CScope& _Scope;
956};
957
963{
964public:
966
968 : CExprIdentifierBase(nullptr, nullptr)
969 , _Symbol(Symbol)
970 {
971 SetResultType(Type);
972 }
973
974 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Identifier_BuiltInMacro; }
975 virtual CUTF8String GetErrorDesc() const override { return _Symbol.AsStringView(); }
976 virtual bool operator==(const CExpressionBase& Other) const override { return CExprIdentifierBase::operator==(Other) && _Symbol == static_cast<const CExprIdentifierBuiltInMacro&>(Other)._Symbol; }
977 virtual void VisitImmediates(SAstVisitor& Visitor) const override { CExpressionBase::VisitImmediates(Visitor); Visitor.VisitImmediate("Symbol", _Symbol.AsStringView()); }
978};
979
984{
985public:
987
988 // Used for some internal compiler-generated code that is
989 // allowed to lookup identifiers that are otherwise restricted
990 // (private, internal, ...)
992
994
1001
1002 // Use with extreme caution! Setting this allows this identifier lookup to succeed where it
1003 // would otherwise fail due to not having permission
1005
1006 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Identifier_Unresolved; }
1007 virtual bool MayHaveAttributes() const override { return true; }
1008 virtual CUTF8String GetErrorDesc() const override { return _Symbol.AsString(); }
1009 virtual bool operator==(const CExpressionBase& Other) const override { return CExprIdentifierBase::operator==(Other) && _Symbol == static_cast<const CExprIdentifierUnresolved&>(Other)._Symbol; }
1010 virtual void VisitImmediates(SAstVisitor& Visitor) const override { CExpressionBase::VisitImmediates(Visitor); Visitor.VisitImmediate("Symbol", _Symbol.AsStringView()); }
1011};
1012
1013
1018{
1019public:
1020
1022
1024 UE_API const CClass* GetClass(const CSemanticProgram& Program) const;
1025
1026 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Identifier_Class; }
1027 UE_API virtual CUTF8String GetErrorDesc() const override;
1028};
1029
1034{
1035public:
1036
1038
1039 UE_API CModule const* GetModule(const CSemanticProgram& Program) const;
1040
1041 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Identifier_Module; }
1042 virtual CUTF8String GetErrorDesc() const override { return "module identifier"; }
1043};
1044
1049{
1050public:
1051
1053
1058
1059 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Identifier_ModuleAlias; }
1060 virtual CUTF8String GetErrorDesc() const override { return "module alias identifier"; }
1061};
1062
1068{
1069public:
1070
1076
1079
1080 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Identifier_Enum; }
1081 virtual CUTF8String GetErrorDesc() const override { return "enum type identifier"; }
1082};
1083
1089{
1090public:
1091
1092 // Identified type
1093
1099
1102
1103 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Identifier_Interface; }
1104 virtual CUTF8String GetErrorDesc() const override { return "interface type identifier"; }
1105};
1106
1107
1112{
1113public:
1114
1115 // The variable this expression is referring to
1117
1119
1120 virtual const CSymbol& GetName() const { return _DataDefinition.GetName(); }
1121
1122 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Identifier_Data; }
1123 virtual CUTF8String GetErrorDesc() const override { return _DataDefinition.AsNameStringView(); }
1124 UE_API virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override;
1125 virtual bool operator==(const CExpressionBase& Other) const override { return CExprIdentifierBase::operator==(Other) && &_DataDefinition == &static_cast<const CExprIdentifierData&>(Other)._DataDefinition; }
1126 virtual void VisitImmediates(SAstVisitor& Visitor) const override { CExpressionBase::VisitImmediates(Visitor); Visitor.VisitImmediate("DataDefinition", _DataDefinition); }
1127};
1128
1133{
1134public:
1135
1136 // The type alias this expression is referring to
1138
1140
1141 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Identifier_TypeAlias; }
1142 virtual CUTF8String GetErrorDesc() const override { return "type alias identifier"; }
1143 UE_API virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override;
1144 virtual bool operator==(const CExpressionBase& Other) const override { return CExprIdentifierBase::operator==(Other) && &_TypeAlias == &static_cast<const CExprIdentifierTypeAlias&>(Other)._TypeAlias; }
1145 UE_API virtual void VisitImmediates(SAstVisitor& Visitor) const override;
1146};
1147
1152{
1153public:
1154
1155 // The type variable this expression is referring to
1157
1159
1160 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Identifier_TypeVariable; }
1161 virtual CUTF8String GetErrorDesc() const override { return "type variable identifier"; }
1162 virtual bool operator==(const CExpressionBase& Other) const override { return CExprIdentifierBase::operator==(Other) && &_TypeVariable == &static_cast<const CExprIdentifierTypeVariable&>(Other)._TypeVariable; }
1163 UE_API virtual void VisitImmediates(SAstVisitor& Visitor) const override;
1164};
1165
1170{
1171public:
1172
1174 // `CFlowType`s created as part of instantiating `_Function`.
1179
1181 const CFunction& Function,
1182 const CTypeBase* ResultType,
1183 TSPtr<CExpressionBase>&& Context = nullptr,
1185 : CExprIdentifierFunction(Function, {}, ResultType, nullptr, nullptr, Move(Context), Move(Qualifier), false)
1186 {}
1187
1188 UE_API CExprIdentifierFunction(
1189 const CFunction& Function,
1191 const CTypeBase* ResultType,
1192 const CTypeBase* ConstructorNegativeReturnType,
1193 const CCaptureScope* ConstructorCaptureScope,
1196 bool bSuperQualified);
1197
1198 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Identifier_Function; }
1199 virtual CUTF8String GetErrorDesc() const override { return "function identifier"; }
1200 virtual bool operator==(const CExpressionBase& Other) const override { return CExprIdentifierBase::operator==(Other) && &_Function == &static_cast<const CExprIdentifierFunction&>(Other)._Function; }
1201 UE_API virtual void VisitImmediates(SAstVisitor& Visitor) const override;
1202};
1203
1208{
1209public:
1210
1215
1216 // Used for some internal compiler-generated code that is
1217 // allowed to lookup identifiers that are otherwise restricted
1218 // (private, internal, ...)
1220
1223 bool bConstructor,
1224 const CSymbol Symbol,
1228 const CTypeBase* Type);
1229
1230 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Identifier_OverloadedFunction; }
1231 virtual CUTF8String GetErrorDesc() const override { return "overloaded function identifier"; }
1232 virtual bool operator==(const CExpressionBase& Other) const override
1233 {
1237 }
1238 UE_API virtual void VisitImmediates(SAstVisitor& Visitor) const override;
1239};
1240
1249{
1250public:
1258
1260
1261 const TSPtr<CExpressionBase>& Element() const { return _Element; }
1264
1266 CSymbol GetName() const { return _Name; }
1267 bool IsNamed() const { return !_Name.IsNull(); }
1268
1272
1273 const TSPtr<CExpressionBase>& Value() const { return _Value; }
1276
1277 virtual bool CanBePathSegment(const TMacroSymbols& MacroSymbols) const override
1278 {
1279 return Value() && Value()->CanBePathSegment(MacroSymbols);
1280 }
1281
1282 // CAstNode interface.
1283 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Definition; }
1284 virtual CUTF8String GetErrorDesc() const override { return CUTF8String("definition"); }
1285 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("Element", _Element); Visitor.Visit("ValueDomain", _ValueDomain); Visitor.Visit("Value", _Value); }
1286 virtual bool MayHaveAttributes() const override { return true; }
1287
1288 // CExpressionBase interface.
1289 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
1290 UE_API virtual bool CanFail(const CAstPackage* Package) const override;
1291 UE_API virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override;
1292
1293protected:
1297 CSymbol _Name; // If non-null, then usage requires being ?named and presence of `_Value` indicates that it has a default
1298};
1299
1300
1302{
1303 None = 0x1 << 0,
1304 Of = 0x1 << 1,
1305 Do = 0x1 << 2
1306};
1307
1308constexpr EMacroClauseTag operator| (EMacroClauseTag A, EMacroClauseTag B) { return static_cast<EMacroClauseTag>(static_cast<uint32_t>(A) | static_cast<uint32_t>(B)); }
1309constexpr bool HasAnyTags(EMacroClauseTag A, EMacroClauseTag B) { return 0 != (static_cast<uint32_t>(A) & static_cast<uint32_t>(B)); }
1311{
1312 return RequiredTags == static_cast<EMacroClauseTag>(static_cast<uint32_t>(A) & static_cast<uint32_t>(RequiredTags));
1313}
1315{
1316 switch(Tag)
1317 {
1318 case EMacroClauseTag::None: return "None";
1319 case EMacroClauseTag::Of: return "Of";
1320 case EMacroClauseTag::Do: return "Do";
1321 default: ULANG_UNREACHABLE();
1322 };
1323}
1325{
1326 switch(Form)
1327 {
1328 case Verse::Vst::Clause::EForm::Synthetic: return "Synthetic";
1329 case Verse::Vst::Clause::EForm::NoSemicolonOrNewline: return "NoSemicolonOrNewline";
1330 case Verse::Vst::Clause::EForm::HasSemicolonOrNewline: return "HasSemicolonOrNewline";
1331 case Verse::Vst::Clause::EForm::IsAppendAttributeHolder: return "IsAppendAttributeHolder";
1332 case Verse::Vst::Clause::EForm::IsPrependAttributeHolder: return "IsPrependAttributeHolder";
1333 default: ULANG_UNREACHABLE();
1334 };
1335}
1336
1339{
1340
1341public:
1342
1345 {
1346 public:
1348
1350 : _Tag(Tag)
1351 , _Form(Form)
1352 , _Exprs(Move(Exprs))
1353 {}
1354
1355 EMacroClauseTag Tag() const { return _Tag; }
1356 EForm Form() const { return _Form; }
1357 TArray<TSRef<CExpressionBase>> const & Exprs() const { return _Exprs; }
1358 TArray<TSRef<CExpressionBase>> & Exprs() { return _Exprs; }
1359
1360
1361 private:
1362 EMacroClauseTag _Tag;
1365 };
1366
1367
1368public:
1370 : _Name(Move(Name))
1371 , _Clauses()
1372 {
1373 if (NumClauses != 0)
1374 {
1375 _Clauses.Reserve(NumClauses);
1376 }
1377 }
1378
1380 {
1381 _Clauses.Add(Move(Clause));
1382 }
1383
1384 TSRef<CExpressionBase> const & Name() const { return _Name; }
1385 TSRef<CExpressionBase> & Name() { return _Name; }
1386 void SetName(TSRef<CExpressionBase>&& NewName) { _Name = Move(NewName); }
1387
1388 TSRef<CExpressionBase>&& TakeName() { return Move(_Name); }
1389
1390 TArray<CClause> const& Clauses() const { return _Clauses; }
1391 TArray<CClause> & Clauses() { return _Clauses; }
1392
1393 TArray<CClause>&& TakeClauses() { return Move(_Clauses); }
1394
1395 virtual bool CanBePathSegment(const TMacroSymbols& MacroSymbols) const override {
1396 CSymbol Symbol;
1397 if (_Name->GetNodeType() == EAstNodeType::Identifier_BuiltInMacro) {
1398 Symbol = static_cast<CExprIdentifierBuiltInMacro*>(_Name.Get())->_Symbol;
1399 }
1400 else if (_Name->GetNodeType() == EAstNodeType::Identifier_Unresolved)
1401 {
1402 Symbol = static_cast<CExprIdentifierUnresolved*>(_Name.Get())->_Symbol;
1403 }
1404 if (!Symbol.IsNull())
1405 {
1407 {
1408 if (MacroSymbol == Symbol)
1409 {
1410 return true;
1411 }
1412 }
1413 }
1414 return false;
1415 }
1416private:
1417 // Inherited via CExpressionBase
1418 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::MacroCall; }
1419 virtual CUTF8String GetErrorDesc() const override { return "macro invocation"; }
1420 virtual bool operator==(const CExpressionBase& Other) const override { return BaseCompare(*this,Other); }
1421
1422 virtual void VisitChildren(SAstVisitor& Visitor) const override
1423 {
1424 Visitor.Visit("Name", _Name);
1425 Visitor.BeginArray("Clauses", _Clauses.Num());
1426 for (const CClause& Clause : _Clauses)
1427 {
1428 Visitor.VisitArray("Exprs", Clause.Exprs());
1429 }
1430 Visitor.EndArray();
1431 }
1432 virtual void VisitImmediates(SAstVisitor& Visitor) const override
1433 {
1435 Visitor.BeginArray("Clauses", _Clauses.Num());
1436 for (const CClause& Clause : _Clauses)
1437 {
1438 Visitor.VisitImmediate("Tag", MacroClauseTagAsCString(Clause.Tag()));
1439 Visitor.VisitImmediate("Form", MacroClauseFormAsCString(Clause.Form()));
1440 }
1441 Visitor.EndArray();
1442 }
1443
1444private:
1446 TArray<CClause> _Clauses;
1447};
1448
1449
1454{
1455public:
1456
1458 {
1459 Undefined,
1462 };
1464
1465 template<typename TCallee, typename TArgument>
1468 , _Callee(ForwardArg<TCallee>(Callee))
1469 , _Argument(ForwardArg<TArgument>(Argument))
1470 {}
1471
1472 template<typename TCallee, typename TArgument>
1474 TCallee&& Callee,
1475 TArgument&& Argument,
1477 const CTypeBase* ResultType)
1479 {
1481 SetResultType(ResultType);
1482 }
1483
1485 : _Argument(Move(Argument))
1486 {}
1487
1489 : _Callee(Move(Rhs._Callee))
1490 , _Argument(Move(Rhs._Argument))
1491 , _ResolvedCalleeType(Rhs._ResolvedCalleeType)
1492 {}
1493
1494 const TSPtr<CExpressionBase>& GetCallee() const { return _Callee; }
1495 TSPtr<CExpressionBase>&& TakeCallee() { return Move(_Callee); }
1497
1498 const TSPtr<CExpressionBase>& GetArgument() const { return _Argument; }
1499 TSPtr<CExpressionBase>&& TakeArgument() { return Move(_Argument); }
1500 void SetArgument(TSPtr<CExpressionBase>&& Arguments) { _Argument = Move(Arguments); }
1501
1504
1506 UE_API virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override;
1507
1508 UE_API virtual bool CanFail(const CAstPackage* Package) const override;
1509 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_Invocation; }
1510 virtual CUTF8String GetErrorDesc() const override { return "invocation"; }
1511 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("Callee", _Callee); Visitor.Visit("Argument", _Argument); }
1512 virtual void VisitImmediates(SAstVisitor& Visitor) const override
1513 {
1515 const char* BracketStyleString;
1516 switch(_CallsiteBracketStyle)
1517 {
1518 case EBracketingStyle::Undefined: BracketStyleString = "Undefined"; break;
1519 case EBracketingStyle::Parentheses: BracketStyleString = "Parentheses"; break;
1520 case EBracketingStyle::SquareBrackets: BracketStyleString = "SquareBrackets"; break;
1521 default: ULANG_UNREACHABLE();
1522 };
1523 Visitor.VisitImmediate("CallsiteBracketStyle", BracketStyleString);
1524
1525 if (_ResolvedCalleeType)
1526 {
1527 Visitor.VisitImmediate("ResolvedCalleeType", _ResolvedCalleeType);
1528 }
1529 }
1530 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
1531
1532private:
1533 // Callee subexpression - The function to call.
1534 TSPtr<CExpressionBase> _Callee;
1535
1536 // Argument - possibly a tuple of expressions, included named expressions
1537 TSPtr<CExpressionBase> _Argument;
1538
1539 // More often than not, the function type could be inferred from _Callee, but in the case of generics,
1540 // you want to store the function type of the resolved generic.
1541 const CFunctionType* _ResolvedCalleeType{nullptr};
1542};
1543
1544VERSECOMPILER_API const CExprIdentifierFunction* GetConstructorInvocationCallee(const CExprInvocation&);
1545
1546VERSECOMPILER_API const CExprIdentifierFunction* GetConstructorInvocationCallee(const CExpressionBase&);
1547
1548VERSECOMPILER_API bool IsConstructorInvocation(const CExprInvocation&);
1549
1550VERSECOMPILER_API bool IsConstructorInvocation(const CExpressionBase&);
1551
1556{
1557public:
1558
1559 // Expression that results in tuple to access element from
1561
1562 // Index resolved from `_ElemIdxExpr`
1564
1565 // Expression used to determine index - currently must be an integer literal CExprNumber.
1566 // `_ElemIdx` is resolved form. This is stored just to track source information in VST nodes.
1568
1569 CExprTupleElement(CExprInvocation& Invocation) : _TupleExpr(Invocation.TakeCallee()), _ElemIdx(-1) { Invocation.GetMappedVstNode()->AddMapping(this); }
1571
1572 UE_API virtual bool CanFail(const CAstPackage* Package) const override;
1573 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("TupleExpr", _TupleExpr); Visitor.Visit("ElemIdxExpr", _ElemIdxExpr); }
1574 virtual void VisitImmediates(SAstVisitor& Visitor) const override { CExpressionBase::VisitImmediates(Visitor); Visitor.VisitImmediate("ElemIdx", _ElemIdx); }
1575 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_TupleElement; }
1576 virtual CUTF8String GetErrorDesc() const override { return "tuple element access"; }
1577 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
1578};
1579
1580
1585{
1586public:
1588
1592
1593 EOp Op() const { return _Op; }
1594 const TSPtr<CExpressionBase>& Lhs() const { return _Lhs; }
1595 const TSPtr<CExpressionBase>& Rhs() const { return _Rhs; }
1596
1599
1602
1603 //~ Begin CExpressionBase interface
1604 virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override { const CExpressionBase* AsyncExpr = _Lhs->FindFirstAsyncSubExpr(Program); return AsyncExpr ? AsyncExpr : _Rhs->FindFirstAsyncSubExpr(Program); }
1605 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Assignment; }
1606 virtual CUTF8String GetErrorDesc() const override { return "assignment"; }
1607
1608 virtual bool CanFail(const CAstPackage* Package) const override { return _Lhs->CanFail(Package) || _Rhs->CanFail(Package); }
1609 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("Lhs", _Lhs); Visitor.Visit("Rhs", _Rhs); }
1610 virtual void VisitImmediates(SAstVisitor& Visitor) const override { CExpressionBase::VisitImmediates(Visitor); Visitor.VisitImmediate("Op", Verse::Vst::AssignmentOpAsCString(_Op)); }
1611 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
1612 //~ End CExpressionBase interface
1613
1614private:
1615 const EOp _Op;
1618};
1619
1626VERSECOMPILER_API bool HasImplicitClassSelf(const CExprIdentifierData* Expr /* can be null */);
1627VERSECOMPILER_API bool IsClassMemberAccess(const CExprIdentifierData* Expr /* can be null */);
1628
1629
1634{
1635public:
1641
1642 const TSPtr<CExpressionBase>& Operand() const { return _Operand; }
1643 TSPtr<CExpressionBase>&& TakeOperand() { return Move(_Operand); }
1645
1646 virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override { return _Operand.IsValid() ? _Operand->FindFirstAsyncSubExpr(Program) : nullptr; }
1647 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("Operand", _Operand); }
1648
1649private:
1650
1651 TSPtr<CExpressionBase> _Operand;
1652};
1653
1654
1656{
1657public:
1658 enum class EOp
1659 {
1660 Negate
1661 };
1662
1664 : CExprInvocation(Move(Rhs))
1665 , _Op(Op)
1666 {
1667 }
1668
1669 TSRef<CExpressionBase> Operand() const { return GetArgument().AsRef(); }
1672
1673 EOp Op() const { return _Op; }
1674
1675private:
1676 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_UnaryArithmetic; }
1677 virtual bool CanFail(const CAstPackage* Package) const override { return false; }
1678 virtual CUTF8String GetErrorDesc() const override { return "unary negation"; }
1679 virtual bool operator==(const CExpressionBase& Other) const override { return CExprInvocation::operator==(Other); }
1680
1681 EOp _Op;
1682};
1683
1684
1686{
1687public:
1688 enum class EOp
1689 {
1690 Add,
1691 Sub,
1692 Mul,
1693 Div
1694 };
1695
1697 : CExprInvocation(Move(Argument))
1698 , _Op(Op)
1699 {
1700 }
1701
1702 EOp Op() const { return _Op; }
1703
1704private:
1705 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_BinaryArithmetic; }
1706 virtual CUTF8String GetErrorDesc() const override
1707 {
1708 switch (_Op)
1709 {
1710 case EOp::Add: return "binary addition";
1711 case EOp::Sub: return "binary subtraction";
1712 case EOp::Mul: return "binary multiplication";
1713 case EOp::Div: return "binary division";
1714 default: ULANG_UNREACHABLE();
1715 };
1716 }
1717 virtual bool operator==(const CExpressionBase& Other) const override { return CExprInvocation::operator==(Other) && _Op == static_cast<const CExprBinaryArithmetic&>(Other)._Op; }
1718 virtual void VisitImmediates(SAstVisitor& Visitor) const override
1719 {
1721 const char* OpString;
1722 switch(_Op)
1723 {
1724 case EOp::Add: OpString = "Add"; break;
1725 case EOp::Sub: OpString = "Sub"; break;
1726 case EOp::Mul: OpString = "Mul"; break;
1727 case EOp::Div: OpString = "Div"; break;
1728 default: ULANG_UNREACHABLE();
1729 };
1730 Visitor.VisitImmediate("Op", OpString);
1731 }
1732
1733 EOp _Op;
1734};
1735
1740{
1741public:
1742
1744
1745 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_ShortCircuitAnd; }
1746 virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override { return Rhs()->GetResultType(Program); }
1747 virtual bool CanFail(const CAstPackage* Package) const override { return true; }
1748 virtual CUTF8String GetErrorDesc() const override { return "logical '&&'"; }
1749 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
1750};
1751
1752
1757{
1758public:
1759
1762 {
1763 if (JoinType != nullptr)
1764 {
1766 }
1767 }
1768
1769 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_ShortCircuitOr; }
1770 virtual bool CanFail(const CAstPackage* Package) const override { return Rhs()->CanFail(Package); }
1771 virtual CUTF8String GetErrorDesc() const override { return "logical '||'"; }
1772 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
1773
1774private:
1775
1776};
1777
1778
1783{
1784public:
1785
1787
1788 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_LogicalNot; }
1789 UE_API virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override;
1790 virtual bool CanFail(const CAstPackage* Package) const override { return true; }
1791 virtual CUTF8String GetErrorDesc() const override { return "logical 'not'"; }
1792 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
1793};
1794
1795
1800{
1801public:
1803
1810
1811 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_Comparison; }
1812 UE_API virtual CUTF8String GetErrorDesc() const override;
1813 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
1814 virtual void VisitImmediates(SAstVisitor& Visitor) const override { CExpressionBase::VisitImmediates(Visitor); Visitor.VisitImmediate("Op", Verse::Vst::BinaryCompareOpAsCString(_Op)); }
1815
1816 EOp Op() const { return _Op; }
1817
1818private:
1819 EOp _Op;
1820};
1821
1822
1827{
1828public:
1829
1835
1836 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_QueryValue; }
1837 virtual CUTF8String GetErrorDesc() const override { return "postfix '?' operator"; }
1838};
1839
1840
1845{
1846public:
1847
1853
1855 {
1857 return &(MyResultType->GetNormalType().AsChecked<COptionType>());
1858 }
1859
1860 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_MakeOption; }
1861 virtual bool CanFail(const CAstPackage* Package) const override { return false; }
1862 virtual CUTF8String GetErrorDesc() const override { return "option value constructor"; }
1863 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
1864};
1865
1866
1872{
1873public:
1875
1880
1881 //~ Begin CExpressionBase interface
1882 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_MakeArray; }
1883 virtual CUTF8String GetErrorDesc() const override { return "array value"; }
1884 //~ End CExpressionBase interface
1885};
1886
1892{
1893public:
1895
1897 {
1899 }
1900
1901 //~ Begin CExpressionBase interface
1902 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_MakeMap; }
1903 virtual CUTF8String GetErrorDesc() const override { return "map value"; }
1904 UE_API virtual bool CanFail(const CAstPackage* Package) const override;
1905 //~ End CExpressionBase interface
1906};
1907
1912{
1913public:
1915
1920
1921 //~ Begin CExpressionBase interface
1922 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_MakeTuple; }
1923 virtual CUTF8String GetErrorDesc() const override { return "tuple value"; }
1924 //~ End CExpressionBase interface
1925};
1926
1927
1932{
1933public:
1936
1938 : _Lhs(Move(Lhs))
1939 , _Rhs(Move(Rhs))
1940 {}
1941
1942 void SetLhs(TSRef<CExpressionBase>&& Lhs) { _Lhs = Move(Lhs); }
1943 void SetRhs(TSRef<CExpressionBase>&& Rhs) { _Rhs = Move(Rhs); }
1944
1945 //~ Begin CExpressionBase interface
1946 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_MakeRange; }
1947 virtual bool CanFail(const CAstPackage* Package) const override { return _Lhs->CanFail(Package) || _Rhs->CanFail(Package); }
1948 virtual CUTF8String GetErrorDesc() const override { return "range constructor"; }
1949 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
1950 //~ End CExpressionBase interface
1951
1952 virtual void VisitChildren(SAstVisitor& Visitor) const override
1953 {
1954 Visitor.Visit("Lhs", _Lhs);
1955 Visitor.Visit("Rhs", _Rhs);
1956 }
1957};
1958
1959
1964{
1965public:
1967 const bool _bIsFallible;
1970
1971 UE_API CExprInvokeType(const CTypeBase* NegativeType, const CTypeBase* PositiveType, bool bIsFallible, TSPtr<CExpressionBase>&& TypeAst, TSRef<CExpressionBase>&& Argument);
1972
1973 //~ Begin CExpressionBase interface
1974 UE_API virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override;
1975 virtual bool CanFail(const CAstPackage* Package) const override { return _bIsFallible || _Argument->CanFail(Package); }
1976 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_Type; }
1977 virtual CUTF8String GetErrorDesc() const override { return "type invocation"; }
1978 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
1979 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("TypeAst", _TypeAst); Visitor.Visit("Argument", _Argument); }
1980 virtual void VisitImmediates(SAstVisitor& Visitor) const override
1981 {
1983 Visitor.VisitImmediate("NegativeType", _NegativeType);
1984 Visitor.VisitImmediate("bIsFallible", _bIsFallible);
1985 }
1986 //~ End CExpressionBase interface
1987};
1988
1989
1994{
1995public:
1998 , _bWritable(bWritable)
1999 {
2000 }
2001
2002 //~ Begin CExpressionBase interface
2003 virtual bool CanFail(const CAstPackage* Package) const override { return Operand()->CanFail(Package); }
2004 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_PointerToReference; }
2005 virtual CUTF8String GetErrorDesc() const override { return "pointer to reference"; }
2006 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
2007 UE_API virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override;
2008 //~ End CExpressionBase interface
2009
2010private:
2011 bool _bWritable;
2012};
2013
2018{
2019public:
2024
2031
2032 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_Set; }
2033 virtual bool CanFail(const CAstPackage* Package) const override { return Operand()->CanFail(Package); }
2034 virtual CUTF8String GetErrorDesc() const override { return "set"; }
2035 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
2036
2039};
2040
2045{
2046public:
2049
2051 : CExpressionBase(PointerType)
2053 , _Value(Move(Value))
2054 {
2055 }
2056
2057 //~ Begin CExpressionBase interface
2058 virtual bool CanFail(const CAstPackage* Package) const override { return _Value->CanFail(Package); }
2059 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_NewPointer; }
2060 virtual CUTF8String GetErrorDesc() const override { return "pointer new"; }
2061 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
2062 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("Value", _Value); }
2063 //~ End CExpressionBase interface
2064};
2065
2070{
2071public:
2073
2074 //~ Begin CExpressionBase interface
2075 virtual bool CanFail(const CAstPackage* Package) const override { return Operand()->CanFail(Package); }
2076 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_ReferenceToValue; }
2077 virtual CUTF8String GetErrorDesc() const override { return "convert reference to value"; }
2078 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Invoke_ReferenceToValue && (*this) == static_cast<const CExprUnaryOp&>(Other); }
2079 //~ End CExpressionBase interface
2080};
2081
2087{
2088public:
2089 // The scope containing locals for this block
2091
2092 // Methods
2093
2095
2096 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Flow_CodeBlock; }
2097 virtual CUTF8String GetErrorDesc() const override { return "code block"; }
2098 UE_API virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override;
2099};
2100
2102{
2104 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Flow_Let; }
2105 virtual CUTF8String GetErrorDesc() const override { return "let"; }
2106 UE_API virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override;
2107};
2108
2113{
2114public:
2115
2122
2123 const TSPtr<CExpressionBase>& Result() const { return _Result; }
2125
2126 const CFunction* Function() const { return _Function; }
2127 void SetFunction(const CFunction* Function) { _Function = Function; }
2128
2129 virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override { return _Result.IsValid() ? _Result->FindFirstAsyncSubExpr(Program) : nullptr; }
2130 virtual bool CanFail(const CAstPackage* Package) const override { return _Result.IsValid() && _Result->CanFail(Package); }
2131 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Flow_Return; }
2132 virtual CUTF8String GetErrorDesc() const override { return "return"; }
2133 UE_API virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override;
2134 virtual bool MayHaveAttributes() const override { return true; }
2135
2136 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("Result", _Result); }
2137 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Flow_Return && IsSubExprEqual(_Result, static_cast<const CExprReturn&>(Other)._Result); }
2138
2139private:
2140
2141 // Result expression
2142 TSPtr<CExpressionBase> _Result;
2143
2144 // The function being returned from.
2145 const CFunction* _Function{nullptr};
2146};
2147
2148
2153{
2154public:
2155
2157 : _Condition(Move(Condition))
2158 , _ThenClause(Move(ThenClause))
2159 , _ElseClause(Move(ElseClause))
2160 {}
2161
2162 const TSRef<CExprCodeBlock>& GetCondition() const { return _Condition; }
2163 void SetCondition(TSRef<CExprCodeBlock>&& Condition) { _Condition = Move(Condition); }
2164
2165 const TSPtr<CExpressionBase>& GetThenClause() const { return _ThenClause; }
2167
2168 const TSPtr<CExpressionBase>& GetElseClause() const { return _ElseClause; }
2170
2171 UE_API virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override;
2172 UE_API virtual bool CanFail(const CAstPackage* Package) const override;
2173 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Flow_If; }
2174 virtual CUTF8String GetErrorDesc() const override { return "if"; }
2175 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("Condition", _Condition); Visitor.Visit("ThenClause", _ThenClause); Visitor.Visit("ElseClause", _ElseClause); }
2176 virtual void VisitImmediates(SAstVisitor& Visitor) const override { CExpressionBase::VisitImmediates(Visitor); Visitor.VisitImmediate("bIsFilter", _bIsFilter); }
2177 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
2178
2179 // If can be used as a filter in a for(..) { }. Code generation need to know.
2180 bool _bIsFilter{ false };
2181private:
2182
2183 TSRef<CExprCodeBlock> _Condition;
2184 TSPtr<CExpressionBase> _ThenClause;
2185 TSPtr<CExpressionBase> _ElseClause;
2186};
2187
2188
2193// Note that CExprSyncIterated, CExprRushIterated and CExprRaceIterated are subclasses
2194{
2195public:
2197
2198 void SetBody(TSPtr<CExpressionBase>&& Body) { _Body = Move(Body); }
2200
2201 UE_API virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override;
2202 virtual bool CanFail(const CAstPackage* Package) const override { return _Body->CanFail(Package); }
2203 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Flow_Iteration; }
2204 virtual CUTF8String GetErrorDesc() const override { return "for"; }
2205 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.VisitArray("Filters", _Filters); Visitor.Visit("Body", _Body); }
2206 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
2207
2208public:
2209 // The scope containing the variables used for iterating
2211
2212 // The "filters" that are used
2214
2215 // Expression to evaluate for every iteration that gets past the filters step
2217};
2218
2219
2224{
2225public:
2226 virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override { return this; }
2227};
2228
2229
2234{
2235public:
2236 virtual CUTF8String GetErrorDesc() const override { return "sync(:){}"; }
2237 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Concurrent_SyncIterated; }
2238};
2239
2240
2245{
2246public:
2247 virtual CUTF8String GetErrorDesc() const override { return "rush(:){}"; }
2248 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Concurrent_RushIterated; }
2249};
2250
2251
2256{
2257public:
2258 virtual CUTF8String GetErrorDesc() const override { return "race(:){}"; }
2259 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Concurrent_RaceIterated; }
2260};
2261
2262
2265{
2266public:
2267
2268 // Metatype of the actual type formed.
2269 const CTypeType* _TypeType{nullptr};
2270
2271 virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override { return nullptr; }
2272 virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override { return _TypeType; }
2273 virtual void VisitImmediates(SAstVisitor& Visitor) const override { CExpressionBase::VisitImmediates(Visitor); Visitor.VisitImmediate("TypeType", _TypeType); }
2274};
2275
2276
2278{
2279public:
2280
2282
2283 const TSRef<CExpressionBase>& GetInnerTypeAst() const { return _InnerTypeAst; }
2285
2286 // CExpressionBase interface.
2287 virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override { return _InnerTypeAst->FindFirstAsyncSubExpr(Program); }
2288
2289 // CAstNode interface.
2290 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("InnerTypeAst", _InnerTypeAst); }
2291
2292private:
2293
2294 TSRef<CExpressionBase> _InnerTypeAst;
2295};
2296
2297
2299{
2300public:
2301
2303
2304 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_ArrayFormer; }
2305 virtual CUTF8String GetErrorDesc() const override { return "array type"; }
2306 bool operator==(const CExpressionBase& Other) const override { return false; }
2307
2309 {
2310 ULANG_ASSERTF(_TypeType, "GetArrayType called on unanalyzed expression");
2312 }
2313};
2314
2316{
2317public:
2318
2321
2322 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_GeneratorFormer; }
2323 virtual CUTF8String GetErrorDesc() const override { return "generator(..)"; }
2324 virtual bool operator==(const CExpressionBase& Other) const override { return false; }
2325
2327 {
2328 ULANG_ASSERTF(_TypeType, "GetGeneratorType called on unanalyzed expression");
2330 }
2331};
2332
2334{
2335public:
2336
2342
2343 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_MapFormer; }
2344 virtual CUTF8String GetErrorDesc() const override { return "map type"; }
2345 bool operator==(const CExpressionBase& Other) const override { return false; }
2346
2347 const TArray<TSRef<CExpressionBase>>& KeyTypeAsts() const { return _KeyTypeAsts; }
2349
2350 const TSRef<CExpressionBase>& ValueTypeAst() const { return _ValueTypeAst; }
2352
2353 const CMapType* GetMapType() const
2354 {
2355 ULANG_ASSERTF(_TypeType, "GetMapType called on unanalyzed expression");
2357 }
2358
2359 // CExpressionBase interface.
2360 UE_API virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override;
2361
2362 // CAstNode interface.
2363 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.VisitArray("KeyTypeAsts", _KeyTypeAsts); Visitor.Visit("ValueTypeAst", _ValueTypeAst); }
2364
2365private:
2366
2367 TArray<TSRef<CExpressionBase>> _KeyTypeAsts;
2368 TSRef<CExpressionBase> _ValueTypeAst;
2369};
2370
2372{
2373public:
2374
2376
2377 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_OptionFormer; }
2378 virtual CUTF8String GetErrorDesc() const override { return "option type"; }
2379 virtual bool operator==(const CExpressionBase& Other) const override { return false; }
2380
2382 {
2383 ULANG_ASSERTF(_TypeType, "GetOptionType called on unanalyzed expression");
2385 }
2386};
2387
2389{
2390public:
2393
2394 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_Subtype; }
2395 virtual CUTF8String GetErrorDesc() const override;
2396 virtual bool operator==(const CExpressionBase& Other) const override { return false; }
2397
2398 UE_API const CTypeType& GetSubtypeType() const;
2399
2401};
2402
2403// Get or create a tuple based on `tuple(type1, type2, ...)`
2405{
2406public:
2407
2409
2413 {
2414 ULANG_ASSERTF(Index >= 0 && Index < _ElementTypeExprs.Num(), "Replacing invalid subexpression index");
2415 _ElementTypeExprs.ReplaceAt(Move(TypeExpr), Index);
2416 }
2417
2418 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_TupleType; }
2419 virtual CUTF8String GetErrorDesc() const override { return "tuple(..)"; }
2420 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.VisitArray("ElemTypeExprs", _ElementTypeExprs); }
2421 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
2422
2424 {
2425 ULANG_ASSERTF(_TypeType, "GetTupleType called on unanalyzed expression");
2427 }
2428
2429protected:
2430
2432};
2433
2439{
2440public:
2441
2446
2447 const TSRef<CExpressionBase>& Domain() const { return _Domain; }
2448 const TSRef<CExpressionBase>& Range() const { return _Range; }
2449
2452
2453 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_Arrow; }
2454 virtual CUTF8String GetErrorDesc() const override { return "function type"; }
2455 virtual bool operator==(const CExpressionBase& Other) const override
2456 {
2457 return GetNodeType() == Other.GetNodeType()
2458 && IsSubExprEqual(_Domain, static_cast<const CExprArrow&>(Other)._Domain)
2459 && IsSubExprEqual(_Range, static_cast<const CExprArrow&>(Other)._Range);
2460 }
2461 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("Domain", _Domain); Visitor.Visit("Range", _Range); }
2462
2464 {
2465 ULANG_ASSERTF(_TypeType, "GetFunctionType called on unanalyzed expression");
2467 }
2468
2469private:
2470 TSRef<CExpressionBase> _Domain;
2472};
2473
2479{
2480public:
2482
2484
2485 const TSRefArray<CExpressionBase>& Arguments() const { return _Arguments; }
2486
2488 {
2489 return _Arguments.Add(Move(Argument));
2490 }
2491
2492 virtual bool CanFail(const CAstPackage* Package) const override
2493 {
2494 for (const auto& Argument : _Arguments)
2495 {
2496 if (Argument->CanFail(Package))
2497 {
2498 return true;
2499 }
2500 }
2501 return false;
2502 }
2503
2504 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_ArchetypeInstantiation; }
2505
2506 virtual CUTF8String GetErrorDesc() const override { return "archetype constructor"; }
2507
2508 virtual void VisitChildren(SAstVisitor& Visitor) const override
2509 {
2510 Visitor.Visit("ClassAst", _ClassAst);
2511 Visitor.VisitArray("BodyAstExprs", _BodyAst.Exprs());
2512 Visitor.BeginArray("Arguments", _Arguments.Num());
2513 for(const TSRef<CExpressionBase>& Argument : _Arguments)
2514 {
2515 Visitor.VisitElement(Argument);
2516 }
2517 Visitor.EndArray();
2518 }
2519
2520 virtual void VisitImmediates(SAstVisitor& Visitor) const override
2521 {
2523 Visitor.VisitImmediate("BodyAstTag", MacroClauseTagAsCString(_BodyAst.Tag()));
2524 Visitor.VisitImmediate("BodyAstForm", MacroClauseFormAsCString(_BodyAst.Form()));
2525 }
2526
2527 UE_API bool operator==(const CExpressionBase& Other) const override;
2528
2532
2533private:
2534 TSRefArray<CExpressionBase> _Arguments;
2535};
2536
2548
2549
2558{
2559public:
2560 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Concurrent_Sync; }
2561 virtual CUTF8String GetErrorDesc() const override { return "sync{}"; }
2562};
2563
2564
2573{
2574public:
2575 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Concurrent_Race; }
2576 virtual CUTF8String GetErrorDesc() const override { return "race{}"; }
2577};
2578
2579
2589{
2590public:
2591 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Concurrent_Rush; }
2592 virtual CUTF8String GetErrorDesc() const override { return "rush{}"; }
2593};
2594
2595
2600{
2601protected:
2602 // Sub-expression from block - either single expression or block of expressions
2604
2605public:
2606
2608 const TSPtr<CExpressionBase>& Expr() const { return _BlockExpr; }
2609
2610 virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override { return nullptr; }
2611 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("BlockExpr", _BlockExpr); }
2612 virtual bool operator==(const CExpressionBase& Other) const override
2613 {
2614 return (Other.GetNodeType() == GetNodeType()) && IsSubExprEqual(_BlockExpr, static_cast<const CExprSubBlockBase&>(Other)._BlockExpr);
2615 }
2616};
2617
2618
2627{
2628public:
2629 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Concurrent_Branch; }
2630 virtual CUTF8String GetErrorDesc() const override { return "branch"; }
2631};
2632
2633
2642{
2643public:
2644 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Concurrent_Spawn; }
2645 virtual CUTF8String GetErrorDesc() const override { return "spawn"; }
2646};
2647
2649{
2650public:
2655
2656 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Concurrent_Await; }
2657
2658 virtual CUTF8String GetErrorDesc() const override { return "await"; }
2659
2660 virtual bool MayHaveAttributes() const override { return false; }
2661
2662 virtual bool CanFail(const CAstPackage* Package) const override { return false; }
2663
2664 virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override { return this; }
2665};
2666
2668{
2669public:
2675
2681
2682 virtual bool MayHaveAttributes() const override { return false; }
2683
2684 virtual bool CanFail(const CAstPackage* Package) const override { return false; }
2685
2687 {
2688 for (const auto& RangeExpr : _RangeExprs)
2689 {
2691 {
2692 return FirstAyncSubExpr;
2693 }
2694 }
2695 return nullptr;
2696 }
2697
2698 virtual bool operator==(const CExpressionBase& Other) const override
2699 {
2700 return
2701 Other.GetNodeType() == GetNodeType() &&
2702 AreSubExprsEqual(_DomainExprs, static_cast<const CExprBinaryAwaitOp&>(Other)._DomainExprs) &&
2703 AreSubExprsEqual(_RangeExprs, static_cast<const CExprBinaryAwaitOp&>(Other)._RangeExprs);
2704 }
2705
2707 {
2708 return _DomainExprs;
2709 }
2710
2712 {
2713 return _RangeExprs;
2714 }
2715
2717 {
2718 _DomainExprs.Add(Move(Expr));
2719 }
2720
2722 {
2723 _RangeExprs.Add(Move(Expr));
2724 }
2725
2726private:
2727 TSRefArray<CExpressionBase> _DomainExprs;
2728 TSRefArray<CExpressionBase> _RangeExprs;
2729};
2730
2732{
2733public:
2735
2736 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Concurrent_Upon; }
2737
2738 virtual CUTF8String GetErrorDesc() const override { return "upon"; }
2739};
2740
2742{
2743public:
2745
2746 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Concurrent_When; }
2747
2748 virtual CUTF8String GetErrorDesc() const override { return "when"; }
2749
2751};
2752
2760{
2761public:
2763 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Flow_Loop; }
2764 virtual CUTF8String GetErrorDesc() const override { return "loop"; }
2765
2766 virtual bool CanFail(const CAstPackage* Package) const override {
2767 return _BlockExpr->CanFail(Package);
2768 }
2769};
2770
2771
2777{
2778public:
2780 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Flow_Defer; }
2781 virtual CUTF8String GetErrorDesc() const override { return "defer"; }
2782};
2783
2793{
2794public:
2796
2797 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Flow_Break; }
2798 virtual CUTF8String GetErrorDesc() const override { return "break"; }
2799 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Flow_Break; }
2800 virtual bool MayHaveAttributes() const override { return true; }
2801
2802 UE_API virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override;
2803};
2804
2809{
2810public:
2813
2814 const TArray<TSRef<CExpressionBase>>& Members() const { return _Members; }
2816 void AppendMember(TSRef<CExpressionBase>&& Member) { _Members.Add(Move(Member)); }
2817 void PrependMember(TSRef<CExpressionBase>&& Member) { _Members.Insert(Move(Member), 0); }
2818 void SetMember(TSRef<CExpressionBase>&& Member, int32_t Index) { _Members[Index] = Move(Member); }
2819
2820 void VisitMembers(SAstVisitor& Visitor) const { Visitor.VisitArray("Members", _Members); }
2821
2822private:
2824};
2825
2830{
2831public:
2834
2836
2837 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Context_Snippet; }
2838 virtual CUTF8String GetErrorDesc() const override { return "snippet"; }
2839 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Context_Snippet && static_cast<const CExprSnippet&>(Other)._SemanticSnippet == _SemanticSnippet; }
2840 UE_API virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override;
2841 virtual void VisitChildren(SAstVisitor& Visitor) const override { VisitMembers(Visitor); }
2842 virtual void VisitImmediates(SAstVisitor& Visitor) const override { CExpressionBase::VisitImmediates(Visitor); Visitor.VisitImmediate("Path", _Path); }
2843};
2844
2849{
2850public:
2852 CModulePart* _SemanticModule{ nullptr }; // You can get the CModule from this as well
2853 bool _bLegacyPublic = false; // To emulate legacy behavior while vmodule files are allowed
2854
2861
2862 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Definition_Module; }
2863 virtual CUTF8String GetErrorDesc() const override { return "module definition"; }
2864 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Definition_Module && static_cast<const CExprModuleDefinition&>(Other)._SemanticModule == _SemanticModule; }
2865 UE_API virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override;
2866 virtual void VisitChildren(SAstVisitor& Visitor) const override { VisitMembers(Visitor); }
2867 virtual void VisitImmediates(SAstVisitor& Visitor) const override { CExpressionBase::VisitImmediates(Visitor); Visitor.VisitImmediate("Name", _Name); }
2868 virtual bool CanBePathSegment(const TMacroSymbols& MacroSymbols) const override { return true; }
2869};
2870
2875{
2876public:
2878
2880
2883
2884 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Definition_Enum; }
2885 virtual CUTF8String GetErrorDesc() const override { return "enum definition"; }
2886 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Definition_Enum && &static_cast<const CExprEnumDefinition&>(Other)._Enum == &_Enum; }
2887 UE_API virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override;
2888 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.VisitArray("Members", _Members); }
2889 UE_API virtual void VisitImmediates(SAstVisitor& Visitor) const override;
2890 virtual bool CanBePathSegment(const TMacroSymbols& MacroSymbols) const override { return true; }
2891};
2892
2899{
2900public:
2903
2906
2907 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Definition_ScopedAccessLevel; }
2908 virtual CUTF8String GetErrorDesc() const override { return "scoped access level"; }
2909 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Definition_ScopedAccessLevel && static_cast<const CExprScopedAccessLevelDefinition&>(Other)._AccessLevelDefinition == _AccessLevelDefinition; }
2910 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.VisitArray("Scopes", _ScopeReferenceExprs); }
2911 UE_API virtual void VisitImmediates(SAstVisitor& Visitor) const override;
2912};
2913
2918{
2919public:
2921
2922 const TArray<TSRef<CExpressionBase>>& SuperInterfaces() const { return _SuperInterfaces; }
2925
2927
2931
2933
2934 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Definition_Interface; }
2935 virtual CUTF8String GetErrorDesc() const override { return "interface definition"; }
2936 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Definition_Interface && &static_cast<const CExprInterfaceDefinition&>(Other)._Interface == &_Interface; }
2937 virtual void VisitChildren(SAstVisitor& Visitor) const override { VisitMembers(Visitor); }
2938 UE_API virtual void VisitImmediates(SAstVisitor& Visitor) const override;
2939 virtual bool MayHaveAttributes() const override { return true; }
2940 virtual bool CanBePathSegment(const TMacroSymbols& MacroSymbols) const override { return true; }
2941private:
2942
2943 TArray<TSRef<CExpressionBase>> _SuperInterfaces;
2944};
2945
2950{
2951public:
2953
2955
2960
2962
2963 const TArray<TSRef<CExpressionBase>>& SuperTypes() const { return _SuperTypes; }
2965 void SetSuperType(TSRef<CExpressionBase>&& SuperType, int32_t Index) { _SuperTypes[Index] = Move(SuperType); }
2966
2967 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Definition_Class; }
2968 virtual CUTF8String GetErrorDesc() const override { return "class definition"; }
2969 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Definition_Class && &static_cast<const CExprClassDefinition&>(Other)._Class == &_Class; }
2970 virtual void VisitChildren(SAstVisitor& Visitor) const override { VisitMembers(Visitor); }
2971 UE_API virtual void VisitImmediates(SAstVisitor& Visitor) const override;
2972 virtual bool CanBePathSegment(const TMacroSymbols& MacroSymbols) const override { return true; }
2973private:
2974 TArray<TSRef<CExpressionBase>> _SuperTypes;
2975};
2976
2981{
2982public:
2984
2987
2988 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Definition_Data; }
2989 virtual CUTF8String GetErrorDesc() const override { return "data definition"; }
2990 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Definition_Data && &static_cast<const CExprDataDefinition&>(Other)._DataMember == &_DataMember; }
2991 UE_API virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override;
2992 virtual void VisitImmediates(SAstVisitor& Visitor) const override { CExpressionBase::VisitImmediates(Visitor); Visitor.VisitImmediate("DataMember", *_DataMember); }
2993};
2994
2999{
3000public:
3003
3012
3013 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Definition_IterationPair; }
3014 virtual CUTF8String GetErrorDesc() const override { return "iteration pair definition"; }
3015 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Definition_IterationPair && static_cast<const CExprIterationPairDefinition&>(Other)._KeyDefinition == _KeyDefinition && static_cast<const CExprIterationPairDefinition&>(Other)._ValueDefinition == _ValueDefinition; }
3016 virtual void VisitImmediates(SAstVisitor& Visitor) const override { CExpressionBase::VisitImmediates(Visitor); Visitor.VisitImmediate("KeyDefinition", *_KeyDefinition); Visitor.VisitImmediate("ValueDefinition", *_ValueDefinition); }
3017};
3018
3026{
3027public:
3032
3033 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Ir_ArrayAdd; }
3034 virtual CUTF8String GetErrorDesc() const override { return "array add"; }
3035 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
3036
3038 virtual bool CanFail(const CAstPackage* Package) const override { return _Source->CanFail(Package); }
3039 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("Source", _Source); }
3040
3042};
3043
3046{
3047public:
3054
3055 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Ir_MapAdd; }
3056 virtual CUTF8String GetErrorDesc() const override { return "map add"; }
3057 UE_API virtual bool operator==(const CExpressionBase&) const override;
3058 UE_API virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram&) const override;
3059 UE_API virtual bool CanFail(const CAstPackage* Package) const override;
3060 UE_API virtual void VisitChildren(SAstVisitor& Visitor) const override;
3061
3064};
3065
3067{
3068public:
3074
3075 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Ir_ArrayUnsafeCall; }
3076
3077 virtual CUTF8String GetErrorDesc() const override { return "array unsafe call"; }
3078
3079 UE_API virtual bool operator==(const CExpressionBase&) const override;
3080
3082 {
3084 }
3085
3086 virtual bool CanFail(const CAstPackage* Package) const override
3087 {
3088 return
3089 _Callee->CanFail(Package) ||
3090 _Argument->CanFail(Package);
3091 }
3092
3093 virtual void VisitChildren(SAstVisitor& Visitor) const override
3094 {
3095 Visitor.Visit("Callee", _Callee);
3096 Visitor.Visit("Argument", _Argument);
3097 }
3098
3101};
3102
3107{
3108public:
3110
3111 //~ Begin CExpressionBase interface
3112 virtual bool CanFail(const CAstPackage* Package) const override { return Operand()->CanFail(Package); }
3113 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Ir_ConvertToDynamic; }
3114 virtual CUTF8String GetErrorDesc() const override { return "convert value to dynamically typed value"; }
3115 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Ir_ConvertToDynamic && (*this) == static_cast<const CExprUnaryOp&>(Other); }
3116 //~ End CExpressionBase interface
3117};
3118
3123{
3124public:
3126
3127 //~ Begin CExpressionBase interface
3128 virtual bool CanFail(const CAstPackage* Package) const override { return Operand()->CanFail(Package); }
3129 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Ir_ConvertFromDynamic; }
3130 virtual CUTF8String GetErrorDesc() const override { return "convert value from dynamically typed value"; }
3131 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Ir_ConvertFromDynamic && (*this) == static_cast<const CExprUnaryOp&>(Other); }
3132 //~ End CExpressionBase interface
3133};
3134
3139{
3140public:
3141 bool _bOutermost{ true };
3142 bool _bGenerateResult{ true };
3143 bool _bCanFail{ false };
3144
3148
3154
3160
3161
3162 void SetBody(TSPtr<CExpressionBase>&& Body) { _Body = Move(Body); }
3163
3164 UE_API virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override;
3165 virtual bool CanFail(const CAstPackage* Package) const override { return _bCanFail; }
3166 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("Definition", _Definition); Visitor.Visit("Body", _Body); }
3167 virtual void VisitImmediates(SAstVisitor& Visitor) const override
3168 {
3170 Visitor.VisitImmediate("bGenerateResult", _bGenerateResult);
3171 if (_KeyMember)
3172 {
3173 Visitor.VisitImmediate("KeyMember", *_KeyMember);
3174 }
3175 Visitor.VisitImmediate("DataMember", *_DataMember);
3176 }
3177
3178 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Ir_For; }
3179 virtual CUTF8String GetErrorDesc() const override { return "ir_for"; }
3180 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
3181
3182public:
3183 // The scope containing the variables used for iterating
3185
3186 // Expression to evaluate for every iteration that gets past the filters step
3188};
3189
3195{
3196public:
3200
3201 void SetBody(TSPtr<CExpressionBase>&& Body) { _Body = Move(Body); }
3202
3203 UE_API virtual const CExpressionBase* FindFirstAsyncSubExpr(const CSemanticProgram& Program) const override;
3204 virtual bool CanFail(const CAstPackage* Package) const override { return _Body->CanFail(Package); }
3205 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("Body", _Body); }
3206 virtual void VisitImmediates(SAstVisitor& Visitor) const override {}
3207
3208 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Ir_ForBody; }
3209 virtual CUTF8String GetErrorDesc() const override { return "ir_for_body"; }
3210 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
3211
3212public:
3213 // Expression to evaluate outside the failure contexts of the enclosing CIrFor
3215};
3216
3221{
3222public:
3224
3227
3229
3230 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Definition_Function; }
3231 virtual CUTF8String GetErrorDesc() const override { return "function definition"; }
3232 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Definition_Function && static_cast<const CExprFunctionDefinition&>(Other)._Function == _Function; }
3233 UE_API virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override;
3234};
3235
3240{
3241public:
3243
3246
3247 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Definition_TypeAlias; }
3248 virtual CUTF8String GetErrorDesc() const override { return "type alias definition"; }
3249 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Definition_TypeAlias && static_cast<const CExprTypeAliasDefinition&>(Other)._TypeAlias == _TypeAlias; }
3250};
3251
3256{
3257public:
3258 // Note that not all `using` refer to a module
3259 const CModule* _Module = nullptr;
3260
3262
3264
3265 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Definition_Using; }
3266 virtual CUTF8String GetErrorDesc() const override { return "using"; }
3267 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Definition_Using && static_cast<const CExprUsing&>(Other)._Module == _Module; }
3268 UE_API virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override;
3269 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("Context", _Context); }
3270 UE_API virtual void VisitImmediates(SAstVisitor& Visitor) const override;
3271};
3272
3277{
3278public:
3279 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Flow_ProfileBlock; }
3280 virtual CUTF8String GetErrorDesc() const override { return "profile"; }
3281 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Flow_ProfileBlock; }
3282 virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override { return _BlockExpr->GetResultType(Program); }
3284
3285 virtual void VisitImmediates(SAstVisitor& Visitor) const override
3286 {
3287 Visitor.Visit("UserTag", _UserTag);
3289 }
3290
3291 virtual void VisitChildren(SAstVisitor& Visitor) const override
3292 {
3293 Visitor.Visit("UserTag", _UserTag);
3295 }
3296
3297 TSPtr<uLang::CExpressionBase> _UserTag; // Must resolve to a string type
3298
3299#if WITH_VERSE_BPVM
3302#endif
3303
3304};
3305
3310{
3311public:
3314
3317
3318 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Definition_Import; }
3319 virtual CUTF8String GetErrorDesc() const override { return "import"; }
3320 virtual bool operator==(const CExpressionBase& Other) const override { return Other.GetNodeType() == EAstNodeType::Definition_Import; }
3321 UE_API virtual const CTypeBase* GetResultType(const CSemanticProgram& Program) const override;
3322 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.Visit("Path", _Path); }
3323 UE_API virtual void VisitImmediates(SAstVisitor& Visitor) const override;
3324};
3325
3327{
3328public:
3330 : _Lhs(Move(Lhs))
3331 , _Rhs(Move(Rhs))
3332 {
3333 }
3334
3335 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Definition_Where; }
3336
3337 virtual CUTF8String GetErrorDesc() const override { return "where"; }
3338
3339 virtual bool operator==(const CExpressionBase& Right) const override
3340 {
3341 if (!BaseCompare(*this, Right))
3342 {
3343 return false;
3344 }
3345 const CExprWhere& RightWhere = static_cast<const CExprWhere&>(Right);
3346 return
3347 IsSubExprEqual(_Lhs, RightWhere._Lhs) &&
3348 AreSubExprsEqual(_Rhs, RightWhere._Rhs);
3349 }
3350
3351 virtual void VisitChildren(SAstVisitor& Visitor) const override
3352 {
3353 Visitor.Visit("Lhs", _Lhs);
3354 Visitor.VisitArray("Rhs", _Rhs);
3355 }
3356
3358 {
3359 return _Lhs;
3360 }
3361
3363 {
3364 return _Rhs;
3365 }
3366
3368 {
3369 return _Rhs;
3370 }
3371
3373 {
3374 _Lhs = Move(NewLhs);
3375 }
3376
3378 {
3379 _Rhs = Move(NewRhs);
3380 }
3381
3382private:
3385};
3386
3388{
3389public:
3395
3396 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Definition_Var; }
3397 virtual bool CanFail(const CAstPackage* Package) const override { return Operand()->CanFail(Package); }
3398 virtual CUTF8String GetErrorDesc() const override { return "var"; }
3399 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
3400
3402};
3403
3404
3406{
3407public:
3412
3413 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Definition_Live; }
3414 virtual bool CanFail(const CAstPackage* Package) const override { return Operand()->CanFail(Package); }
3415 virtual CUTF8String GetErrorDesc() const override { return "live"; }
3416 UE_API virtual bool operator==(const CExpressionBase& Other) const override;
3417};
3418
3423{
3424public:
3426 : _Name(Name)
3427 {
3428 }
3429
3431 : _Name(Name)
3432 , _NameIdentifier(Move(NameIdentifier))
3433 , _Value(Move(Argument))
3434 {
3435 }
3436
3437 const CSymbol& GetName() const { return _Name; }
3438 const TSPtr<CExpressionBase>& GetNameIdentifier() const { return _NameIdentifier; }
3440 const TSPtr<CExpressionBase>& GetValue() const { return _Value; }
3442 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Invoke_MakeNamed; }
3443 virtual CUTF8String GetErrorDesc() const override { return "named"; }
3444
3445 virtual bool operator==(const CExpressionBase& Right) const override
3446 {
3447 if (!BaseCompare(*this, Right))
3448 {
3449 return false;
3450 }
3451 const CExprMakeNamed& RightNamedArgument = static_cast<const CExprMakeNamed&>(Right);
3452 return
3453 _Name == RightNamedArgument._Name &&
3454 _NameIdentifier == RightNamedArgument._NameIdentifier &&
3455 IsSubExprEqual(_Value, RightNamedArgument._Value);
3456 }
3457
3458 virtual void VisitChildren(SAstVisitor& Visitor) const override
3459 {
3461 Visitor.Visit("Value", _Value);
3462 }
3463
3464 virtual void VisitImmediates(SAstVisitor& Visitor) const override
3465 {
3467 Visitor.VisitImmediate("Name", _Name.AsStringView());
3468 }
3469
3471 {
3472 return _Value? _Value->FindFirstAsyncSubExpr(Program) : nullptr;
3473 }
3474
3475 virtual bool CanFail(const CAstPackage* Package) const override
3476 {
3477 return _Value? _Value->CanFail(Package) : false;
3478 }
3479
3480private:
3481 CSymbol _Name;
3482
3486 TSPtr<CExpressionBase> _NameIdentifier;
3487 TSPtr<CExpressionBase> _Value;
3488};
3489
3494{
3495public:
3497
3498 CUTF8String _VersePath; // Verse path of the root module of this package
3499 CModulePart* _RootModule = nullptr; // Root module representing this package's Verse path
3500
3501 TArray<const CAstPackage*> _Dependencies; // As specified in package settings
3502 TArray<const CAstPackage*> _UsedDependencies; // Dependencies actually used
3503
3504 EVerseScope _VerseScope; // Origin/visibility of Verse code in this package
3505 EPackageRole _Role; // The role this package plays
3506 uint32_t _EffectiveVerseVersion; // The effective language version the package targets.
3507
3514 uint32_t _UploadedAtFNVersion = VerseFN::UploadedAtFNVersion::Latest;
3515
3516 // Track the number of persistent values found on a per-package basis instead of across all packages.
3518
3519 bool _bAllowNative; // If the native attribute is allowed
3520 bool _bTreatModulesAsImplicit; // If true, module macros in this package's source and digest will be treated as implicit
3521
3522 bool _bAllowExperimental; // Whether to allow the use of experimental definitions in this package.
3523
3524 CAstCompilationUnit* _CompilationUnit = nullptr; // Reverse pointer to our owner
3525
3527 const CUTF8String& VersePath,
3528 const EVerseScope VerseScope,
3529 const EPackageRole Role,
3531 const uint32_t UploadedAtFNVersion,
3532 const bool bAllowNative,
3533 const bool bTreatDefinitionsAsImplicit,
3534 const bool bAllowExperimental)
3535 : _Name(Name)
3536 , _VersePath(VersePath)
3537 , _VerseScope(VerseScope)
3538 , _Role(Role)
3540 , _UploadedAtFNVersion(UploadedAtFNVersion)
3544 {}
3545
3546 // CAstNode interface.
3547 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Context_Package; }
3548 virtual CUTF8String GetErrorDesc() const override { return "package"; }
3549 virtual void VisitChildren(SAstVisitor& Visitor) const override { VisitMembers(Visitor); }
3550 UE_API virtual void VisitImmediates(SAstVisitor& Visitor) const override;
3551
3552 // Determine if the definition originates from this package or any of our dependencies
3553 UE_API bool CanSeeDefinition(const CDefinition& Definition) const;
3554};
3555
3560{
3561public:
3562
3563 const TSRefArray<CAstPackage>& Packages() const { return _Packages; }
3564 void ReservePackages(int32_t Num) { _Packages.Reserve(Num); }
3566
3567 UE_API EPackageRole GetRole() const;
3568 UE_API bool IsAllowNative() const;
3569
3570 // CAstNode interface.
3571 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Context_CompilationUnit; }
3572 virtual CUTF8String GetErrorDesc() const override { return "compilation unit"; }
3573 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.VisitArray("Packages", _Packages); }
3574
3575private:
3576
3577 TSRefArray<CAstPackage> _Packages;
3578};
3579
3583class CAstProject : public CAstNode
3584{
3585public:
3586
3588
3590
3591 const TSRefArray<CAstCompilationUnit>& OrderedCompilationUnits() const { return _OrderedCompilationUnits; } // Guaranteed to be sorted in order of dependency
3592 void ReserveCompilationUnits(int32_t Num) { _OrderedCompilationUnits.Reserve(Num); }
3594
3595 UE_API const CAstPackage* FindPackageByName(const CUTF8String& PackageName) const;
3597
3598 // CAstNode interface.
3599 virtual EAstNodeType GetNodeType() const override { return EAstNodeType::Context_Project; }
3600 virtual CUTF8String GetErrorDesc() const override { return "project"; }
3601 virtual void VisitChildren(SAstVisitor& Visitor) const override { Visitor.VisitArray("CompilationUnits", _OrderedCompilationUnits); }
3602 virtual void VisitImmediates(SAstVisitor& Visitor) const override { CAstNode::VisitImmediates(Visitor); Visitor.VisitImmediate("Name", _Name); }
3603
3604private:
3605
3606 TSRefArray<CAstCompilationUnit> _OrderedCompilationUnits; // Guaranteed to be sorted in order of dependency
3607};
3608
3609//=======================================================================================
3610// CAstNode Implementations
3611//=======================================================================================
3612
3613template<typename FunctionType>
3615{
3616 FunctionType _Function;
3617 TAstFunctionVisitor(FunctionType&& Function) : _Function(ForwardArg<FunctionType>(Function)) {}
3618 virtual void Visit(const char* FieldName, CAstNode& AstNode) override { _Function(*this, AstNode); }
3619 virtual void VisitElement(CAstNode& AstNode) override { _Function(*this, AstNode); }
3620};
3621
3622template<typename FunctionType>
3628
3629//=======================================================================================
3630// CExpressionBase Inline Methods
3631//=======================================================================================
3632
3633//---------------------------------------------------------------------------------------
3635{
3636 return !Lhs == !Rhs && (!Lhs || *Lhs == *Rhs);
3637}
3638
3640{
3641 return IsSubExprEqual(&Lhs, &Rhs);
3642}
3643
3644//---------------------------------------------------------------------------------------
3646{
3647 return IsSubExprEqual(Lhs.Get(), Rhs.Get());
3648}
3649
3650//---------------------------------------------------------------------------------------
3652{
3653 return IsSubExprEqual(Lhs.Get(), Rhs.Get());
3654}
3655
3656//---------------------------------------------------------------------------------------
3657template <typename TRange1, typename TRange2>
3659{
3660 if (Lhs.Num() != Rhs.Num())
3661 {
3662 return false;
3663 }
3664
3665 for (int32_t i = 0; i < Lhs.Num(); ++i)
3666 {
3667 if (!IsSubExprEqual(Lhs[i], Rhs[i]))
3668 {
3669 return false;
3670 }
3671 }
3672
3673 return true;
3674}
3675
3676//---------------------------------------------------------------------------------------
3677template <typename TIn, typename TOut>
3679
3680template <typename TOut>
3686
3687template <typename TOut>
3693
3694template <typename TOut>
3696{
3697 using TResult = TOut*;
3698 static TResult Cast(CExpressionBase* X) { return static_cast<TOut*>(X); }
3699};
3700
3701template <typename TOut>
3703{
3704 using TResult = const TOut*;
3705 static TResult Cast(const CExpressionBase* X) { return static_cast<const TOut*>(X); }
3706};
3707
3708
3709template <typename TOut,
3710 typename TIn,
3711 typename Traits = TAsNullableTraitsOf<TIn, TOut>>
3712typename Traits::TResult AsNullable(TIn Expr)
3713{
3714#define VISIT_AST_NODE_TYPE(Name, Class) \
3715 if constexpr (std::is_same_v<TOut, Class>) \
3716 { \
3717 if (Expr && Expr->GetNodeType() == EAstNodeType::Name) \
3718 { \
3719 return Traits::Cast(Expr); \
3720 } \
3721 }
3723#undef VISIT_AST_NODE_TYPE
3724 return nullptr;
3725}
3726
3728{
3729#define VISIT_AST_NODE_TYPE(Name, Class) if (Node == EAstNodeType::Name) { return #Name; }
3731#undef VISIT_AST_NODE_TYPE
3733}
3734
3735// if Expr is a CallOp like X[A][B]...[Z] then return Expr as a CExprInvocation, otherwise return
3736// nullptr
3737UE_API const CExprInvocation* AsSubscriptCall(
3738 const CExpressionBase* Expr /* can be null */,
3739 const CSemanticProgram& Program);
3740
3741// if Expr is X[A][B]...[Z] then return X, otherwise return Expr
3742UE_API const CExpressionBase* RemoveSubscripts(
3743 const CExpressionBase* Expr /* can be null */,
3744 const CSemanticProgram& Program);
3745
3746} // namespace uLang
3747
3748#undef UE_API
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define FORWARD_DECLARE(_, Class)
Definition Expression.h:173
#define VERSE_VISIT_AST_NODE_TYPES(v)
Definition Expression.h:44
#define X(Name, Desc)
Definition FormatStringSan.h:47
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
#define ULANG_FORCEINLINE
Definition Common.h:188
#define ULANG_UNREACHABLE()
Definition Common.h:243
#define ULANG_ASSERTF(expr, format,...)
Definition Common.h:290
Definition Array.h:670
Definition SemanticTypes.h:788
Definition Expression.h:3560
void AppendPackage(TSRef< CAstPackage > &&Package)
Definition Expression.h:3565
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:3573
const TSRefArray< CAstPackage > & Packages() const
Definition Expression.h:3563
UE_API EPackageRole GetRole() const
Definition Expression.cpp:1952
UE_API bool IsAllowNative() const
Definition Expression.cpp:1969
void ReservePackages(int32_t Num)
Definition Expression.h:3564
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3571
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3572
Definition Expression.h:297
bool IsIrNode() const
Definition Expression.h:364
EVstMappingType _VstMappingType
Definition Expression.h:378
virtual EAstNodeType GetNodeType() const =0
void SetNonReciprocalMappedVstNode(const Verse::Vst::Node *VstNode)
Definition Expression.h:350
const Verse::Vst::Node * GetMappedVstNode() const
Definition Expression.h:348
virtual CUTF8String GetErrorDesc() const =0
virtual void VisitChildren(SAstVisitor &Visitor) const
Definition Expression.h:332
virtual void VisitImmediates(SAstVisitor &Visitor) const
Definition Expression.h:312
virtual const CExprIdentifierBase * AsIdentifierBase() const
Definition Expression.h:307
const Verse::Vst::Node * _MappedVstNode
Definition Expression.h:379
CAstNode(EVstMappingType VstMappingType=EVstMappingType::Ast)
Definition Expression.h:299
virtual UE_API ~CAstNode()
Definition Expression.cpp:37
ULANG_FORCEINLINE void VisitChildrenLambda(FunctionType &&Function) const
virtual bool MayHaveAttributes() const
Definition Expression.h:306
void SetIrMappedVstNode(const Verse::Vst::Node *VstNode)
Definition Expression.h:356
virtual const CExpressionBase * AsExpression() const
Definition Expression.h:304
bool IsVstMappingReciprocal() const
Definition Expression.h:369
virtual CExpressionBase * AsExpression()
Definition Expression.h:305
Definition Expression.h:3494
uint32_t _UploadedAtFNVersion
Definition Expression.h:3514
CModulePart * _RootModule
Definition Expression.h:3499
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:3549
virtual UE_API void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.cpp:1896
CAstCompilationUnit * _CompilationUnit
Definition Expression.h:3524
CUTF8String _VersePath
Definition Expression.h:3498
CUTF8String _Name
Definition Expression.h:3496
bool _bAllowNative
Definition Expression.h:3519
EPackageRole _Role
Definition Expression.h:3505
UE_API bool CanSeeDefinition(const CDefinition &Definition) const
Definition Expression.cpp:1923
int32_t _NumPersistentVars
Definition Expression.h:3517
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3547
bool _bTreatModulesAsImplicit
Definition Expression.h:3520
TArray< const CAstPackage * > _Dependencies
Definition Expression.h:3501
bool _bAllowExperimental
Definition Expression.h:3522
TArray< const CAstPackage * > _UsedDependencies
Definition Expression.h:3502
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3548
EVerseScope _VerseScope
Definition Expression.h:3504
CAstPackage(const CUTF8String &Name, const CUTF8String &VersePath, const EVerseScope VerseScope, const EPackageRole Role, const uint32_t EffectiveVerseVersion, const uint32_t UploadedAtFNVersion, const bool bAllowNative, const bool bTreatDefinitionsAsImplicit, const bool bAllowExperimental)
Definition Expression.h:3526
uint32_t _EffectiveVerseVersion
Definition Expression.h:3506
Definition Expression.h:3584
void AppendCompilationUnit(TSRef< CAstCompilationUnit > &&CompilationUnit)
Definition Expression.h:3593
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3600
UE_API int32_t GetNumPackages() const
Definition Expression.cpp:2005
CUTF8String _Name
Definition Expression.h:3587
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3599
CAstProject(const CUTF8StringView &Name)
Definition Expression.h:3589
void ReserveCompilationUnits(int32_t Num)
Definition Expression.h:3592
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:3601
const TSRefArray< CAstCompilationUnit > & OrderedCompilationUnits() const
Definition Expression.h:3591
UE_API const CAstPackage * FindPackageByName(const CUTF8String &PackageName) const
Definition Expression.cpp:1989
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:3602
Base class for everything that can have attributes attached to it (classes, expressions,...
Definition Attributable.h:51
Definition CaptureControlScope.h:12
Definition CaptureScope.h:13
Definition SemanticClass.h:33
Definition DataDefinition.h:41
Definition Definition.h:131
Definition SemanticEnumeration.h:58
Definition SemanticEnumeration.h:27
Definition Expression.h:2479
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2504
int32_t AppendArgument(TSRef< CExpressionBase > &&Argument)
Definition Expression.h:2487
const bool _bIsDynamicConcreteType
Definition Expression.h:2531
UE_API const CNominalType * GetClassOrInterface(const CSemanticProgram &Program) const
Definition Expression.cpp:1292
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:2492
TSRef< CExpressionBase > _ClassAst
Definition Expression.h:2529
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2506
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:2520
UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:1304
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:2508
const TSRefArray< CExpressionBase > & Arguments() const
Definition Expression.h:2485
CExprMacroCall::CClause _BodyAst
Definition Expression.h:2530
Definition Expression.h:2299
const CArrayType * GetArrayType() const
Definition Expression.h:2308
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2305
bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2306
CExprArrayTypeFormer(TSRef< CExpressionBase > &&InnerTypeAst)
Definition Expression.h:2302
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2304
Definition Expression.h:2439
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2454
void SetRange(TSRef< CExpressionBase > &&NewRange)
Definition Expression.h:2451
CExprArrow(TSRef< CExpressionBase > &&Domain, TSRef< CExpressionBase > &&Range)
Definition Expression.h:2442
const CFunctionType * GetFunctionType() const
Definition Expression.h:2463
void SetDomain(TSRef< CExpressionBase > &&NewDomain)
Definition Expression.h:2450
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:2461
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2453
const TSRef< CExpressionBase > & Range() const
Definition Expression.h:2448
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2455
const TSRef< CExpressionBase > & Domain() const
Definition Expression.h:2447
Definition Expression.h:1585
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1605
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:1604
const TSPtr< CExpressionBase > & Rhs() const
Definition Expression.h:1595
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:1609
TSPtr< CExpressionBase > && TakeLhs()
Definition Expression.h:1597
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:1610
TSPtr< CExpressionBase > && TakeRhs()
Definition Expression.h:1598
CExprAssignment(EOp Op, TSPtr< CExpressionBase > &&Lhs, TSPtr< CExpressionBase > &&Rhs)
Definition Expression.h:1589
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:1608
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1606
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:587
EOp Op() const
Definition Expression.h:1593
const TSPtr< CExpressionBase > & Lhs() const
Definition Expression.h:1594
Verse::Vst::Assignment::EOp EOp
Definition Expression.h:1587
void SetLhs(TSPtr< CExpressionBase > &&Lhs)
Definition Expression.h:1600
void SetRhs(TSPtr< CExpressionBase > &&Rhs)
Definition Expression.h:1601
Definition Expression.h:2649
CExprAwait(int32_t ReserveSubExprNum)
Definition Expression.h:2651
virtual bool MayHaveAttributes() const override
Definition Expression.h:2660
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:2662
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2656
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:2664
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2658
Definition Expression.h:1686
EOp
Definition Expression.h:1689
EOp Op() const
Definition Expression.h:1702
CExprBinaryArithmetic(EOp Op, TSRef< CExpressionBase > &&Argument)
Definition Expression.h:1696
Definition Expression.h:2668
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:2684
CExprBinaryAwaitOp(TSRefArray< CExpressionBase > DomainExprs, TSRefArray< CExpressionBase > RangeExprs)
Definition Expression.h:2670
void AppendRangeExpr(TSRef< CExpressionBase > Expr)
Definition Expression.h:2721
void AppendDomainExpr(TSRef< CExpressionBase > Expr)
Definition Expression.h:2716
virtual bool MayHaveAttributes() const override
Definition Expression.h:2682
const TSRefArray< CExpressionBase > & GetRangeExprs() const
Definition Expression.h:2711
CExprBinaryAwaitOp(int32_t NumReservedDomainExprs, int32_t NumReservedRangeExprs)
Definition Expression.h:2676
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:2686
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2698
const TSRefArray< CExpressionBase > & GetDomainExprs() const
Definition Expression.h:2706
Definition Expression.h:538
TSPtr< CExpressionBase > && TakeRhs()
Definition Expression.h:548
const TSPtr< CExpressionBase > & Lhs() const
Definition Expression.h:546
void SetRhs(TSPtr< CExpressionBase > &&NewRhs)
Definition Expression.h:550
const TSPtr< CExpressionBase > & Rhs() const
Definition Expression.h:547
CExprBinaryOp(TSPtr< CExpressionBase > &&Lhs, TSPtr< CExpressionBase > &&Rhs)
Definition Expression.h:552
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:555
void SetLhs(TSPtr< CExpressionBase > &&NewLhs)
Definition Expression.h:549
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:554
Definition Expression.h:2627
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2630
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2629
Definition Expression.h:2793
const CExpressionBase * _AssociatedControlFlow
Definition Expression.h:2795
virtual bool MayHaveAttributes() const override
Definition Expression.h:2800
virtual UE_API const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.cpp:1331
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2797
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2799
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2798
Definition Expression.h:654
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:698
CExprChar(uint32_t CodePoint, EType Type)
Definition Expression.h:665
CUTF8String AsString() const
Definition Expression.h:675
EType _Type
Definition Expression.h:663
uint32_t _CodePoint
Definition Expression.h:662
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:696
EType
Definition Expression.h:657
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:695
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:694
Definition Expression.h:2950
virtual bool CanBePathSegment(const TMacroSymbols &MacroSymbols) const override
Definition Expression.h:2972
void SetSuperTypes(TArray< TSRef< CExpressionBase > > &&SuperTypes)
Definition Expression.h:2964
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2967
CClass & _Class
Definition Expression.h:2952
CExprClassDefinition(CClass &Class, EVstMappingType VstMappingType=EVstMappingType::Ast)
Definition Expression.h:2956
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:2970
const TArray< TSRef< CExpressionBase > > & SuperTypes() const
Definition Expression.h:2963
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2969
void SetSuperType(TSRef< CExpressionBase > &&SuperType, int32_t Index)
Definition Expression.h:2965
UE_API ~CExprClassDefinition()
Definition Expression.cpp:1555
virtual UE_API void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.cpp:1570
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2968
Definition Expression.h:2087
CExprCodeBlock(int32_t ReserveSubExprNum=0)
Definition Expression.h:2094
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2096
TSPtr< CControlScope > _AssociatedScope
Definition Expression.h:2090
virtual UE_API const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.cpp:961
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2097
Definition Expression.h:1800
virtual UE_API CUTF8String GetErrorDesc() const override
Definition Expression.cpp:643
Verse::Vst::BinaryOpCompare::op EOp
Definition Expression.h:1802
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:660
EOp Op() const
Definition Expression.h:1816
CExprComparison(EOp Op, TSRef< CExpressionBase > &&Argument)
Definition Expression.h:1804
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:1814
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1811
Definition Expression.h:482
void ReplaceSubExpr(TSPtr< CExpressionBase > SubExpr, int32_t Index)
Definition Expression.h:515
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:115
void PrependSubExpr(TSPtr< CExpressionBase > SubExpr)
Definition Expression.h:513
virtual UE_API const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.cpp:97
CExprCompoundBase(TSPtrArray< CExpressionBase > &&SubExprs, EVstMappingType VstMappingType=EVstMappingType::Ast)
Definition Expression.h:492
virtual UE_API bool CanFail(const CAstPackage *Package) const override
Definition Expression.cpp:83
CExprCompoundBase(TSPtr< CExpressionBase > &&SubExpr1, TSPtr< CExpressionBase > &&SubExpr2)
Definition Expression.h:497
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:523
int32_t SubExprNum() const
Definition Expression.h:507
bool IsEmpty() const
Definition Expression.h:506
const TSPtrArray< CExpressionBase > & GetSubExprs() const
Definition Expression.h:509
void AppendSubExpr(TSPtr< CExpressionBase > SubExpr)
Definition Expression.h:512
void SetSubExprs(TSPtrArray< CExpressionBase > AnalyzedExprs)
Definition Expression.h:514
TSPtrArray< CExpressionBase > & GetSubExprs()
Definition Expression.h:510
const uLang::CExpressionBase * GetLastSubExpr() const
Definition Expression.h:508
TSPtrArray< CExpressionBase > _SubExprs
Definition Expression.h:530
CExprCompoundBase(int32_t ReserveSubExprNum, EVstMappingType VstMappingType=EVstMappingType::Ast)
Definition Expression.h:486
TSPtrArray< CExpressionBase > && TakeSubExprs()
Definition Expression.h:511
Definition Expression.h:2542
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:2546
CExprConcurrentBlockBase(int32_t ReserveSubExprNum=0)
Definition Expression.h:2544
Definition Expression.h:2224
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:2226
Definition Expression.h:2981
const TSRef< CDataDefinition > _DataMember
Definition Expression.h:2983
UE_API ~CExprDataDefinition()
Definition Expression.cpp:1603
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2990
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2989
virtual UE_API const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.cpp:1618
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:2992
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2988
Definition Expression.h:2777
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2780
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2781
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:2779
Definition Expression.h:1249
CSymbol _Name
Definition Expression.h:1297
const TSPtr< CExpressionBase > & Value() const
Definition Expression.h:1273
TSPtr< CExpressionBase > TakeValue()
Definition Expression.h:1275
TSPtr< CExpressionBase > _Element
Definition Expression.h:1294
virtual bool MayHaveAttributes() const override
Definition Expression.h:1286
TSPtr< CExpressionBase > TakeValueDomain()
Definition Expression.h:1271
virtual UE_API const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.cpp:229
CExprDefinition(EVstMappingType VstMappingType=EVstMappingType::Ast)
Definition Expression.h:1259
TSPtr< CExpressionBase > _ValueDomain
Definition Expression.h:1295
TSPtr< CExpressionBase > _Value
Definition Expression.h:1296
CExprDefinition(TSPtr< CExpressionBase > &&Element, TSPtr< CExpressionBase > &&ValueDomain, TSPtr< CExpressionBase > &&Value, EVstMappingType VstMappingType=EVstMappingType::Ast)
Definition Expression.h:1251
bool IsNamed() const
Definition Expression.h:1267
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1284
TSPtr< CExpressionBase > TakeElement()
Definition Expression.h:1263
void SetValue(TSRef< CExpressionBase > &&Value)
Definition Expression.h:1274
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1283
void SetValueDomain(TSRef< CExpressionBase > &&ValueDomain)
Definition Expression.h:1270
const TSPtr< CExpressionBase > & ValueDomain() const
Definition Expression.h:1269
void SetName(CSymbol Name)
Definition Expression.h:1265
const TSPtr< CExpressionBase > & Element() const
Definition Expression.h:1261
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:202
void SetElement(TSRef< CExpressionBase > &&Element)
Definition Expression.h:1262
virtual bool CanBePathSegment(const TMacroSymbols &MacroSymbols) const override
Definition Expression.h:1277
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:1285
virtual UE_API bool CanFail(const CAstPackage *Package) const override
Definition Expression.cpp:223
CSymbol GetName() const
Definition Expression.h:1266
Definition Expression.h:2875
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2886
UE_API ~CExprEnumDefinition()
Definition Expression.cpp:1411
CEnumeration & _Enum
Definition Expression.h:2877
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:2888
virtual UE_API const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.cpp:1426
virtual UE_API void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.cpp:1432
const TArray< TSRef< CExpressionBase > > _Members
Definition Expression.h:2879
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2884
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2885
virtual bool CanBePathSegment(const TMacroSymbols &MacroSymbols) const override
Definition Expression.h:2890
Definition Expression.h:828
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:841
virtual UE_API const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.cpp:180
ULANG_FORCEINLINE CExprEnumLiteral(const CEnumerator *Enumerator, TSPtr< CExpressionBase > &&Context=nullptr, TSPtr< CExpressionBase > &&Qualifier=nullptr)
Definition Expression.h:833
virtual const CDefinition * IdentifierDefinition() const override
This is specifically named as such to avoid shadowing other virtual methods (such as on CNominalType)...
Definition Expression.cpp:192
virtual UE_API void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.cpp:186
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:838
const CEnumerator * _Enumerator
Definition Expression.h:831
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:839
Definition Expression.h:1068
UE_API const CEnumeration * GetEnumeration(const CSemanticProgram &Program) const
Definition Expression.cpp:297
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1080
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1081
UE_API const CTypeType * GetTypeType(const CSemanticProgram &Program) const
Definition Expression.cpp:292
CExprEnumerationType(const CTypeType *TypeType, TSPtr< CExpressionBase > &&Context=nullptr, TSPtr< CExpressionBase > &&Qualifier=nullptr)
Definition Expression.h:1071
Definition Expression.h:568
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:574
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:575
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:576
Definition Expression.h:3221
UE_API bool HasUserAddedPredictsEffect(const CSemanticProgram &Program) const
Definition Expression.cpp:1736
const TSRef< CFunction > _Function
Definition Expression.h:3223
UE_API ~CExprFunctionDefinition()
Definition Expression.cpp:1715
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3230
virtual UE_API const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.cpp:1730
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3231
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:3232
Definition Expression.h:882
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:896
const TSRef< CExpressionBase > & Domain() const
Definition Expression.h:890
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:898
void SetRange(TSRef< CExpressionBase > &&NewRange)
Definition Expression.h:894
const TSRef< CExpressionBase > & Range() const
Definition Expression.h:891
void SetDomain(TSRef< CExpressionBase > &&NewDomain)
Definition Expression.h:893
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:897
CExprFunctionLiteral(TSRef< CExpressionBase > &&Domain, TSRef< CExpressionBase > &&Range)
Definition Expression.h:885
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:904
Definition Expression.h:2316
const CGeneratorType * GetGeneratorType() const
Definition Expression.h:2326
CExprGeneratorTypeFormer(TSRef< CExpressionBase > &&InnerTypeAst)
Construct an expression that takes the ValueType and forms an Generator of ValueType.
Definition Expression.h:2320
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2324
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2323
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2322
Definition Expression.h:762
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:797
virtual const CDefinition * IdentifierDefinition() const
This is specifically named as such to avoid shadowing other virtual methods (such as on CNominalType)...
Definition Expression.h:810
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:804
void SetQualifier(TSPtr< CExpressionBase > Qualifier)
Definition Expression.h:780
void SetContext(TSPtr< CExpressionBase > Context)
Definition Expression.h:775
virtual const CExprIdentifierBase * AsIdentifierBase() const override
This node contains an identifier.
Definition Expression.h:816
TSPtr< CExpressionBase > && TakeQualifier()
Definition Expression.h:773
TSPtr< CExpressionBase > && TakeContext()
Definition Expression.h:772
virtual bool MayHaveAttributes() const override
Definition Expression.h:786
CExprIdentifierBase(TSPtr< CExpressionBase > &&Context=nullptr, TSPtr< CExpressionBase > &&Qualifier=nullptr)
Definition Expression.h:765
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:789
const TSPtr< CExpressionBase > & Qualifier() const
Definition Expression.h:770
const TSPtr< CExpressionBase > & Context() const
Definition Expression.h:769
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:790
Definition Expression.h:963
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:977
const CSymbol _Symbol
Definition Expression.h:965
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:976
CExprIdentifierBuiltInMacro(const CSymbol Symbol, const CTypeBase *Type)
Definition Expression.h:967
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:974
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:975
Definition Expression.h:1018
UE_API const CClass * GetClass(const CSemanticProgram &Program) const
Definition Expression.cpp:253
UE_API const CTypeType * GetTypeType(const CSemanticProgram &Program) const
Definition Expression.cpp:248
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1026
virtual UE_API CUTF8String GetErrorDesc() const override
Definition Expression.cpp:259
Definition Expression.h:1112
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1122
virtual UE_API const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.cpp:325
const CDataDefinition & _DataDefinition
Definition Expression.h:1116
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:1126
virtual const CSymbol & GetName() const
Definition Expression.h:1120
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:1125
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1123
Definition Expression.h:1170
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:1200
const CFunction & _Function
Definition Expression.h:1173
CExprIdentifierFunction(const CFunction &Function, const CTypeBase *ResultType, TSPtr< CExpressionBase > &&Context=nullptr, TSPtr< CExpressionBase > &&Qualifier=nullptr)
Definition Expression.h:1180
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1199
const bool _bSuperQualified
Definition Expression.h:1178
virtual UE_API void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.cpp:413
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1198
TArray< SInstantiatedTypeVariable > _InstantiatedTypeVariables
Definition Expression.h:1175
const CTypeBase * _ConstructorNegativeReturnType
Definition Expression.h:1176
const CCaptureScope * _ConstructorCaptureScope
Definition Expression.h:1177
Definition Expression.h:1049
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1060
CExprIdentifierModuleAlias(const CModuleAlias &ModuleAlias, TSPtr< CExpressionBase > &&Context=nullptr, TSPtr< CExpressionBase > &&Qualifier=nullptr)
Definition Expression.h:1054
const CModuleAlias & _ModuleAlias
Definition Expression.h:1052
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1059
Definition Expression.h:1034
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1041
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1042
UE_API CModule const * GetModule(const CSemanticProgram &Program) const
Definition Expression.cpp:283
Definition Expression.h:1208
bool _bAllowUnrestrictedAccess
Definition Expression.h:1219
virtual UE_API void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.cpp:444
bool _bConstructor
Definition Expression.h:1212
const CTypeBase * _TypeOverload
Definition Expression.h:1214
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:1232
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1230
const TArray< const CFunction * > _FunctionOverloads
Definition Expression.h:1211
const CSymbol _Symbol
Definition Expression.h:1213
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1231
Definition Expression.h:1133
virtual UE_API const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.cpp:364
const CTypeAlias & _TypeAlias
Definition Expression.h:1137
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:1144
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1141
virtual UE_API void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.cpp:352
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1142
Definition Expression.h:1152
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1161
const CTypeVariable & _TypeVariable
Definition Expression.h:1156
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:1162
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1160
virtual UE_API void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.cpp:380
Definition Expression.h:984
bool _bAllowUnrestrictedAccess
Definition Expression.h:991
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1006
const CSymbol _Symbol
Definition Expression.h:986
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:1010
virtual bool MayHaveAttributes() const override
Definition Expression.h:1007
const bool _bAllowReservedOperators
Definition Expression.h:993
void GrantUnrestrictedAccess()
Definition Expression.h:1004
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1008
CExprIdentifierUnresolved(const CSymbol &Symbol, TSPtr< CExpressionBase > &&Context=nullptr, TSPtr< CExpressionBase > &&Qualifier=nullptr, bool bAllowReservedOperators=false)
Definition Expression.h:995
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:1009
Definition Expression.h:2153
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:2176
void SetCondition(TSRef< CExprCodeBlock > &&Condition)
Definition Expression.h:2163
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:1031
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:2175
void SetElseClause(TSPtr< CExpressionBase > &&ElseClause)
Definition Expression.h:2169
virtual UE_API const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.cpp:992
void SetThenClause(TSPtr< CExpressionBase > &&ThenClause)
Definition Expression.h:2166
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2173
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2174
const TSPtr< CExpressionBase > & GetThenClause() const
Definition Expression.h:2165
bool _bIsFilter
Definition Expression.h:2180
const TSPtr< CExpressionBase > & GetElseClause() const
Definition Expression.h:2168
CExprIf(TSRef< CExprCodeBlock > &&Condition, TSPtr< CExpressionBase > &&ThenClause, TSPtr< CExpressionBase > &&ElseClause=nullptr)
Definition Expression.h:2156
const TSRef< CExprCodeBlock > & GetCondition() const
Definition Expression.h:2162
virtual UE_API bool CanFail(const CAstPackage *Package) const override
Definition Expression.cpp:1024
Definition Expression.h:3310
UE_API ~CExprImport()
Definition Expression.cpp:1819
const TSRef< CModuleAlias > _ModuleAlias
Definition Expression.h:3312
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:3320
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:3322
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3319
virtual UE_API void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.cpp:1838
const TSRef< CExpressionBase > _Path
Definition Expression.h:3313
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3318
virtual UE_API const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.cpp:1833
Definition Expression.h:2918
UE_API ~CExprInterfaceDefinition()
Definition Expression.cpp:1508
const TArray< TSRef< CExpressionBase > > & SuperInterfaces() const
Definition Expression.h:2922
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2934
CInterface & _Interface
Definition Expression.h:2920
void SetSuperInterfaces(TArray< TSRef< CExpressionBase > > &&SuperInterfaces)
Definition Expression.h:2923
virtual UE_API void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.cpp:1523
CExprInterfaceDefinition(CInterface &Interface, EVstMappingType VstMappingType=EVstMappingType::Ast)
Definition Expression.h:2928
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2935
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2936
virtual bool MayHaveAttributes() const override
Definition Expression.h:2939
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:2937
virtual bool CanBePathSegment(const TMacroSymbols &MacroSymbols) const override
Definition Expression.h:2940
void SetSuperInterface(TSRef< CExpressionBase > &&SuperInterface, int32_t Index)
Definition Expression.h:2924
Definition Expression.h:1089
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1103
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1104
UE_API const CInterface * GetInterface(const CSemanticProgram &Program) const
Definition Expression.cpp:307
const CTypeType * GetTypeType(const CSemanticProgram &Program) const
Definition Expression.h:1100
CExprInterfaceType(const CTypeType *TypeType, TSPtr< CExpressionBase > &&Context=nullptr, TSPtr< CExpressionBase > &&Qualifier=nullptr)
Definition Expression.h:1094
Definition Expression.h:1454
virtual UE_API bool CanFail(const CAstPackage *Package) const override
Definition Expression.cpp:491
CExprInvocation(CExprInvocation &&Rhs)
Definition Expression.h:1488
EBracketingStyle _CallsiteBracketStyle
Definition Expression.h:1463
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1509
CExprInvocation(EBracketingStyle CallsiteBracketStyle, TCallee &&Callee, TArgument &&Argument)
Definition Expression.h:1466
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:1512
CExprInvocation(TSRef< CExpressionBase > &&Argument)
Definition Expression.h:1484
void SetResolvedCalleeType(const CFunctionType *ResolvedCalleeType)
Definition Expression.h:1503
TSPtr< CExpressionBase > && TakeArgument()
Definition Expression.h:1499
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1510
CExprInvocation(EBracketingStyle CallsiteBracketStyle, TCallee &&Callee, TArgument &&Argument, const CFunctionType *ResolvedCalleeType, const CTypeBase *ResultType)
Definition Expression.h:1473
const TSPtr< CExpressionBase > & GetArgument() const
Definition Expression.h:1498
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:1511
void SetCallee(TSPtr< CExpressionBase > &&Callee)
Definition Expression.h:1496
const TSPtr< CExpressionBase > & GetCallee() const
Definition Expression.h:1494
TSPtr< CExpressionBase > && TakeCallee()
Definition Expression.h:1495
virtual UE_API const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Get the function that this invocation calls
Definition Expression.cpp:468
void SetArgument(TSPtr< CExpressionBase > &&Arguments)
Definition Expression.h:1500
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:513
UE_API const CFunctionType * GetResolvedCalleeType() const
Definition Expression.cpp:461
EBracketingStyle
Definition Expression.h:1458
Definition Expression.h:1964
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:1975
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:1980
const TSRef< CExpressionBase > _Argument
Definition Expression.h:1969
const TSPtr< CExpressionBase > _TypeAst
Definition Expression.h:1968
const CTypeBase * _NegativeType
Definition Expression.h:1966
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1977
virtual UE_API const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.cpp:808
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:1979
const bool _bIsFallible
Definition Expression.h:1967
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1976
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:824
Definition Expression.h:2999
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:3016
UE_API ~CExprIterationPairDefinition()
Definition Expression.cpp:1672
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3013
const TSRef< CDataDefinition > _ValueDefinition
Definition Expression.h:3002
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:3015
const TSRef< CDataDefinition > _KeyDefinition
Definition Expression.h:3001
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3014
Definition Expression.h:2194
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:2202
TArray< TSRef< CExpressionBase > > _Filters
Definition Expression.h:2213
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:1064
void SetBody(TSPtr< CExpressionBase > &&Body)
Definition Expression.h:2198
CExprIteration()
Definition Expression.h:2196
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2203
TSPtr< CExpressionBase > _Body
Definition Expression.h:2216
virtual UE_API const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.cpp:1049
void AddFilter(TSRef< CExpressionBase > &&Filter)
Definition Expression.h:2199
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2204
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:2205
TSPtr< CControlScope > _AssociatedScope
Definition Expression.h:2210
Definition Expression.h:2102
Definition Expression.h:3406
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:1877
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3413
CExprLive(TSPtr< CExpressionBase > Operand, EVstMappingType VstMappingType=EVstMappingType::Ast)
Definition Expression.h:3408
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3415
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:3414
Represents the (local:) qualifier.
Definition Expression.h:934
CExprLocal(const CScope &Scope)
Definition Expression.h:936
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:939
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:944
const CScope & GetScope() const
Definition Expression.h:949
Definition Expression.h:584
bool _Value
Definition Expression.h:587
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:595
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:593
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:592
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:591
Definition Expression.h:1783
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1788
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1791
CExprLogicalNot(TSPtr< CExpressionBase > &&Operand)
Definition Expression.h:1786
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:631
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:1790
virtual UE_API const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.cpp:625
Definition Expression.h:2760
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2763
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:2766
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:2762
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2764
Definition Expression.h:1345
TArray< TSRef< CExpressionBase > > const & Exprs() const
Definition Expression.h:1357
TArray< TSRef< CExpressionBase > > & Exprs()
Definition Expression.h:1358
EMacroClauseTag Tag() const
Definition Expression.h:1355
CClause(EMacroClauseTag Tag, EForm Form, TArray< TSRef< CExpressionBase > > &&Exprs)
Definition Expression.h:1349
EForm Form() const
Definition Expression.h:1356
Definition Expression.h:1339
TArray< CClause > && TakeClauses()
Definition Expression.h:1393
CExprMacroCall(TSRef< CExpressionBase > &&Name, int32_t NumClauses=0)
Definition Expression.h:1369
virtual bool CanBePathSegment(const TMacroSymbols &MacroSymbols) const override
Definition Expression.h:1395
void AppendClause(CClause &&Clause)
Definition Expression.h:1379
TSRef< CExpressionBase > const & Name() const
Definition Expression.h:1384
TSRef< CExpressionBase > & Name()
Definition Expression.h:1385
TArray< CClause > & Clauses()
Definition Expression.h:1391
TArray< CClause > const & Clauses() const
Definition Expression.h:1390
TSRef< CExpressionBase > && TakeName()
Definition Expression.h:1388
void SetName(TSRef< CExpressionBase > &&NewName)
Definition Expression.h:1386
Definition Expression.h:1872
CExprMakeArray(int32_t ReserveSubExprNum)
Definition Expression.h:1874
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1882
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1883
const CArrayType * GetArrayType(const CSemanticProgram &Program) const
Definition Expression.h:1876
Definition Expression.h:1892
const CMapType * GetMapType(const CSemanticProgram &Program) const
Definition Expression.h:1896
virtual UE_API bool CanFail(const CAstPackage *Package) const override
Definition Expression.cpp:737
CExprMakeMap(int32_t ReserveSubExprNum=0)
Definition Expression.h:1894
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1903
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1902
Definition Expression.h:3423
const CSymbol & GetName() const
Definition Expression.h:3437
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:3458
void SetNameIdentifier(TSPtr< CExpressionBase > NameIdentifier)
Definition Expression.h:3439
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:3464
const TSPtr< CExpressionBase > & GetNameIdentifier() const
Definition Expression.h:3438
virtual bool operator==(const CExpressionBase &Right) const override
Definition Expression.h:3445
CExprMakeNamed(const CSymbol Name)
Definition Expression.h:3425
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:3475
void SetValue(TSPtr< CExpressionBase > Value)
Definition Expression.h:3441
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3443
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:3470
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3442
const TSPtr< CExpressionBase > & GetValue() const
Definition Expression.h:3440
CExprMakeNamed(const CSymbol Name, TSPtr< CExpressionBase > &&NameIdentifier, TSPtr< CExpressionBase > &&Argument)
Definition Expression.h:3430
Definition Expression.h:1845
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:672
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:1861
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1860
CExprMakeOption(const CTypeBase *Type, TSPtr< CExpressionBase > &&Operand)
Definition Expression.h:1848
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1862
COptionType const * GetOptionType(const CSemanticProgram &Program) const
Definition Expression.h:1854
Definition Expression.h:1932
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:1952
TSRef< CExpressionBase > _Lhs
Definition Expression.h:1934
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:1947
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:760
void SetLhs(TSRef< CExpressionBase > &&Lhs)
Definition Expression.h:1942
CExprMakeRange(TSRef< CExpressionBase > &&Lhs, TSRef< CExpressionBase > &&Rhs)
Definition Expression.h:1937
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1948
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1946
void SetRhs(TSRef< CExpressionBase > &&Rhs)
Definition Expression.h:1943
TSRef< CExpressionBase > _Rhs
Definition Expression.h:1935
Definition Expression.h:1912
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1922
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1923
const CTupleType * GetTupleType(const CSemanticProgram &Program) const
Definition Expression.h:1916
Definition Expression.h:2334
virtual UE_API const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.cpp:683
bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2345
void SetValueTypeAst(TSRef< CExpressionBase > &&ValueTypeAst)
Definition Expression.h:2351
const TSRef< CExpressionBase > & ValueTypeAst() const
Definition Expression.h:2350
const CMapType * GetMapType() const
Definition Expression.h:2353
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2343
const TArray< TSRef< CExpressionBase > > & KeyTypeAsts() const
Definition Expression.h:2347
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2344
void SetKeyTypeAst(TSRef< CExpressionBase > &&KeyTypeAst, int32_t Index)
Definition Expression.h:2348
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:2363
CExprMapTypeFormer(TArray< TSRef< CExpressionBase > > &&KeyTypeAsts, TSRef< CExpressionBase > &&ValueTypeAst)
Definition Expression.h:2337
Definition Expression.h:2849
bool _bLegacyPublic
Definition Expression.h:2853
virtual UE_API const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.cpp:1382
UE_API ~CExprModuleDefinition()
Definition Expression.cpp:1364
CExprModuleDefinition(const CUTF8StringView &Name, EVstMappingType VstMappingType=EVstMappingType::Ast)
Definition Expression.h:2855
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2862
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:2867
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:2866
CUTF8String _Name
Definition Expression.h:2851
CModulePart * _SemanticModule
Definition Expression.h:2852
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2864
virtual bool CanBePathSegment(const TMacroSymbols &MacroSymbols) const override
Definition Expression.h:2868
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2863
Definition Expression.h:2045
CExprNewPointer(const CPointerType *PointerType, const CCaptureControlScope *LiveScope, TSRef< CExpressionBase > Value)
Definition Expression.h:2050
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2059
const TSRef< CExpressionBase > _Value
Definition Expression.h:2048
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:2062
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:2058
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2060
const CCaptureControlScope * _LiveScope
Definition Expression.h:2047
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:921
Definition Expression.h:603
ULANG_FORCEINLINE CExprNumber()
Definition Expression.h:614
Float _FloatValue
Definition Expression.h:608
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:629
UE_API void SetFloatValue(CSemanticProgram &, Float)
Definition Expression.cpp:168
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:631
Integer _IntValue
Definition Expression.h:607
Integer GetIntValue() const
Definition Expression.h:624
Float GetFloatValue() const
Definition Expression.h:626
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:630
UE_API void SetIntValue(CSemanticProgram &, Integer)
Definition Expression.cpp:161
bool IsFloat() const
Definition Expression.h:623
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:635
Definition Expression.h:2372
const COptionType * GetOptionType() const
Definition Expression.h:2381
CExprOptionTypeFormer(TSRef< CExpressionBase > &&InnerTypeAst)
Definition Expression.h:2375
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2377
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2378
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2379
Definition Expression.h:746
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:754
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:753
const CSymbol _Symbol
Definition Expression.h:748
CExprPathPlusSymbol(const CSymbol &Symbol)
Definition Expression.h:750
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:755
Definition Expression.h:727
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:736
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:739
CExprPath(CUTF8String Path)
Definition Expression.h:732
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:737
CUTF8String _Path
Definition Expression.h:730
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:735
Definition Expression.h:1994
CExprPointerToReference(TSRef< CExpressionBase > &&Variable, bool bWritable=true)
Definition Expression.h:1996
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2005
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2004
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:2003
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:844
virtual UE_API const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.cpp:861
Definition Expression.h:3277
virtual const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.h:3282
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:3281
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:3285
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3280
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3279
TSPtr< uLang::CExpressionBase > _UserTag
Definition Expression.h:3297
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:3283
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:3291
Definition Expression.h:1827
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1837
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1836
CExprQueryValue(TSRef< CExpressionBase > &&Operand)
Definition Expression.h:1830
Definition Expression.h:2256
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2259
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2258
Definition Expression.h:2573
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2576
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2575
Definition Expression.h:2070
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2077
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2078
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:2075
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2076
Definition Expression.h:2113
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2131
virtual bool MayHaveAttributes() const override
Definition Expression.h:2134
CExprReturn()
Definition Expression.h:2116
void SetFunction(const CFunction *Function)
Definition Expression.h:2127
CExprReturn(TSPtr< CExpressionBase > &&Result, const CFunction *Function=nullptr)
Definition Expression.h:2117
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:2129
const CFunction * Function() const
Definition Expression.h:2126
const TSPtr< CExpressionBase > & Result() const
Definition Expression.h:2123
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2137
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:2130
void SetResult(TSPtr< CExpressionBase > &&Result)
Definition Expression.h:2124
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2132
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:2136
virtual UE_API const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.cpp:981
Definition Expression.h:2245
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2248
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2247
Definition Expression.h:2589
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2592
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2591
Definition Expression.h:2899
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2909
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:2910
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2908
TSRef< CScopedAccessLevelDefinition > _AccessLevelDefinition
Definition Expression.h:2901
virtual UE_API void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.cpp:1477
TArray< TSRef< CExpressionBase > > _ScopeReferenceExprs
Definition Expression.h:2902
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2907
UE_API ~CExprScopedAccessLevelDefinition()
Definition Expression.cpp:1462
Definition Expression.h:915
virtual const CDefinition * IdentifierDefinition() const override
This is specifically named as such to avoid shadowing other virtual methods (such as on CNominalType)...
Definition Expression.h:925
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:923
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:924
CExprSelf(const CTypeBase *Type, TSPtr< CExpressionBase > &&Qualifier=nullptr)
Definition Expression.h:917
Definition Expression.h:2018
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:898
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2032
CExprSet(bool bIsLive, TSPtr< CExpressionBase > Operand, EVstMappingType VstMappingType=EVstMappingType::Ast)
Definition Expression.h:2020
bool _bIsLive
Definition Expression.h:2037
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:2033
const CCaptureControlScope * _LiveScope
Definition Expression.h:2038
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2034
CExprSet(bool bIsLive, const CCaptureControlScope *LiveScope, TSPtr< CExpressionBase > Operand, EVstMappingType VstMappingType=EVstMappingType::Ast)
Definition Expression.h:2025
Definition Expression.h:1740
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1748
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1745
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:1747
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:600
CExprShortCircuitAnd(TSPtr< CExpressionBase > &&Lhs, TSPtr< CExpressionBase > &&Rhs)
Definition Expression.h:1743
virtual const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.h:1746
Definition Expression.h:1757
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:1770
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:613
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1769
CExprShortCircuitOr(TSPtr< CExpressionBase > &&Lhs, TSPtr< CExpressionBase > &&Rhs, const CTypeBase *JoinType=nullptr)
Definition Expression.h:1760
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1771
Definition Expression.h:2830
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2839
CExprSnippet(const CUTF8StringView &Path)
Definition Expression.h:2835
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2838
CSnippet * _SemanticSnippet
Definition Expression.h:2833
virtual UE_API const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.cpp:1342
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:2842
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2837
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:2841
CUTF8String _Path
Definition Expression.h:2832
Definition Expression.h:2642
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2645
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2644
Definition Expression.h:706
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:720
CExprString(CUTF8String String)
Definition Expression.h:713
CUTF8String _String
Definition Expression.h:711
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:717
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:718
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:716
Definition Expression.h:2600
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:2611
void SetExpr(TSPtr< CExpressionBase > &&Expr)
Definition Expression.h:2607
TSPtr< CExpressionBase > _BlockExpr
Definition Expression.h:2603
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:2610
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2612
const TSPtr< CExpressionBase > & Expr() const
Definition Expression.h:2608
Definition Expression.h:2389
ETypeConstraintFlags _SubtypeConstraint
Definition Expression.h:2400
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2394
virtual CUTF8String GetErrorDesc() const override
Definition Expression.cpp:700
CExprSubtype(TSRef< CExpressionBase > &&InnerTypeAst)
Construct an expression that takes the ValueType and forms an option of ValueType.
Definition Expression.h:2392
UE_API const CTypeType & GetSubtypeType() const
Definition Expression.cpp:707
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:2396
Definition Expression.h:2234
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2237
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2236
Definition Expression.h:2558
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2560
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2561
Definition Expression.h:1556
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:1576
TSPtr< CExpressionBase > _ElemIdxExpr
Definition Expression.h:1567
TSPtr< CExpressionBase > _TupleExpr
Definition Expression.h:1560
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:559
Integer _ElemIdx
Definition Expression.h:1563
CExprTupleElement(TSPtr< CExpressionBase > TupleExpr, Integer ElemIdx, const Verse::Vst::Node *MappedVstNode)
Definition Expression.h:1570
CExprTupleElement(CExprInvocation &Invocation)
Definition Expression.h:1569
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:1575
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:1574
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:1573
virtual UE_API bool CanFail(const CAstPackage *Package) const override
Definition Expression.cpp:572
Definition Expression.h:2405
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:718
CExprTupleType(int32_t ReserveTypeExprNum=0)
Definition Expression.h:2408
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2419
TSPtrArray< CExpressionBase > _ElementTypeExprs
Definition Expression.h:2431
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:2420
void ReplaceElementTypeExpr(TSPtr< CExpressionBase > &&TypeExpr, int32_t Index)
Definition Expression.h:2412
const CTupleType * GetTupleType() const
Definition Expression.h:2423
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2418
const TSPtrArray< CExpressionBase > & GetElementTypeExprs() const
Definition Expression.h:2410
TSPtrArray< CExpressionBase > & GetElementTypeExprs()
Definition Expression.h:2411
Definition Expression.h:3240
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3248
const TSRef< CTypeAlias > _TypeAlias
Definition Expression.h:3242
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:3249
UE_API ~CExprTypeAliasDefinition()
Definition Expression.cpp:1764
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3247
Base class for all expressions that form a type out of input type(s)
Definition Expression.h:2265
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:2273
const CTypeType * _TypeType
Definition Expression.h:2269
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:2271
virtual const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.h:2272
Definition Expression.h:850
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:875
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:874
CExprType(TSRef< CExpressionBase > &&AbstractValue, const CTypeType &TypeType)
Definition Expression.h:855
const CTypeType * GetTypeType() const
Definition Expression.h:861
const TSRef< CExpressionBase > _AbstractValue
Definition Expression.h:853
const CTypeBase * GetType() const
Definition Expression.h:866
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:873
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:872
Definition Expression.h:1656
CExprUnaryArithmetic(EOp Op, TSRef< CExpressionBase > &&Rhs)
Definition Expression.h:1663
EOp
Definition Expression.h:1659
EOp Op() const
Definition Expression.h:1673
void SetOperand(TSPtr< CExpressionBase > &&NewOperand)
Definition Expression.h:1670
TSPtr< CExpressionBase > && TakeOperand()
Definition Expression.h:1671
TSRef< CExpressionBase > Operand() const
Definition Expression.h:1669
Definition Expression.h:1634
CExprUnaryOp(TSPtr< CExpressionBase > &&Operand, EVstMappingType VstMappingType=EVstMappingType::Ast)
Definition Expression.h:1636
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:1646
TSPtr< CExpressionBase > && TakeOperand()
Definition Expression.h:1643
void SetOperand(TSPtr< CExpressionBase > &&Operand)
Definition Expression.h:1644
const TSPtr< CExpressionBase > & Operand() const
Definition Expression.h:1642
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:1647
Definition Expression.h:2278
void SetInnerTypeAst(TSRef< CExpressionBase > &&InnerTypeAst)
Definition Expression.h:2284
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:2290
const TSRef< CExpressionBase > & GetInnerTypeAst() const
Definition Expression.h:2283
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:2287
CExprUnaryTypeFormer(TSRef< CExpressionBase > &&InnerTypeAst)
Definition Expression.h:2281
Definition Expression.h:2732
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2738
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2736
Definition Expression.h:3256
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3266
const CModule * _Module
Definition Expression.h:3259
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:3267
TSRef< CExpressionBase > _Context
Definition Expression.h:3261
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3265
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:3269
virtual UE_API const CTypeBase * GetResultType(const CSemanticProgram &Program) const override
Definition Expression.cpp:1783
virtual UE_API void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.cpp:1788
CExprUsing(TSRef< CExpressionBase > &&Context)
Definition Expression.h:3263
Definition Expression.h:3388
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:1853
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3398
CExprVar(bool bIsLive, TSPtr< CExpressionBase > Operand, EVstMappingType VstMappingType=EVstMappingType::Ast)
Definition Expression.h:3390
bool _bIsLive
Definition Expression.h:3401
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3396
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:3397
Definition Expression.h:2742
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:2746
const CCaptureControlScope * _DomainScope
Definition Expression.h:2750
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:2748
Definition Expression.h:3327
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:3351
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3337
virtual bool operator==(const CExpressionBase &Right) const override
Definition Expression.h:3339
void SetLhs(TSPtr< CExpressionBase > NewLhs)
Definition Expression.h:3372
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3335
void SetRhs(TSPtrArray< CExpressionBase > NewRhs)
Definition Expression.h:3377
const TSPtrArray< CExpressionBase > & Rhs() const
Definition Expression.h:3362
TSPtrArray< CExpressionBase > & Rhs()
Definition Expression.h:3367
const TSPtr< CExpressionBase > & Lhs() const
Definition Expression.h:3357
CExprWhere(TSRef< CExpressionBase > &&Lhs, TSPtrArray< CExpressionBase > &&Rhs)
Definition Expression.h:3329
Definition Expression.h:387
EInvokeTime DetermineInvokeTime(const CSemanticProgram &Program) const
Definition Expression.h:417
TOptional< SAnalysisResult > _Report
Definition Expression.h:472
CExpressionBase(EVstMappingType VstMappingType=EVstMappingType::Ast)
Definition Expression.h:390
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:403
UE_API void SetResultType(const CTypeBase *InResultType)
Definition Expression.cpp:61
bool operator!=(const CExpressionBase &Other) const
Definition Expression.h:442
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const
Definition Expression.h:420
const CTypeBase * IrGetResultType() const
Definition Expression.h:450
static bool BaseCompare(const CExpressionBase &A, const CExpressionBase &B)
Definition Expression.h:435
virtual CExpressionBase * AsExpression() override
Definition Expression.h:396
static bool AreSubExprsEqual(const TRange1 &, const TRange2 &)
static bool IsSubExprEqual(const CExpressionBase *Lhs, const CExpressionBase *Rhs)
Definition Expression.h:3634
bool IsAnalyzed() const
Definition Expression.h:431
virtual UE_API const CTypeBase * GetResultType(const CSemanticProgram &Program) const
Definition Expression.cpp:53
virtual const CExpressionBase * AsExpression() const override
Definition Expression.h:395
virtual bool CanBePathSegment(const TMacroSymbols &MacroSymbols) const
Definition Expression.h:402
void IrSetResultType(const CTypeBase *TypeBase)
Definition Expression.h:451
CExpressionBase(const CTypeBase *InResultType)
Definition Expression.h:391
virtual bool CanFail(const CAstPackage *Package) const
Definition Expression.h:423
virtual bool MayHaveAttributes() const override
Definition Expression.h:397
virtual bool operator==(const CExpressionBase &Other) const =0
UE_API void RefineResultType(const CTypeBase *RefinedResultType)
Definition Expression.cpp:69
Definition SemanticTypes.h:1055
Definition SemanticFunction.h:75
Definition SemanticTypes.h:851
Definition SemanticInterface.h:25
Definition Expression.h:3026
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:3037
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3033
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:3038
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:1115
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:3039
TSRef< CExpressionBase > _Source
Definition Expression.h:3041
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3034
CIrArrayAdd(TSRef< CExpressionBase > &&Source)
Definition Expression.h:3028
Definition Expression.h:3067
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:3093
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3075
virtual UE_API bool operator==(const CExpressionBase &) const override
Definition Expression.cpp:1167
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3077
TSRef< CExpressionBase > _Callee
Definition Expression.h:3099
CIrArrayUnsafeCall(TSRef< CExpressionBase > &&Callee, TSRef< CExpressionBase > &&Arguments)
Definition Expression.h:3069
TSRef< CExpressionBase > _Argument
Definition Expression.h:3100
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:3086
virtual const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.h:3081
Definition Expression.h:3123
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3129
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:3131
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:3128
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3130
Definition Expression.h:3107
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3114
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:3112
virtual bool operator==(const CExpressionBase &Other) const override
Definition Expression.h:3115
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3113
Definition Expression.h:3195
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:3205
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:3206
void SetBody(TSPtr< CExpressionBase > &&Body)
Definition Expression.h:3201
CIrForBody(TSPtr< CExpressionBase > &&Body)
Definition Expression.h:3197
virtual UE_API const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.cpp:1260
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3208
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:1266
TSPtr< CExpressionBase > _Body
Definition Expression.h:3214
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:3204
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3209
Definition Expression.h:3139
virtual UE_API bool operator==(const CExpressionBase &Other) const override
Definition Expression.cpp:1218
TSPtr< CExpressionBase > _Body
Definition Expression.h:3187
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3179
const TSRef< CExprDefinition > _Definition
Definition Expression.h:3147
TSPtr< CControlScope > _AssociatedScope
Definition Expression.h:3184
bool _bGenerateResult
Definition Expression.h:3142
virtual void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.h:3166
virtual void VisitImmediates(SAstVisitor &Visitor) const override
Definition Expression.h:3167
CIrFor(const TSRef< CDataDefinition > &KeyMember, const TSRef< CDataDefinition > &DataMember, TSPtr< CExpressionBase > &&Element, TSPtr< CExpressionBase > &&ValueDomain, TSPtr< CExpressionBase > &&Value)
Definition Expression.h:3155
const TSRef< CDataDefinition > _DataMember
Definition Expression.h:3146
virtual bool CanFail(const CAstPackage *Package) const override
Definition Expression.h:3165
bool _bCanFail
Definition Expression.h:3143
virtual UE_API const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &Program) const override
Definition Expression.cpp:1207
CIrFor(const TSRef< CDataDefinition > &DataMember, TSPtr< CExpressionBase > &&Element, TSPtr< CExpressionBase > &&ValueDomain, TSPtr< CExpressionBase > &&Value)
Definition Expression.h:3149
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3178
void SetBody(TSPtr< CExpressionBase > &&Body)
Definition Expression.h:3162
bool _bOutermost
Definition Expression.h:3141
const TSPtr< CDataDefinition > _KeyMember
Definition Expression.h:3145
Definition Expression.h:3046
virtual UE_API void VisitChildren(SAstVisitor &Visitor) const override
Definition Expression.cpp:1157
virtual UE_API const CExpressionBase * FindFirstAsyncSubExpr(const CSemanticProgram &) const override
Definition Expression.cpp:1143
virtual UE_API bool operator==(const CExpressionBase &) const override
Definition Expression.cpp:1131
virtual EAstNodeType GetNodeType() const override
Definition Expression.h:3055
TSRef< CExpressionBase > _Value
Definition Expression.h:3063
virtual UE_API bool CanFail(const CAstPackage *Package) const override
Definition Expression.cpp:1152
CIrMapAdd(TSRef< CExpressionBase > &&Key, TSRef< CExpressionBase > &&Value)
Definition Expression.h:3048
TSRef< CExpressionBase > _Key
Definition Expression.h:3062
virtual CUTF8String GetErrorDesc() const override
Definition Expression.h:3056
Definition SemanticTypes.h:880
Definition Expression.h:2809
void AppendMember(TSRef< CExpressionBase > &&Member)
Definition Expression.h:2816
CMemberDefinitions()
Definition Expression.h:2811
void PrependMember(TSRef< CExpressionBase > &&Member)
Definition Expression.h:2817
void SetMembers(TArray< TSRef< CExpressionBase > > &&Members)
Definition Expression.h:2815
void VisitMembers(SAstVisitor &Visitor) const
Definition Expression.h:2820
void SetMember(TSRef< CExpressionBase > &&Member, int32_t Index)
Definition Expression.h:2818
CMemberDefinitions(TArray< TSRef< CExpressionBase > > &&Members)
Definition Expression.h:2812
const TArray< TSRef< CExpressionBase > > & Members() const
Definition Expression.h:2814
Definition ModuleAlias.h:17
Definition SemanticProgram.h:150
Definition SemanticProgram.h:89
ULANG_FORCEINLINE CUTF8StringView AsNameStringView() const
Definition Named.h:44
ULANG_FORCEINLINE const CSymbol & GetName() const
Definition Named.h:41
Class defining instance and class objects.
Definition SemanticTypes.h:608
TType & AsChecked()
Definition SemanticTypes.h:224
Definition SemanticTypes.h:760
Definition SemanticTypes.h:685
Definition SemanticScope.h:73
Definition SemanticProgram.h:277
Definition SharedPointer.h:28
Definition SemanticProgram.h:179
Symbol representing a text string with an associated id.
Definition Symbol.h:98
ULANG_FORCEINLINE CUTF8StringView AsStringView() const
Definition Symbol.h:107
ULANG_FORCEINLINE bool IsNull() const
Definition Symbol.h:103
ULANG_FORCEINLINE CUTF8String AsString() const
Definition Symbol.h:106
Definition SemanticTypes.h:1008
Definition TypeAlias.h:55
Base class for all types.
Definition SemanticTypes.h:138
virtual const CNormalType & GetNormalType() const =0
Definition SemanticTypes.h:381
const CTypeBase * PositiveType() const
Definition SemanticTypes.h:406
const CTypeBase * NegativeType() const
Definition SemanticTypes.h:404
Definition TypeVariable.h:21
Definition UTF8StringView.h:15
static UE_API SUTF8CodePoint EncodeUTF8(UniCodePoint CodePoint)
Definition Unicode.cpp:222
Definition Array.h:51
Definition SharedPointerArray.h:21
Definition SharedPointer.h:77
ULANG_FORCEINLINE ObjectType * Get() const
Definition SharedPointer.h:111
ULANG_FORCEINLINE TSPtrG< OtherObjectType, AllowNull, AllocatorType, AllocatorArgsType... > & As()
Definition SharedPointer.h:135
Definition VerseScope.h:13
@ Visitor
Definition XmppMultiUserChat.h:94
NodeType
Definition VstNode.h:102
const char * BinaryCompareOpAsCString(BinaryOpCompare::op Op)
Definition VstNode.h:1345
const char * AssignmentOpAsCString(Assignment::EOp Op)
Definition VstNode.h:1195
Definition VVMEngineEnvironment.h:23
EMacroClauseTag
Definition Expression.h:1302
const char * MacroClauseFormAsCString(Verse::Vst::Clause::EForm Form)
Definition Expression.h:1324
EInvokeTime
Definition Expression.h:202
const CExpressionBase * RemoveSubscripts(const CExpressionBase *Expr, const CSemanticProgram &Program)
Definition Expression.cpp:2074
bool IsConstructorInvocation(const CExprInvocation &Invocation)
Definition Expression.cpp:544
const CExprInvocation * AsSubscriptCall(const CExpressionBase *Expr, const CSemanticProgram &Program)
Definition Expression.cpp:2052
bool HasImplicitClassSelf(const CExprIdentifierData *Expr)
Definition Expression.cpp:2034
TOptional< SAssignmentLhsIdentifier > IdentifierOfAssignmentLhs(const CExprAssignment *Assignment)
Definition Expression.cpp:2015
Traits::TResult AsNullable(TIn Expr)
Definition Expression.h:3712
uLang::TUTF8String< CHeapRawAllocator > CUTF8String
A string allocated on the heap.
Definition UTF8String.h:269
SAstNodeTypeInfo GetAstNodeTypeInfo(EAstNodeType NodeType)
Definition Expression.cpp:21
uint8_t UTF8Char
UTF-8 octet.
Definition Unicode.h:20
constexpr SEffectSet operator|(const EEffect Lhs, const EEffect Rhs)
Definition Effects.h:203
int64_t Integer
Definition Common.h:329
ULANG_FORCEINLINE T && ForwardArg(typename TRemoveReference< T >::Type &Obj)
Definition References.h:115
constexpr bool HasAnyTags(EMacroClauseTag A, EMacroClauseTag B)
Definition Expression.h:1309
const char * MacroClauseTagAsCString(EMacroClauseTag Tag)
Definition Expression.h:1314
const char * AsStringLiteral(EAstNodeType Node)
Definition Expression.h:3727
EVstMappingType
Definition Expression.h:289
ETypeConstraintFlags
Definition SemanticTypes.h:127
EAstNodeType
Definition Expression.h:183
VISIT_AST_NODE_TYPE(Name, Class)
ULANG_FORCEINLINE TRemoveReference< T >::Type && Move(T &&Obj)
Definition References.h:86
constexpr bool HasAllTags(EMacroClauseTag A, EMacroClauseTag RequiredTags)
Definition Expression.h:1310
const CExprIdentifierFunction * GetConstructorInvocationCallee(const CExprInvocation &Invocation)
Definition Expression.cpp:520
bool IsClassMemberAccess(const CExprIdentifierData *Expr)
Definition Expression.cpp:2047
EPackageRole
Definition PackageRole.h:15
double Float
Default size for uLang Integer Type.
Definition Common.h:330
const char * InvokeTimeAsCString(EInvokeTime InvokeTime)
Definition Expression.h:208
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition VstNode.h:1171
EOp
Definition VstNode.h:1173
op
Definition VstNode.h:1321
Definition VstNode.h:763
EForm
Definition VstNode.h:766
Definition VstNode.h:1131
Definition VstNode.h:924
Definition VstNode.h:150
Definition VstNode.h:940
Definition Expression.h:466
bool operator==(const SAnalysisResult &Other) const
Definition Expression.h:467
const CTypeBase * ResultType
Definition Expression.h:469
Definition Expression.h:1621
TSPtr< CExprPointerToReference > PointerToReference
Definition Expression.h:1622
TSPtr< CExprIdentifierData > IdentifierData
Definition Expression.h:1623
Definition Expression.h:190
const char * _EnumeratorName
Definition Expression.h:191
const char * _CppClassName
Definition Expression.h:192
Definition Expression.h:224
void VisitArray(const char *FieldName, const TSPtrArrayG< NodeType, bAllowNull, ElementAllocatorType, RawAllocatorArgTypes... > &Array)
Definition Expression.h:274
virtual void BeginArray(const char *FieldName, intptr_t Num)
Definition Expression.h:237
virtual void EndArray()
Definition Expression.h:239
void Visit(const char *FieldName, const TSPtrG< NodeType, bAllowNull, AllocatorType, AllocatorArgTypes... > &NodePointer)
Definition Expression.h:242
virtual void VisitImmediate(const char *FieldName, const CDefinition &Definition)
Definition Expression.h:231
virtual void VisitImmediate(const char *FieldName, const Verse::Vst::Node &VstNode)
Definition Expression.h:232
virtual void VisitImmediate(const char *FieldName, CUTF8StringView Value)
Definition Expression.h:226
virtual void VisitImmediate(const char *FieldName, double Value)
Definition Expression.h:228
void VisitArray(const char *FieldName, const TArrayG< TSPtrG< NodeType, bAllowNull, NodeAllocatorType >, ElementAllocatorType, ElementAllocatorArgTypes... > &Array)
Definition Expression.h:260
virtual void VisitElement(CAstNode &AstNode)=0
void VisitElement(const TSPtrG< NodeType, bAllowNull, AllocatorType, AllocatorArgTypes... > &NodePointer)
Definition Expression.h:251
virtual void Visit(const char *FieldName, CAstNode &AstNode)=0
void VisitImmediate(const char *FieldName, const char *CString)
Definition Expression.h:234
virtual void VisitImmediate(const char *FieldName, const CTypeBase *Type)
Definition Expression.h:230
virtual void VisitImmediate(const char *FieldName, int64_t Value)
Definition Expression.h:227
virtual void VisitImmediate(const char *FieldName, bool Value)
Definition Expression.h:229
Definition Unicode.h:33
static TResult Cast(CExpressionBase *X)
Definition Expression.h:3698
TOut * TResult
Definition Expression.h:3697
static TResult Cast(TSPtr< CExpressionBase > X)
Definition Expression.h:3684
static TResult Cast(TSRef< CExpressionBase > X)
Definition Expression.h:3691
const TOut * TResult
Definition Expression.h:3704
static TResult Cast(const CExpressionBase *X)
Definition Expression.h:3705
Definition Expression.h:3678
Definition Expression.h:3615
virtual void VisitElement(CAstNode &AstNode) override
Definition Expression.h:3619
virtual void Visit(const char *FieldName, CAstNode &AstNode) override
Definition Expression.h:3618
TAstFunctionVisitor(FunctionType &&Function)
Definition Expression.h:3617
FunctionType _Function
Definition Expression.h:3616
Definition Optional.h:23