Skip to content

Commit 77e185b

Browse files
authored
Merge pull request #2476 from Grimelios/static_theme_color
Static theme coloring
2 parents a527ec4 + f16c428 commit 77e185b

8 files changed

Lines changed: 78 additions & 15 deletions

File tree

IDE/src/Compiler/BfParser.bf

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,20 @@ namespace IDE.Compiler
1515
{
1616
public enum BfSourceElementType : uint8
1717
{
18-
Normal,
18+
Normal,
1919
Keyword,
2020
Literal,
21-
Identifier,
2221
Comment,
22+
Identifier,
23+
Local,
24+
Parameter,
25+
Member,
26+
Static,
2327
Method,
2428
Type,
29+
PrimitiveType,
30+
Struct,
31+
GenericParam,
2532
RefType,
2633
Interface,
2734
Namespace

IDE/src/Settings.bf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,7 @@ namespace IDE
348348
public Color mLocal = 0xFFFFFFFF;
349349
public Color mParameter = 0xFFFFFFFF;
350350
public Color mMember = 0xFFFFFFFF;
351+
public Color mStatic = 0xFFFFFFFF;
351352
public Color mMethod = 0xFFA6E22A;
352353
public Color mType = 0xFF66D9EF;
353354
public Color mPrimitiveType = 0xFF66D9EF;
@@ -410,6 +411,8 @@ namespace IDE
410411
GetColor("Parameter", ref mParameter);
411412
mMember = mIdentifier;
412413
GetColor("Member", ref mMember);
414+
mStatic = mMember;
415+
GetColor("Static", ref mStatic);
413416
mMethod = mMember;
414417
GetColor("Method", ref mMethod);
415418
GetColor("Comment", ref mComment);
@@ -458,6 +461,7 @@ namespace IDE
458461
SourceEditWidgetContent.sTextColors[(.)SourceElementType.Local] = mLocal;
459462
SourceEditWidgetContent.sTextColors[(.)SourceElementType.Parameter] = mParameter;
460463
SourceEditWidgetContent.sTextColors[(.)SourceElementType.Member] = mMember;
464+
SourceEditWidgetContent.sTextColors[(.)SourceElementType.Static] = mStatic;
461465
SourceEditWidgetContent.sTextColors[(.)SourceElementType.Method] = mMethod;
462466
SourceEditWidgetContent.sTextColors[(.)SourceElementType.Type] = mType;
463467
SourceEditWidgetContent.sTextColors[(.)SourceElementType.PrimitiveType] = mPrimitiveType;

IDE/src/ui/SourceEditWidgetContent.bf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -792,6 +792,7 @@ namespace IDE.ui
792792
0xFFFFFFFF, // Local
793793
0xFFFFFFFF, // Parameter
794794
0xFFFFFFFF, // Member
795+
0xFFFFFFFF, // Static
795796
0xFFA6E22A, // Method
796797
0xFF66D9EF, // Type
797798
0xFF66D9EF, // PrimitiveType

IDE/src/ui/SourceViewPanel.bf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ namespace IDE.ui
3131
Local,
3232
Parameter,
3333
Member,
34+
Static,
3435
Method,
3536
Type,
3637
PrimitiveType,

IDEHelper/Compiler/BfExprEvaluator.cpp

Lines changed: 58 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4896,9 +4896,10 @@ BfTypedValue BfExprEvaluator::LookupIdentifier(BfAstNode* refNode, const StringI
48964896
}
48974897

48984898
BfTypedValue result;
4899+
BfFieldDef* fieldDef = NULL;
48994900
if (thisValue.HasType())
49004901
{
4901-
result = LookupField(identifierNode, thisValue, findName, BfLookupFieldFlag_IsImplicitThis);
4902+
result = LookupField(identifierNode, thisValue, findName, BfLookupFieldFlag_IsImplicitThis, &fieldDef);
49024903
if (mResultFieldInstance == NULL)
49034904
{
49044905
mResultLocalVar = NULL;
@@ -4933,10 +4934,10 @@ BfTypedValue BfExprEvaluator::LookupIdentifier(BfAstNode* refNode, const StringI
49334934
if (globalContainer.mTypeInst == NULL)
49344935
continue;
49354936
thisValue = BfTypedValue(globalContainer.mTypeInst);
4936-
result = LookupField(identifierNode, thisValue, findName);
4937+
result = LookupField(identifierNode, thisValue, findName, BfLookupFieldFlag_None, &fieldDef);
49374938
if ((result) || (mPropDef != NULL))
49384939
{
4939-
mModule->SetHighestElementType(identifierNode, BfSourceElementType_Member);
4940+
mModule->SetHighestElementType(identifierNode, fieldDef != NULL && fieldDef->IsNonConstStatic() ? BfSourceElementType_Static : BfSourceElementType_Member);
49404941
return result;
49414942
}
49424943
}
@@ -4948,18 +4949,18 @@ BfTypedValue BfExprEvaluator::LookupIdentifier(BfAstNode* refNode, const StringI
49484949
for (auto typeInst : staticSearch->mStaticTypes)
49494950
{
49504951
thisValue = BfTypedValue(typeInst);
4951-
result = LookupField(identifierNode, thisValue, findName);
4952+
result = LookupField(identifierNode, thisValue, findName, BfLookupFieldFlag_None, &fieldDef);
49524953
if ((result) || (mPropDef != NULL))
49534954
{
4954-
mModule->SetHighestElementType(identifierNode, BfSourceElementType_Member);
4955+
mModule->SetHighestElementType(identifierNode, fieldDef != NULL && fieldDef->IsNonConstStatic() ? BfSourceElementType_Static : BfSourceElementType_Member);
49554956
return result;
49564957
}
49574958
}
49584959
}
49594960
}
49604961
else
49614962
{
4962-
mModule->SetHighestElementType(identifierNode, BfSourceElementType_Member);
4963+
mModule->SetHighestElementType(identifierNode, fieldDef != NULL && fieldDef->IsNonConstStatic() ? BfSourceElementType_Static : BfSourceElementType_Member);
49634964
}
49644965

49654966
if ((!result) && (identifierNode != NULL))
@@ -5781,7 +5782,7 @@ BfTypedValue BfExprEvaluator::LoadField(BfAstNode* targetSrc, BfTypedValue targe
57815782
return retVal;
57825783
}
57835784

5784-
BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue target, const StringImpl& fieldName, BfLookupFieldFlags flags)
5785+
BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue target, const StringImpl& fieldName, BfLookupFieldFlags flags, BfFieldDef** fieldDef)
57855786
{
57865787
if (target)
57875788
flags = (BfLookupFieldFlags)(flags | BfLookupFieldFlag_HasInstance);
@@ -5795,7 +5796,7 @@ BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue tar
57955796
{
57965797
for (auto iface : genericParamInst->mInterfaceConstraints)
57975798
{
5798-
auto result = LookupField(targetSrc, BfTypedValue(target.mValue, iface), fieldName, flags);
5799+
auto result = LookupField(targetSrc, BfTypedValue(target.mValue, iface), fieldName, flags, fieldDef);
57995800
if ((result) || (mPropDef != NULL))
58005801
{
58015802
return result;
@@ -6065,7 +6066,14 @@ BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue tar
60656066
}
60666067

60676068
if (matchedField != NULL)
6069+
{
6070+
if (fieldDef != NULL)
6071+
{
6072+
*fieldDef = matchedField;
6073+
}
6074+
60686075
return LoadField(targetSrc, target, curCheckType, matchedField, flags);
6076+
}
60696077

60706078
BfPropertyDef* nextProp = NULL;
60716079
if (curCheckType->mTypeDef->mPropertySet.TryGetWith(fieldName, &entry))
@@ -6152,7 +6160,14 @@ BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue tar
61526160
}
61536161

61546162
if (matchedProp != NULL)
6163+
{
6164+
if (fieldDef != NULL)
6165+
{
6166+
*fieldDef = matchedProp;
6167+
}
6168+
61556169
return LoadProperty(targetSrc, target, curCheckType, matchedProp, flags, checkedKind, isInlined);
6170+
}
61566171
}
61576172

61586173
if (curCheckType->mTypeDef->mHasUsingFields)
@@ -6314,7 +6329,7 @@ BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue tar
63146329
newFlags = (BfLookupFieldFlags)(newFlags | BfLookupFieldFlag_HasInstance);
63156330

63166331
// Check statics in outer type
6317-
return LookupField(targetSrc, BfTypedValue(outerTypeDef), fieldName, newFlags);
6332+
return LookupField(targetSrc, BfTypedValue(outerTypeDef), fieldName, newFlags, fieldDef);
63186333
}
63196334

63206335
return BfTypedValue();
@@ -11361,6 +11376,23 @@ void BfExprEvaluator::LookupQualifiedName(BfQualifiedNameNode* nameNode, bool ig
1136111376

1136211377
if (!mResult)
1136311378
{
11379+
auto type = mModule->ResolveTypeRef(nameLeft, NULL);
11380+
11381+
if (type != NULL)
11382+
{
11383+
auto target = mModule->GetThis();
11384+
target.mType = type;
11385+
11386+
BfFieldDef* fieldDef = NULL;
11387+
11388+
mResult = LookupField(nameRight, target, fieldName, BfLookupFieldFlag_IsImplicitThis, &fieldDef);
11389+
11390+
if (fieldDef != NULL && fieldDef->IsNonConstStatic())
11391+
{
11392+
mModule->SetHighestElementType(nameRight, BfSourceElementType_Static);
11393+
}
11394+
}
11395+
1136411396
if (!ignoreInitialError)
1136511397
mModule->Fail("Identifier not found", nameNode->mLeft);
1136611398
return;
@@ -11525,6 +11557,23 @@ void BfExprEvaluator::LookupQualifiedName(BfAstNode* nameNode, BfIdentifierNode*
1152511557

1152611558
if (!mResult)
1152711559
{
11560+
auto type = mModule->ResolveTypeRef(nameLeft, NULL);
11561+
11562+
if (type != NULL)
11563+
{
11564+
auto target = mModule->GetThis();
11565+
target.mType = type;
11566+
11567+
BfFieldDef* fieldDef = NULL;
11568+
11569+
mResult = LookupField(nameRight, target, fieldName, BfLookupFieldFlag_IsImplicitThis, &fieldDef);
11570+
11571+
if (fieldDef != NULL && fieldDef->IsNonConstStatic())
11572+
{
11573+
mModule->SetHighestElementType(nameRight, BfSourceElementType_Static);
11574+
}
11575+
}
11576+
1152811577
if (!ignoreInitialError)
1152911578
mModule->Fail("Identifier not found", nameLeft);
1153011579
return;

IDEHelper/Compiler/BfExprEvaluator.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ class BfExprEvaluator : public BfStructuralVisitor
482482
bool CheckGenericCtor(BfGenericParamType* genericParamType, BfResolvedArgs& argValues, BfAstNode* targetSrc);
483483
BfTypedValue LoadProperty(BfAstNode* targetSrc, BfTypedValue target, BfTypeInstance* typeInstance, BfPropertyDef* prop, BfLookupFieldFlags flags, BfCheckedKind checkedKind, bool isInline);
484484
BfTypedValue LoadField(BfAstNode* targetSrc, BfTypedValue target, BfTypeInstance* typeInstance, BfFieldDef* fieldDef, BfLookupFieldFlags flags);
485-
BfTypedValue LookupField(BfAstNode* targetSrc, BfTypedValue target, const StringImpl& fieldName, BfLookupFieldFlags flags = BfLookupFieldFlag_None);
485+
BfTypedValue LookupField(BfAstNode* targetSrc, BfTypedValue target, const StringImpl& fieldName, BfLookupFieldFlags flags = BfLookupFieldFlag_None, BfFieldDef** fieldDef = NULL);
486486
void CheckObjectCreateTypeRef(BfType* expectingType, BfAstNode* afterNode);
487487
void LookupQualifiedName(BfQualifiedNameNode* nameNode, bool ignoreInitialError = false, bool* hadError = NULL);
488488
void LookupQualifiedName(BfAstNode* nameNode, BfIdentifierNode* nameLeft, BfIdentifierNode* nameRight, bool ignoreInitialError, bool* hadError = NULL);

IDEHelper/Compiler/BfSourceClassifier.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ void BfSourceClassifier::Visit(BfFieldDeclaration* fieldDecl)
160160
VisitChild(fieldDecl->mReadOnlySpecifier);
161161
VisitChild(fieldDecl->mTypeRef);
162162
VisitChild(fieldDecl->mNameNode);
163-
SetElementType(fieldDecl->mNameNode, BfSourceElementType_Member);
163+
SetElementType(fieldDecl->mNameNode, fieldDecl->mStaticSpecifier != NULL ? BfSourceElementType_Static : BfSourceElementType_Member);
164164
}
165165

166166
void BfSourceClassifier::Visit(BfFieldDtorDeclaration* fieldDtorDecl)
@@ -674,7 +674,7 @@ void BfSourceClassifier::Visit(BfPropertyDeclaration* propertyDeclaration)
674674

675675
BfElementVisitor::Visit(propertyDeclaration);
676676

677-
SetElementType(propertyDeclaration->mNameNode, BfSourceElementType_Member);
677+
SetElementType(propertyDeclaration->mNameNode, propertyDeclaration->mStaticSpecifier != NULL ? BfSourceElementType_Static : BfSourceElementType_Member);
678678

679679
if (auto expr = BfNodeDynCast<BfPropertyBodyExpression>(propertyDeclaration->mDefinitionBlock))
680680
return;
@@ -857,7 +857,7 @@ bool BfSourceClassifier::WantsSkipParentMethod(BfAstNode* node)
857857
for (auto methodDeclaration : propDecl->mMethods)
858858
{
859859
if (node == methodDeclaration->mBody)
860-
return true;
860+
return true;
861861
}
862862
}
863863

IDEHelper/Compiler/BfSourceClassifier.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ enum BfSourceElementType
1717
BfSourceElementType_Local,
1818
BfSourceElementType_Parameter,
1919
BfSourceElementType_Member,
20+
BfSourceElementType_Static,
2021
BfSourceElementType_Method,
2122
BfSourceElementType_Type,
2223
BfSourceElementType_PrimitiveType,

0 commit comments

Comments
 (0)