19#define UE_API VERSECOMPILER_API
26class CAstCompilationUnit;
27class CCaptureControlScope;
30class CClassDefinition;
41class CSemanticAnalyzerImpl;
42class CSemanticProgram;
43class CScopedAccessLevelDefinition;
231 template <
typename T>
234 template <
typename T,
typename U>
259 template<
typename FilterClass>
269 template<
typename FilterClass>
301 return _NextDefinitionOrdinal++;
335 int32_t _NextDefinitionOrdinal{ 0 };
338template<
typename FilterClass>
344template<
typename FilterClass>
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_API
Definition SColorGradingComponentViewer.h:12
#define ULANG_FORCEINLINE
Definition Common.h:188
#define ULANG_ASSERTF(expr, format,...)
Definition Common.h:290
Definition Expression.h:3560
Definition Expression.h:3494
Definition CaptureScope.h:13
Definition SemanticClass.h:207
Definition SemanticClass.h:33
Definition DataDefinition.h:41
Definition Definition.h:131
Definition SemanticFunction.h:75
Definition SemanticScope.h:242
int32_t AllocateNextDefinitionOrdinal()
Definition SemanticScope.h:299
UE_API EIterateResult IterateRecurseLogicalScopes(const TFunction< EVisitResult(const CLogicalScope &)> &Functor) const
Iterates through all the logical scopes nested inside this scope.
Definition SemanticScope.cpp:810
SemanticRevision _CumulativeRevision
When anything in this class (methods, data members etc.) or its subclasses was last modified/deleted.
Definition SemanticScope.h:319
virtual UE_API ~CLogicalScope()
Definition SemanticScope.cpp:799
virtual UE_API SmallDefinitionArray FindDefinitions(const CSymbol &Name, EMemberOrigin Origin=EMemberOrigin::InheritedOrOriginal, const SQualifier &Qualifier=SQualifier::Unknown(), const CAstPackage *ContextPackage=nullptr, VisitStampType VisitStamp=GenerateNewVisitStamp()) const
Definition SemanticScope.cpp:836
FilterClass * FindFirstDefinitionOfKind(const CSymbol &Name, EMemberOrigin Origin=EMemberOrigin::InheritedOrOriginal, const SQualifier &Qualifier=SQualifier::Unknown(), const CAstPackage *ContextPackage=nullptr, VisitStampType VisitStamp=GenerateNewVisitStamp()) const
Definition SemanticScope.h:345
TMap< CSymbol, SmallDefinitionArray > & GetDefinitionNameMap()
Definition SemanticScope.h:257
CLogicalScope(const CLogicalScope &)=delete
UE_API SQualifier AsQualifier() const
Definition SemanticScope.cpp:887
TFilteredDefinitionRange< FilterClass > GetDefinitionsOfKind() const
Definition SemanticScope.h:339
virtual UE_API void SetRevision(SemanticRevision Revision)
Definition SemanticScope.cpp:864
const TArray< TSRef< CDefinition > > & GetDefinitions() const
Definition SemanticScope.h:256
CLogicalScope(EKind Kind, CScope *Parent, CSemanticProgram &Program)
Definition SemanticScope.h:245
ULANG_FORCEINLINE bool TryMarkVisited(VisitStampType VisitStamp) const
Definition SemanticScope.h:283
CLogicalScope(CLogicalScope &&)=delete
void AddDefinitionToLogicalScope(TSRef< CDefinition > &&NewDefinition)
Definition SemanticScope.cpp:905
virtual const CLogicalScope * AsLogicalScopeNullable() const override
Iff this scope is a logical scope, return it a pointer to it. Otherwise, return null.
Definition SemanticScope.h:308
UE_API const CDefinition * FindOverrideFor(const CDefinition &Definition) const
Get the matching override definition in this class for the argument, if there is any.
Definition SemanticScope.cpp:875
virtual CLogicalScope * AsLogicalScopeNullable() override
Definition SemanticScope.h:309
SemanticRevision GetRevision() const
Definition SemanticScope.h:278
VisitStampType _LastVisitStamp
Definition SemanticScope.h:322
Definition SemanticProgram.h:150
Definition SemanticProgram.h:89
Definition SemanticScope.h:73
TSRef< CCaptureControlScope > CreateNestedCaptureControlScope()
Definition SemanticScope.cpp:549
UE_API SResolvedDefinitionArray ResolveDefinition(const CSymbol &Name, const SQualifier &Qualifier=SQualifier::Unknown(), const CAstPackage *ContextPackage=nullptr) const
Look for a definition in this scope and all parent scopes and aliases.
Definition SemanticScope.cpp:452
virtual UE_API ~CScope()
Definition SemanticScope.cpp:33
UE_API TSRef< CModuleAlias > CreateModuleAlias(const CSymbol Name)
Definition SemanticScope.cpp:404
UE_API const CModule * GetModule() const
Definition SemanticScope.cpp:158
virtual SAccessLevel GetDefaultDefinitionAccessLevel() const
Definition SemanticScope.h:103
UE_API TSRef< CTypeVariable > CreateTypeVariable(const CSymbol Name, const CTypeBase *NegativeType, const CTypeBase *PositiveType)
Definition SemanticScope.cpp:397
bool IsModuleOrSnippet() const
Definition SemanticScope.h:149
static UE_API const char * KindToCString(EKind Kind)
Definition SemanticScope.cpp:770
UE_API const CLogicalScope & GetLogicalScope() const
Get the innermost logical scope that is or contains this scope.
Definition SemanticScope.cpp:264
const TArray< const CDataDefinition * > & GetUsingInstances() const
Definition SemanticScope.h:174
friend class CSemanticAnalyzerImpl
Definition SemanticScope.h:201
UE_API CEnumeration & CreateEnumeration(const CSymbol &EnumerationName)
Definition SemanticScope.cpp:356
UE_API TSRef< CFunction > CreateFunction(const CSymbol FunctionName)
Definition SemanticScope.cpp:364
virtual void CreateNegativeDataDefinition(const CDataDefinition &PositiveDataDefinition) const
Definition SemanticScope.h:162
UE_API CAstPackage * GetPackage() const
Definition SemanticScope.cpp:189
CScope * _Parent
Definition SemanticScope.h:213
UE_API TSRef< CScopedAccessLevelDefinition > CreateScopedAccessLevelDefinition(TOptional< CSymbol > ClassName)
Definition SemanticScope.cpp:338
virtual const CDefinition * ScopeAsDefinition() const
Definition SemanticScope.h:101
UE_API bool CanAccessEpicInternal() const
Definition SemanticScope.cpp:764
TArray< const CLogicalScope * > _UsingScopes
Definition SemanticScope.h:219
UE_API CClassDefinition & CreateClass(const CSymbol &ClassName, CClass *Superclass=nullptr, TArray< CInterface * > &&SuperInterfaces={}, EStructOrClass StructOrClass=EStructOrClass::Class)
Definition SemanticScope.cpp:330
UE_API const CModulePart * GetModulePart() const
Definition SemanticScope.cpp:179
TArray< const CDataDefinition * > _UsingInstances
Definition SemanticScope.h:222
virtual void CreateNegativeFunction(const CFunction &PositiveFunction) const
Definition SemanticScope.h:159
ULANG_FORCEINLINE CSemanticProgram & GetProgram() const
Definition SemanticScope.h:121
ULANG_FORCEINLINE bool IsLogicalScope() const
Definition SemanticScope.h:134
void AddUsingScope(const CLogicalScope *UsingScope)
Definition SemanticScope.h:169
UE_API TSRef< CControlScope > CreateNestedControlScope()
Definition SemanticScope.cpp:543
UE_API bool IsInsideTypeScope() const
Definition SemanticScope.cpp:305
UE_API TSRef< CTypeAlias > CreateTypeAlias(const CSymbol Name)
Definition SemanticScope.cpp:390
UE_API bool IsSameOrChildOf(const CScope *Other) const
Definition SemanticScope.cpp:292
static UE_API void ResolvedDefnsAppend(SResolvedDefinitionArray *ResolvedDefns, const SmallDefinitionArray &Definitions)
Definition SemanticScope.cpp:434
ULANG_FORCEINLINE EKind GetKind() const
Definition SemanticScope.h:105
UE_API CInterface & CreateInterface(const CSymbol &InterfaceName, const TArray< CInterface * > &SuperInterfaces={})
Definition SemanticScope.cpp:348
CScope(const CScope &)=delete
const CLogicalScope * GetEnclosingClassOrInterface() const
Definition SemanticScope.h:136
const TArray< const CLogicalScope * > & GetUsingScopes() const
Definition SemanticScope.h:170
UE_API const TSPtr< CSymbolTable > & GetSymbols() const
Definition SemanticScope.cpp:248
UE_API const CScope & GetParametricTypeScope() const
If this is a parametric type, get the scope of those parameters; otherwise returns this scope.
Definition SemanticScope.cpp:253
EKind
Definition SemanticScope.h:76
virtual const CLogicalScope * AsLogicalScopeNullable() const
Iff this scope is a logical scope, return it a pointer to it. Otherwise, return null.
Definition SemanticScope.h:131
ULANG_FORCEINLINE CScope * GetParentScope() const
Definition SemanticScope.h:106
UE_API CAstCompilationUnit * GetCompilationUnit() const
Definition SemanticScope.cpp:205
UE_API CModule & CreateModule(const CSymbol &ModuleName)
Definition SemanticScope.cpp:321
UE_API CCaptureScope * GetCaptureScope()
Definition SemanticScope.cpp:238
virtual CLogicalScope * AsLogicalScopeNullable()
Definition SemanticScope.h:132
TSRefArray< CControlScope > _NestedControlScopes
Definition SemanticScope.h:225
UE_API CUTF8String GetScopePath(uLang::UTF8Char SeparatorChar='.', EPathMode Mode=EPathMode::Default) const
Definition SemanticScope.cpp:60
const TSRefArray< CControlScope > & GetNestedControlScopes() const
Definition SemanticScope.h:186
CSemanticProgram & _Program
Definition SemanticScope.h:216
CScope(EKind Kind, CScope *Parent, CSemanticProgram &Program)
Definition SemanticScope.h:92
ULANG_FORCEINLINE CLogicalScope & GetLogicalScope()
Definition SemanticScope.h:128
TSRefArray< CTypeScope > _NestedTypeScopes
Definition SemanticScope.h:228
UE_API const CSnippet * GetSnippet() const
Definition SemanticScope.cpp:211
UE_API CScope * GetScopeOfKind(EKind)
Definition SemanticScope.cpp:50
UE_API TSRef< CTypeScope > CreateNestedTypeScope()
Definition SemanticScope.cpp:556
UE_API bool IsAuthoredByEpic() const
Definition SemanticScope.cpp:753
UE_API bool CanAccess(const CDefinition &Definition, const SAccessLevel &DefinitionAccessLevel) const
Definition SemanticScope.cpp:652
virtual CSymbol GetScopeName() const =0
UE_API TSRef< CDataDefinition > CreateDataDefinition(const CSymbol VarName)
Definition SemanticScope.cpp:376
static UE_API VisitStampType GenerateNewVisitStamp()
Generates a new stamp id.
Definition SemanticScope.cpp:562
static UE_API void ResolvedDefnsAppendWithContext(SResolvedDefinitionArray *ResolvedDefns, const SmallDefinitionArray &Definitions, const CDataDefinition *Context)
Definition SemanticScope.cpp:443
UE_API const CDataDefinition * AddUsingInstance(const CDataDefinition *UsingContext)
Definition SemanticScope.cpp:411
EKind _Kind
Definition SemanticScope.h:210
bool IsControlScope() const
Definition SemanticScope.h:143
UE_API bool IsBuiltInScope() const
Definition SemanticScope.cpp:315
virtual const CTypeBase * ScopeAsType() const
Definition SemanticScope.h:100
Definition SemanticProgram.h:277
Definition SemanticProgram.h:179
Symbol representing a text string with an associated id.
Definition Symbol.h:98
Base class for all types.
Definition SemanticTypes.h:138
Filters a range of definitions to only include definitions of the kind corresponding to FilterClass.
Definition FilteredDefinitionRange.h:16
Definition Function.h:839
Definition SharedPointerArray.h:21
Definition SharedPointer.h:77
Definition VVMEngineEnvironment.h:23
EIterateResult
Iteration result returned from an iteration.
Definition Common.h:345
uint32_t VisitStampType
Used to mark scopes already visited during a search.
Definition VisitStamp.h:11
EStructOrClass
Definition StructOrClass.h:8
EPathMode
Definition SemanticScope.h:67
@ PackageRelativeWithRoot
uint32_t SemanticRevision
For storing revisions of functions, classes etc.
Definition Revision.h:11
uint8_t UTF8Char
UTF-8 octet.
Definition Unicode.h:20
EVisitResult
Result returned from a visitor functor indicating how to continue or to quit early.
Definition Common.h:337
EMemberOrigin
Specifies whether to find only member definitions originating in the current type,...
Definition MemberOrigin.h:10
Definition VstNode.h:1131
TNodeType * AsNullable()
Definition VstNode.h:211
Definition AccessLevel.h:15
Information about a given qualifier.
Definition Definition.h:35
static SQualifier Unknown()
Definition Definition.h:81
Definition SemanticScope.h:54
SResolvedDefinition(CDefinition *Definition, const CDataDefinition *Context)
Definition SemanticScope.h:59
SResolvedDefinition(CDefinition *Definition)
Definition SemanticScope.h:58
CDefinition * _Definition
Definition SemanticScope.h:55
const CDataDefinition * _Context
Definition SemanticScope.h:56