Prechádzať zdrojové kódy

Fixed unqualified static lookups in mixins

Brian Fiete 5 rokov pred
rodič
commit
a3020720c9

+ 2 - 2
IDEHelper/Compiler/BfExprEvaluator.cpp

@@ -3114,8 +3114,8 @@ BfTypedValue BfExprEvaluator::LookupIdentifier(BfAstNode* refNode, const StringI
 		}
 	}
 
-	if (!thisValue)
-		thisValue = BfTypedValue(mModule->mCurTypeInstance);
+	if (!thisValue.HasType())	
+		thisValue = BfTypedValue(mModule->mCurTypeInstance);	
 	BfTypedValue result = LookupField(identifierNode, thisValue, findName, BfLookupFieldFlag_IsImplicitThis);
 	if (mPropDef != NULL)
 	{

+ 1 - 1
IDEHelper/Compiler/BfModule.cpp

@@ -12062,7 +12062,7 @@ BfTypedValue BfModule::GetThis()
 			if (checkMethodState->mMixinState != NULL)
 			{
 				BfTypedValue thisValue = checkMethodState->mMixinState->mTarget;
-				if (thisValue)
+				if (thisValue.HasType())
 				{
 					checkMethodState->mMixinState->mLastTargetAccessId = useMethodState->GetRootMethodState()->mCurAccessId++;
 					if (!thisValue.mType->IsValueType())

+ 7 - 0
IDEHelper/Tests/src/Mixins.bf

@@ -7,6 +7,7 @@ namespace Tests
 		class MixClass
 		{
 			public int mA = 100;
+			public static int sA = 200;
 
 			public mixin MixA(var addTo)
 			{
@@ -22,6 +23,11 @@ namespace Tests
 
 				AddIt();
 			}
+
+			public static mixin MixC(var val)
+			{
+				val + sA
+			}
 		}
 
 		[Test]
@@ -32,6 +38,7 @@ namespace Tests
 			Test.Assert(mc.mA == 110);
 			mc.MixB!(10);
 			Test.Assert(mc.mA == 120);
+			Test.Assert(MixClass.MixC!(30) == 230);
 		}
 
 		[Test]