1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 19:48:20 +02:00
Beef/IDEHelper/Compiler/BfResolvePass.h

119 lines
3.6 KiB
C
Raw Normal View History

2019-08-23 11:56:54 -07:00
#pragma once
#include "BfSystem.h"
2020-06-02 05:46:56 -07:00
#include "BfResolvedTypeUtils.h"
#include "BfSourceClassifier.h"
2019-08-23 11:56:54 -07:00
NS_BF_BEGIN
enum BfResolveType
{
BfResolveType_None,
BfResolveType_Classify,
BfResolveType_ClassifyFullRefresh,
BfResolveType_Autocomplete,
BfResolveType_Autocomplete_HighPri,
BfResolveType_GoToDefinition,
2022-07-26 13:27:03 -04:00
BfResolveType_GetSymbolInfo,
2019-08-23 11:56:54 -07:00
BfResolveType_RenameSymbol,
BfResolveType_ShowFileSymbolReferences,
BfResolveType_GetNavigationData,
BfResolveType_GetCurrentLocation,
BfResolveType_GetFixits,
BfResolveType_GetTypeDefList,
BfResolveType_GetTypeDefInto,
BfResolveType_GetResultString,
BfResolveType_VerifyTypeName
2019-08-23 11:56:54 -07:00
};
class BfLocalVariable;
enum BfGetSymbolReferenceKind
{
BfGetSymbolReferenceKind_None,
BfGetSymbolReferenceKind_Local,
BfGetSymbolReferenceKind_Method,
BfGetSymbolReferenceKind_Field,
BfGetSymbolReferenceKind_Property,
BfGetSymbolReferenceKind_Type,
BfGetSymbolReferenceKind_TypeGenericParam,
2020-05-31 07:12:17 -07:00
BfGetSymbolReferenceKind_MethodGenericParam,
BfGetSymbolReferenceKind_Namespace
2019-08-23 11:56:54 -07:00
};
class BfEmitEmbedEntry
{
public:
int mCursorIdx;
int mRevision;
BfParser* mParser;
Array<BfSourceClassifier::CharData> mCharData;
public:
BfEmitEmbedEntry()
{
mCursorIdx = -1;
mRevision = -1;
mParser = NULL;
}
};
2019-08-23 11:56:54 -07:00
class BfResolvePassData
{
public:
BfResolveType mResolveType;
Array<BfParser*> mParsers;
Dictionary<BfParser*, BfParser*> mCompatParserMap;
2019-08-23 11:56:54 -07:00
BfAutoComplete* mAutoComplete;
Array<BfTypeDef*> mAutoCompleteTempTypes; // Contains multiple values when we have nested types
2020-06-02 05:46:56 -07:00
Dictionary<BfTypeDef*, BfStaticSearch> mStaticSearchMap;
2022-07-26 13:27:03 -04:00
Dictionary<BfTypeDef*, BfInternalAccessSet> mInternalAccessMap;
2019-08-23 11:56:54 -07:00
Array<BfAstNode*> mExteriorAutocompleteCheckNodes;
2022-07-26 13:27:03 -04:00
BfGetSymbolReferenceKind mGetSymbolReferenceKind;
2019-08-23 11:56:54 -07:00
String mQueuedReplaceTypeDef;
2020-05-31 07:12:17 -07:00
BfTypeDef* mSymbolReferenceTypeDef;
String mQueuedSymbolReferenceNamespace;
2022-07-26 13:27:03 -04:00
BfAtomComposite mSymbolReferenceNamespace;
2019-08-23 11:56:54 -07:00
int mSymbolReferenceLocalIdx;
int mSymbolReferenceFieldIdx;
int mSymbolReferenceMethodIdx;
int mSymbolReferencePropertyIdx;
int mSymbolMethodGenericParamIdx;
int mSymbolTypeGenericParamIdx;
bool mIsClassifying;
bool mHasCursorIdx;
bool mHadEmits;
2022-07-26 13:27:03 -04:00
2019-08-23 11:56:54 -07:00
typedef Dictionary<BfParserData*, String> FoundSymbolReferencesParserDataMap;
FoundSymbolReferencesParserDataMap mFoundSymbolReferencesParserData;
//std::vector<BfIdentifierNode*> mSymbolReferenceIdentifiers;
Dictionary<String, BfEmitEmbedEntry> mEmitEmbedEntries;
2019-08-23 11:56:54 -07:00
public:
void RecordReplaceNode(BfParserData* parser, int srcStart, int srcLen);
2022-07-26 13:27:03 -04:00
void RecordReplaceNode(BfAstNode* node);
2020-05-31 07:12:17 -07:00
BfAstNode* FindBaseNode(BfAstNode* node);
2019-08-23 11:56:54 -07:00
public:
BfResolvePassData();
~BfResolvePassData();
2019-08-23 11:56:54 -07:00
void HandleLocalReference(BfIdentifierNode* identifier, BfTypeDef* typeDef, BfMethodDef* methodDef, int localVarIdx);
void HandleLocalReference(BfIdentifierNode* identifier, BfIdentifierNode* origNameNode, BfTypeDef* typeDef, BfMethodDef* methodDef, int localVarIdx);
void HandleTypeGenericParam(BfAstNode* node, BfTypeDef* typeDef, int genericParamIdx);
void HandleMethodGenericParam(BfAstNode* node, BfTypeDef* typeDef, BfMethodDef* methodDef, int genericParamIdx);
void HandleMethodReference(BfAstNode* node, BfTypeDef* typeDef, BfMethodDef* methodDef);
void HandleFieldReference(BfAstNode* node, BfTypeDef* typeDef, BfFieldDef* fieldDef);
void HandlePropertyReference(BfAstNode* node, BfTypeDef* typeDef, BfPropertyDef* propDef);
2022-07-26 13:27:03 -04:00
void HandleTypeReference(BfAstNode* node, BfTypeDef* typeDef);
2020-05-31 07:12:17 -07:00
void HandleNamespaceReference(BfAstNode* node, const BfAtomComposite& namespaceName);
2019-08-23 11:56:54 -07:00
BfSourceClassifier* GetSourceClassifier(BfAstNode* astNode);
BfSourceClassifier* GetSourceClassifier(BfParser* parser);
2019-08-23 11:56:54 -07:00
//void ReplaceIdentifiers();
};
NS_BF_END