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

Added a RefType colorization type

This commit is contained in:
Brian Fiete 2020-08-13 06:28:31 -07:00
parent 09e6564b3e
commit 9bbcb8eb5e
9 changed files with 130 additions and 68 deletions

View file

@ -77,7 +77,7 @@ struct int128
}; };
#define BF_MIN(x, y) (((x) < (y)) ? (x) : (y)) #define BF_MIN(x, y) (((x) < (y)) ? (x) : (y))
#define BF_MAX(x, y) (((x) > (y)) ? (x ): (y)) #define BF_MAX(x, y) (((x) > (y)) ? (x) : (y))
#define BF_CLAMP(val, minVal, maxVal) (((val) < (minVal)) ? (minVal) : ((val) > (maxVal)) ? (maxVal) : (val)) #define BF_CLAMP(val, minVal, maxVal) (((val) < (minVal)) ? (minVal) : ((val) > (maxVal)) ? (maxVal) : (val))
#define BF_SWAP(a, b) { auto _a = (a); (a) = (b); (b) = (_a); } #define BF_SWAP(a, b) { auto _a = (a); (a) = (b); (b) = (_a); }

View file

@ -432,7 +432,7 @@ namespace IDE
inSubtype ? (int32)SourceElementType.TypeRef : (int32)SourceElementType.Namespace inSubtype ? (int32)SourceElementType.TypeRef : (int32)SourceElementType.Namespace
];*/ ];*/
uint32 color = SourceEditWidgetContent.sTextColors[(int32)SourceElementType.TypeRef]; uint32 color = SourceEditWidgetContent.sTextColors[(int32)SourceElementType.Type];
/*if ((c == '+') || (c == '(')) /*if ((c == '+') || (c == '('))
{ {

View file

@ -276,10 +276,10 @@ namespace IDE
public Color mKeyword = 0xFFE1AE9A; public Color mKeyword = 0xFFE1AE9A;
public Color mLiteral = 0XFFC8A0FF; public Color mLiteral = 0XFFC8A0FF;
public Color mIdentifier = 0xFFFFFFFF; public Color mIdentifier = 0xFFFFFFFF;
public Color mType = 0XFF66D9EF;
public Color mComment = 0XFF75715E; public Color mComment = 0XFF75715E;
public Color mMethod = 0XFFA6E22A; public Color mMethod = 0XFFA6E22A;
public Color mTypeRef = 0XFF66D9EF; public Color mType = 0XFF66D9EF;
public Color mRefType = 0XFF66D9EF;
public Color mNamespace = 0xFF7BEEB7; public Color mNamespace = 0xFF7BEEB7;
public Color mDisassemblyText = 0xFFB0B0B0; public Color mDisassemblyText = 0xFFB0B0B0;
public Color mDisassemblyFileName = 0XFFFF0000; public Color mDisassemblyFileName = 0XFFFF0000;
@ -309,10 +309,15 @@ namespace IDE
GetColor("Keyword", ref mKeyword); GetColor("Keyword", ref mKeyword);
GetColor("Literal", ref mLiteral); GetColor("Literal", ref mLiteral);
GetColor("Identifier", ref mIdentifier); GetColor("Identifier", ref mIdentifier);
GetColor("Type", ref mType);
GetColor("Comment", ref mComment); GetColor("Comment", ref mComment);
GetColor("Method", ref mMethod); GetColor("Method", ref mMethod);
GetColor("TypeRef", ref mTypeRef); if (sd.Contains("Type"))
{
GetColor("Type", ref mType);
if (!sd.Contains("RefType"))
mRefType = mType;
}
GetColor("RefType", ref mRefType);
GetColor("Namespace", ref mNamespace); GetColor("Namespace", ref mNamespace);
GetColor("DisassemblyText", ref mDisassemblyText); GetColor("DisassemblyText", ref mDisassemblyText);
GetColor("DisassemblyFileName", ref mDisassemblyFileName); GetColor("DisassemblyFileName", ref mDisassemblyFileName);
@ -324,21 +329,21 @@ namespace IDE
public void Apply() public void Apply()
{ {
SourceEditWidgetContent.sTextColors[0] = mCode; SourceEditWidgetContent.sTextColors[(.)SourceElementType.Normal] = mCode;
SourceEditWidgetContent.sTextColors[1] = mKeyword; SourceEditWidgetContent.sTextColors[(.)SourceElementType.Keyword] = mKeyword;
SourceEditWidgetContent.sTextColors[2] = mLiteral; SourceEditWidgetContent.sTextColors[(.)SourceElementType.Literal] = mLiteral;
SourceEditWidgetContent.sTextColors[3] = mIdentifier; SourceEditWidgetContent.sTextColors[(.)SourceElementType.Identifier] = mIdentifier;
SourceEditWidgetContent.sTextColors[4] = mType; SourceEditWidgetContent.sTextColors[(.)SourceElementType.Comment] = mComment;
SourceEditWidgetContent.sTextColors[5] = mComment; SourceEditWidgetContent.sTextColors[(.)SourceElementType.Method] = mMethod;
SourceEditWidgetContent.sTextColors[6] = mMethod; SourceEditWidgetContent.sTextColors[(.)SourceElementType.Type] = mType;
SourceEditWidgetContent.sTextColors[7] = mTypeRef; SourceEditWidgetContent.sTextColors[(.)SourceElementType.RefType] = mRefType;
SourceEditWidgetContent.sTextColors[8] = mNamespace; SourceEditWidgetContent.sTextColors[(.)SourceElementType.Namespace] = mNamespace;
SourceEditWidgetContent.sTextColors[9] = mDisassemblyText; SourceEditWidgetContent.sTextColors[(.)SourceElementType.Disassembly_Text] = mDisassemblyText;
SourceEditWidgetContent.sTextColors[10] = mDisassemblyFileName; SourceEditWidgetContent.sTextColors[(.)SourceElementType.Disassembly_FileName] = mDisassemblyFileName;
SourceEditWidgetContent.sTextColors[11] = mError; SourceEditWidgetContent.sTextColors[(.)SourceElementType.Error] = mError;
SourceEditWidgetContent.sTextColors[12] = mBuildError; SourceEditWidgetContent.sTextColors[(.)SourceElementType.BuildError] = mBuildError;
SourceEditWidgetContent.sTextColors[13] = mBuildWarning; SourceEditWidgetContent.sTextColors[(.)SourceElementType.BuildWarning] = mBuildWarning;
SourceEditWidgetContent.sTextColors[14] = mVisibleWhiteSpace; SourceEditWidgetContent.sTextColors[(.)SourceElementType.VisibleWhiteSpace] = mVisibleWhiteSpace;
DarkTheme.COLOR_TEXT = mText; DarkTheme.COLOR_TEXT = mText;
DarkTheme.COLOR_WINDOW = mWindow; DarkTheme.COLOR_WINDOW = mWindow;

View file

@ -199,10 +199,10 @@ namespace IDE.ui
0xFFE1AE9A, // Keyword 0xFFE1AE9A, // Keyword
0XFFC8A0FF, // Literal 0XFFC8A0FF, // Literal
0xFFFFFFFF, // Identifier 0xFFFFFFFF, // Identifier
0XFF66D9EF, // Type 0xFF75715E, // Comment
0XFF75715E, // Comment 0xFFA6E22A, // Method
0XFFA6E22A, // Method 0xFF66D9EF, // Type
0XFF66D9EF, // TypeRef 0xFF66D9EF, // RefType
0xFF7BEEB7, // Namespace 0xFF7BEEB7, // Namespace
0xFFB0B0B0, // Disassembly_Text 0xFFB0B0B0, // Disassembly_Text
@ -966,7 +966,7 @@ namespace IDE.ui
if (!prevC.IsWhiteSpace) if (!prevC.IsWhiteSpace)
{ {
var prevElementType = (SourceElementType)mData.mText[checkIdx - 1].mDisplayTypeId; var prevElementType = (SourceElementType)mData.mText[checkIdx - 1].mDisplayTypeId;
startedWithType = prevElementType == SourceElementType.TypeRef; startedWithType = (prevElementType == SourceElementType.Type) || (prevElementType == SourceElementType.RefType);
checkedStartedWithType = true; checkedStartedWithType = true;
} }
} }
@ -974,7 +974,7 @@ namespace IDE.ui
if ((elementType == SourceElementType.Comment) || (isWhitespace)) if ((elementType == SourceElementType.Comment) || (isWhitespace))
continue; continue;
if ((!checkedStartedWithType) && (elementType != SourceElementType.Namespace) && (elementType != SourceElementType.TypeRef)) if ((!checkedStartedWithType) && (elementType != SourceElementType.Namespace) && (elementType != SourceElementType.Type) && (elementType != SourceElementType.RefType))
{ {
checkedStartedWithType = true; checkedStartedWithType = true;
} }

View file

@ -27,10 +27,10 @@ namespace IDE.ui
Keyword, Keyword,
Literal, Literal,
Identifier, Identifier,
Type,
Comment, Comment,
Method, Method,
TypeRef, Type,
RefType,
Namespace, Namespace,
Disassembly_Text, Disassembly_Text,
@ -4273,7 +4273,7 @@ namespace IDE.ui
// Autocomplete beat us to it // Autocomplete beat us to it
destText[destIdx].mDisplayPassId = (uint8)SourceDisplayId.Cleared; destText[destIdx].mDisplayPassId = (uint8)SourceDisplayId.Cleared;
} }
else if (charData[srcIdx].mDisplayTypeId == (uint8)SourceDisplayId.SkipResult) else if (charData[srcIdx].mDisplayPassId == (uint8)SourceDisplayId.SkipResult)
{ {
// //
} }

View file

@ -7251,7 +7251,7 @@ BfTypedValue BfExprEvaluator::MatchMethod(BfAstNode* targetSrc, BfMethodBoundExp
} }
if (auto identifier = BfNodeDynCastExact<BfIdentifierNode>(targetSrc)) if (auto identifier = BfNodeDynCastExact<BfIdentifierNode>(targetSrc))
mModule->SetElementType(identifier, BfSourceElementType_TypeRef); mModule->SetElementType(identifier, BfSourceElementType_Type);
if (mModule->mCompiler->mResolvePassData != NULL) if (mModule->mCompiler->mResolvePassData != NULL)
mModule->mCompiler->mResolvePassData->HandleTypeReference(targetSrc, resolvedTypeInstance->mTypeDef); mModule->mCompiler->mResolvePassData->HandleTypeReference(targetSrc, resolvedTypeInstance->mTypeDef);
@ -15051,9 +15051,11 @@ BfTypedValue BfExprEvaluator::GetResult(bool clearResult, bool resolveGenericTyp
for (int paramIdx = 0; paramIdx < (int)mIndexerValues.size(); paramIdx++) for (int paramIdx = 0; paramIdx < (int)mIndexerValues.size(); paramIdx++)
{ {
auto refNode = mIndexerValues[paramIdx].mExpression; auto refNode = mIndexerValues[paramIdx].mExpression;
auto wantType = methodInstance.mMethodInstance->GetParamType(paramIdx);
auto argValue = ResolveArgValue(mIndexerValues[paramIdx], wantType);
if (refNode == NULL) if (refNode == NULL)
refNode = mPropSrc; refNode = mPropSrc;
auto val = mModule->Cast(refNode, mIndexerValues[paramIdx].mTypedValue, methodInstance.mMethodInstance->GetParamType(paramIdx)); auto val = mModule->Cast(refNode, argValue, wantType);
if (!val) if (!val)
failed = true; failed = true;
else else
@ -15947,9 +15949,11 @@ void BfExprEvaluator::PerformAssignment(BfAssignmentExpression* assignExpr, bool
for (int paramIdx = 0; paramIdx < (int)mIndexerValues.size(); paramIdx++) for (int paramIdx = 0; paramIdx < (int)mIndexerValues.size(); paramIdx++)
{ {
auto refNode = mIndexerValues[paramIdx].mExpression; auto refNode = mIndexerValues[paramIdx].mExpression;
auto wantType = methodInstance.mMethodInstance->GetParamType(paramIdx);
auto argValue = ResolveArgValue(mIndexerValues[paramIdx], wantType);
if (refNode == NULL) if (refNode == NULL)
refNode = mPropSrc; refNode = mPropSrc;
auto val = mModule->Cast(refNode, mIndexerValues[paramIdx].mTypedValue, methodInstance.mMethodInstance->GetParamType(paramIdx)); auto val = mModule->Cast(refNode, argValue, wantType);
if (!val) if (!val)
{ {
mPropDef = NULL; mPropDef = NULL;
@ -17120,21 +17124,32 @@ void BfExprEvaluator::Visit(BfIndexerExpression* indexerExpr)
if (target.mType->IsTypeInstance()) if (target.mType->IsTypeInstance())
{ {
mIndexerValues.clear(); mIndexerValues.clear();
for (BfExpression* expr : indexerExpr->mArguments) // for (BfExpression* expr : indexerExpr->mArguments)
{ // {
if (expr == NULL) // if (expr == NULL)
return; // return;
auto argVal = mModule->CreateValueFromExpression(expr); // auto argVal = mModule->CreateValueFromExpression(expr);
if (!argVal) // if (!argVal)
{ // {
mModule->AssertErrorState(); // mModule->AssertErrorState();
argVal = mModule->GetDefaultTypedValue(mModule->mContext->mBfObjectType); // argVal = mModule->GetDefaultTypedValue(mModule->mContext->mBfObjectType);
} // }
BfResolvedArg resolvedArg; // BfResolvedArg resolvedArg;
resolvedArg.mExpression = expr; // resolvedArg.mExpression = expr;
resolvedArg.mTypedValue = argVal; // resolvedArg.mTypedValue = argVal;
mIndexerValues.push_back(resolvedArg); // mIndexerValues.push_back(resolvedArg);
} // }
SizedArray<BfExpression*, 2> argExprs;
BfSizedArray<BfExpression*> sizedArgExprs(indexerExpr->mArguments);
BfResolvedArgs argValues(&sizedArgExprs);
ResolveArgValues(argValues, BfResolveArgFlag_DeferParamEval);
//exprEvaluator.MatchMethod(elementExpr, NULL, initValue, false, false, "Add", argValues, NULL);
mIndexerValues = argValues.mResolvedArgs;
for (auto& val : mIndexerValues)
if (!val.mTypedValue)
val.mTypedValue = mModule->GetDefaultTypedValue(mModule->mContext->mBfObjectType);
BfMethodMatcher methodMatcher(indexerExpr->mTarget, mModule, "[]", mIndexerValues, NULL); BfMethodMatcher methodMatcher(indexerExpr->mTarget, mModule, "[]", mIndexerValues, NULL);
methodMatcher.mCheckedKind = checkedKind; methodMatcher.mCheckedKind = checkedKind;

View file

@ -6712,11 +6712,14 @@ BfType* BfModule::ResolveTypeResult(BfTypeReference* typeRef, BfType* resolvedTy
while (auto qualifiedTypeRef = BfNodeDynCast<BfQualifiedTypeReference>(checkTypeRef)) while (auto qualifiedTypeRef = BfNodeDynCast<BfQualifiedTypeReference>(checkTypeRef))
{ {
if ((mCompiler->mResolvePassData->mSourceClassifier != NULL) && (resolvedTypeRef->IsObject()))
mCompiler->mResolvePassData->mSourceClassifier->SetElementType(qualifiedTypeRef->mRight, BfSourceElementType_RefType);
StringView leftString = qualifiedTypeRef->mLeft->ToStringView(); StringView leftString = qualifiedTypeRef->mLeft->ToStringView();
BfSizedAtomComposite leftComposite; BfSizedAtomComposite leftComposite;
bool isValid = mSystem->ParseAtomComposite(leftString, leftComposite); bool isValid = mSystem->ParseAtomComposite(leftString, leftComposite);
if (mCompiler->mResolvePassData->mSourceClassifier != NULL) if (mCompiler->mResolvePassData->mSourceClassifier != NULL)
mCompiler->mResolvePassData->mSourceClassifier->SetElementType(qualifiedTypeRef->mRight, isNamespace ? BfSourceElementType_Namespace : BfSourceElementType_TypeRef); mCompiler->mResolvePassData->mSourceClassifier->SetHighestElementType(qualifiedTypeRef->mRight, isNamespace ? BfSourceElementType_Namespace : BfSourceElementType_Type);
if (resolvedTypeInstance == NULL) if (resolvedTypeInstance == NULL)
{ {
if ((isValid) && (mCompiler->mSystem->ContainsNamespace(leftComposite, mCurTypeInstance->mTypeDef->mProject))) if ((isValid) && (mCompiler->mSystem->ContainsNamespace(leftComposite, mCurTypeInstance->mTypeDef->mProject)))
@ -6740,6 +6743,20 @@ BfType* BfModule::ResolveTypeResult(BfTypeReference* typeRef, BfType* resolvedTy
if (auto namedTypeRef = BfNodeDynCast<BfNamedTypeReference>(checkTypeRef)) if (auto namedTypeRef = BfNodeDynCast<BfNamedTypeReference>(checkTypeRef))
{ {
auto checkNameNode = namedTypeRef->mNameNode; auto checkNameNode = namedTypeRef->mNameNode;
bool setType = false;
if ((mCompiler->mResolvePassData->mSourceClassifier != NULL) && (resolvedTypeRef->IsObject()))
{
if (auto qualifiedNameNode = BfNodeDynCast<BfQualifiedNameNode>(checkNameNode))
{
mCompiler->mResolvePassData->mSourceClassifier->SetElementType(qualifiedNameNode->mRight, BfSourceElementType_RefType);
}
else
{
setType = true;
mCompiler->mResolvePassData->mSourceClassifier->SetElementType(checkNameNode, BfSourceElementType_RefType);
}
}
while (auto qualifiedNameNode = BfNodeDynCast<BfQualifiedNameNode>(checkNameNode)) while (auto qualifiedNameNode = BfNodeDynCast<BfQualifiedNameNode>(checkNameNode))
{ {
@ -6747,7 +6764,7 @@ BfType* BfModule::ResolveTypeResult(BfTypeReference* typeRef, BfType* resolvedTy
BfSizedAtomComposite leftComposite; BfSizedAtomComposite leftComposite;
bool isValid = mSystem->ParseAtomComposite(leftString, leftComposite); bool isValid = mSystem->ParseAtomComposite(leftString, leftComposite);
if (mCompiler->mResolvePassData->mSourceClassifier != NULL) if (mCompiler->mResolvePassData->mSourceClassifier != NULL)
mCompiler->mResolvePassData->mSourceClassifier->SetElementType(qualifiedNameNode->mRight, isNamespace ? BfSourceElementType_Namespace : BfSourceElementType_TypeRef); mCompiler->mResolvePassData->mSourceClassifier->SetHighestElementType(qualifiedNameNode->mRight, isNamespace ? BfSourceElementType_Namespace : BfSourceElementType_Type);
if (resolvedTypeInstance == NULL) if (resolvedTypeInstance == NULL)
{ {
if ((isValid) && (mCompiler->mSystem->ContainsNamespace(leftComposite, mCurTypeInstance->mTypeDef->mProject))) if ((isValid) && (mCompiler->mSystem->ContainsNamespace(leftComposite, mCurTypeInstance->mTypeDef->mProject)))
@ -6757,8 +6774,9 @@ BfType* BfModule::ResolveTypeResult(BfTypeReference* typeRef, BfType* resolvedTy
isNamespace = true; isNamespace = true;
checkNameNode = qualifiedNameNode->mLeft; checkNameNode = qualifiedNameNode->mLeft;
} }
if (mCompiler->mResolvePassData->mSourceClassifier != NULL) if ((mCompiler->mResolvePassData->mSourceClassifier != NULL) &&
mCompiler->mResolvePassData->mSourceClassifier->SetElementType(checkNameNode, isNamespace ? BfSourceElementType_Namespace : BfSourceElementType_TypeRef); ((!setType) || (checkNameNode != namedTypeRef->mNameNode)))
mCompiler->mResolvePassData->mSourceClassifier->SetHighestElementType(checkNameNode, isNamespace ? BfSourceElementType_Namespace : BfSourceElementType_Type);
} }
} }
@ -7505,7 +7523,7 @@ BfTypedValue BfModule::TryLookupGenericConstVaue(BfIdentifierNode* identifierNod
{ {
auto typeRefSource = identifierNode->GetSourceData(); auto typeRefSource = identifierNode->GetSourceData();
if ((mCompiler->mResolvePassData != NULL) && (mCompiler->mResolvePassData->mSourceClassifier != NULL) && (typeRefSource != NULL) && (typeRefSource == mCompiler->mResolvePassData->mParser->mSourceData)) if ((mCompiler->mResolvePassData != NULL) && (mCompiler->mResolvePassData->mSourceClassifier != NULL) && (typeRefSource != NULL) && (typeRefSource == mCompiler->mResolvePassData->mParser->mSourceData))
mCompiler->mResolvePassData->mSourceClassifier->SetElementType(identifierNode, BfSourceElementType_TypeRef); mCompiler->mResolvePassData->mSourceClassifier->SetElementType(identifierNode, BfSourceElementType_Type);
if (genericParamResult->IsConstExprValue()) if (genericParamResult->IsConstExprValue())
{ {

View file

@ -47,6 +47,28 @@ void BfSourceClassifier::SetElementType(BfAstNode* node, BfSourceElementType ele
} }
} }
void BfSourceClassifier::SetHighestElementType(int startPos, int endPos, BfSourceElementType elementType)
{
if (!mEnabled)
return;
endPos = BF_MIN(endPos, mParser->mOrigSrcLength);
for (int i = startPos; i < endPos; i++)
{
auto& charData = mCharData[i];
charData.mDisplayPassId = mClassifierPassId;
charData.mDisplayTypeId = BF_MAX(charData.mDisplayTypeId, (uint8)elementType);
}
}
void BfSourceClassifier::SetHighestElementType(BfAstNode* node, BfSourceElementType elementType)
{
if (node != NULL)
{
SetHighestElementType(node->GetSrcStart(), node->GetSrcEnd(), elementType);
}
}
void BfSourceClassifier::SetElementType(int startPos, int endPos, BfSourceElementType elementType) void BfSourceClassifier::SetElementType(int startPos, int endPos, BfSourceElementType elementType)
{ {
if (!mEnabled) if (!mEnabled)
@ -283,11 +305,11 @@ void BfSourceClassifier::Visit(BfNamedTypeReference* typeRef)
BfIdentifierNode* checkName = typeRef->mNameNode; BfIdentifierNode* checkName = typeRef->mNameNode;
while (auto qualifiedNameNode = BfNodeDynCast<BfQualifiedNameNode>(checkName)) while (auto qualifiedNameNode = BfNodeDynCast<BfQualifiedNameNode>(checkName))
{ {
SetElementType(qualifiedNameNode->mRight, BfSourceElementType_TypeRef); SetElementType(qualifiedNameNode->mRight, BfSourceElementType_Type);
checkName = qualifiedNameNode->mLeft; checkName = qualifiedNameNode->mLeft;
} }
if (checkName != NULL) if (checkName != NULL)
SetElementType(checkName, BfSourceElementType_TypeRef); SetElementType(checkName, BfSourceElementType_Type);
} }
} }
@ -305,7 +327,7 @@ void BfSourceClassifier::Visit(BfRefTypeRef* typeRef)
Visit((BfAstNode*)typeRef); Visit((BfAstNode*)typeRef);
VisitChild(typeRef->mRefToken); VisitChild(typeRef->mRefToken);
SetElementType(typeRef->mRefToken, BfSourceElementType_TypeRef); SetElementType(typeRef->mRefToken, BfSourceElementType_Type);
VisitChild(typeRef->mElementType); VisitChild(typeRef->mElementType);
} }
@ -488,7 +510,7 @@ void BfSourceClassifier::Visit(BfMethodDeclaration* methodDeclaration)
for (auto& genericParam : methodDeclaration->mGenericParams->mGenericParams) for (auto& genericParam : methodDeclaration->mGenericParams->mGenericParams)
{ {
BfIdentifierNode* typeRef = genericParam; BfIdentifierNode* typeRef = genericParam;
SetElementType(typeRef, BfSourceElementType_TypeRef); SetElementType(typeRef, BfSourceElementType_Type);
} }
} }
@ -500,7 +522,7 @@ void BfSourceClassifier::Visit(BfMethodDeclaration* methodDeclaration)
{ {
BfTypeReference* typeRef = genericConstraint->mTypeRef; BfTypeReference* typeRef = genericConstraint->mTypeRef;
if (typeRef != NULL) if (typeRef != NULL)
SetElementType(typeRef, BfSourceElementType_TypeRef); SetElementType(typeRef, BfSourceElementType_Type);
} }
} }
} }
@ -569,7 +591,7 @@ void BfSourceClassifier::Handle(BfTypeDeclaration* typeDeclaration)
for (auto& genericParam : typeDeclaration->mGenericParams->mGenericParams) for (auto& genericParam : typeDeclaration->mGenericParams->mGenericParams)
{ {
BfIdentifierNode* typeRef = genericParam; BfIdentifierNode* typeRef = genericParam;
SetElementType(typeRef, BfSourceElementType_TypeRef); SetElementType(typeRef, BfSourceElementType_Type);
} }
} }
@ -581,13 +603,13 @@ void BfSourceClassifier::Handle(BfTypeDeclaration* typeDeclaration)
BfTypeReference* typeRef = genericConstraint->mTypeRef; BfTypeReference* typeRef = genericConstraint->mTypeRef;
if (typeRef != NULL) if (typeRef != NULL)
SetElementType(typeRef, BfSourceElementType_TypeRef); SetElementType(typeRef, BfSourceElementType_Type);
} }
} }
auto typeRef = typeDeclaration->mNameNode; auto typeRef = typeDeclaration->mNameNode;
if (typeRef != NULL) if (typeRef != NULL)
SetElementType(typeRef, BfSourceElementType_TypeRef); SetElementType(typeRef, BfSourceElementType_Type);
} }
void BfSourceClassifier::MarkSkipped(int startPos, int endPos) void BfSourceClassifier::MarkSkipped(int startPos, int endPos)

View file

@ -13,10 +13,10 @@ enum BfSourceElementType
BfSourceElementType_Keyword, BfSourceElementType_Keyword,
BfSourceElementType_Literal, BfSourceElementType_Literal,
BfSourceElementType_Identifier, BfSourceElementType_Identifier,
BfSourceElementType_Type,
BfSourceElementType_Comment, BfSourceElementType_Comment,
BfSourceElementType_Method, BfSourceElementType_Method,
BfSourceElementType_TypeRef, BfSourceElementType_Type,
BfSourceElementType_RefType,
BfSourceElementType_Namespace BfSourceElementType_Namespace
}; };
@ -73,6 +73,8 @@ public:
void ModifyFlags(int startPos, int endPos, uint8 andFlags, uint8 orFlags); void ModifyFlags(int startPos, int endPos, uint8 andFlags, uint8 orFlags);
void SetElementType(BfAstNode* node, BfSourceElementType elementType); void SetElementType(BfAstNode* node, BfSourceElementType elementType);
void SetElementType(int startPos, int endPos, BfSourceElementType elementType); void SetElementType(int startPos, int endPos, BfSourceElementType elementType);
void SetHighestElementType(BfAstNode* node, BfSourceElementType elementType);
void SetHighestElementType(int startPos, int endPos, BfSourceElementType elementType);
bool IsInterestedInMember(BfAstNode* node, bool forceSkip = false); bool IsInterestedInMember(BfAstNode* node, bool forceSkip = false);
bool WantsSkipParentMethod(BfAstNode* node); bool WantsSkipParentMethod(BfAstNode* node);
void Handle(BfTypeDeclaration* typeDeclaration); void Handle(BfTypeDeclaration* typeDeclaration);