mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 03:28:20 +02:00
Added a RefType colorization type
This commit is contained in:
parent
09e6564b3e
commit
9bbcb8eb5e
9 changed files with 130 additions and 68 deletions
|
@ -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); }
|
||||||
|
|
||||||
|
|
|
@ -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 == '('))
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
@ -17247,7 +17262,7 @@ void BfExprEvaluator::Visit(BfIndexerExpression* indexerExpr)
|
||||||
mOrigPropTarget = mPropTarget;
|
mOrigPropTarget = mPropTarget;
|
||||||
if (isInlined)
|
if (isInlined)
|
||||||
mPropGetMethodFlags = (BfGetMethodInstanceFlags)(mPropGetMethodFlags | BfGetMethodInstanceFlag_ForceInline);
|
mPropGetMethodFlags = (BfGetMethodInstanceFlags)(mPropGetMethodFlags | BfGetMethodInstanceFlag_ForceInline);
|
||||||
mPropCheckedKind = checkedKind;
|
mPropCheckedKind = checkedKind;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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())
|
||||||
{
|
{
|
||||||
|
|
|
@ -47,16 +47,38 @@ void BfSourceClassifier::SetElementType(BfAstNode* node, BfSourceElementType ele
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BfSourceClassifier::SetElementType(int startPos, int endPos, BfSourceElementType elementType)
|
void BfSourceClassifier::SetHighestElementType(int startPos, int endPos, BfSourceElementType elementType)
|
||||||
{
|
{
|
||||||
if (!mEnabled)
|
if (!mEnabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
endPos = BF_MIN(endPos, mParser->mOrigSrcLength);
|
endPos = BF_MIN(endPos, mParser->mOrigSrcLength);
|
||||||
for (int i = startPos; i < endPos; i++)
|
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)
|
||||||
|
{
|
||||||
|
if (!mEnabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
endPos = BF_MIN(endPos, mParser->mOrigSrcLength);
|
||||||
|
for (int i = startPos; i < endPos; i++)
|
||||||
|
{
|
||||||
mCharData[i].mDisplayPassId = mClassifierPassId;
|
mCharData[i].mDisplayPassId = mClassifierPassId;
|
||||||
mCharData[i].mDisplayTypeId = (uint8)elementType;
|
mCharData[i].mDisplayTypeId = (uint8)elementType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
|
@ -12,11 +12,11 @@ enum BfSourceElementType
|
||||||
BfSourceElementType_Normal,
|
BfSourceElementType_Normal,
|
||||||
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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue