2
0
Эх сурвалжийг харах

Fixed readonly addr handling of indexer expression

Brian Fiete 3 сар өмнө
parent
commit
c53c7b4157

+ 3 - 0
IDE/src/IDEApp.bf

@@ -15171,6 +15171,9 @@ namespace IDE
 			if (mUpdateCnt % 120 == 0)
 				VerifyModifiedBuffers();
 
+			if (!mSettings.mSettingsValid)
+				Stop();
+
 			if (mWantShowOutput)
 			{
 				ShowOutput();

+ 5 - 1
IDEHelper/Compiler/BfExprEvaluator.cpp

@@ -22687,7 +22687,7 @@ void BfExprEvaluator::Visit(BfIndexerExpression* indexerExpr)
 
 void BfExprEvaluator::HandleIndexerExpression(BfIndexerExpression* indexerExpr, BfTypedValue target)
 {
-	BfAstNode* refNode = indexerExpr->mOpenBracket;
+ 	BfAstNode* refNode = indexerExpr->mOpenBracket;
 	if (refNode == NULL)
 		refNode = indexerExpr->mTarget;
 	
@@ -23048,6 +23048,8 @@ void BfExprEvaluator::HandleIndexerExpression(BfIndexerExpression* indexerExpr,
 		if ((sizedArrayType->IsUndefSizedArray()) || (isUndefIndex))
 		{
 			mResult = mModule->GetDefaultTypedValue(underlyingType, false, BfDefaultValueKind_Addr);
+			if ((!target.CanModify()) && (mResult.IsAddr()))
+				mResult.mKind = BfTypedValueKind_ReadOnlyAddr;
 		}
 		else if (sizedArrayType->IsValuelessType())
 		{
@@ -23057,6 +23059,8 @@ void BfExprEvaluator::HandleIndexerExpression(BfIndexerExpression* indexerExpr,
 			{
 				mResult = mModule->GetDefaultTypedValue(underlyingType, false, BfDefaultValueKind_Addr);
 			}
+			if ((!target.CanModify()) && (mResult.IsAddr()))
+				mResult.mKind = BfTypedValueKind_ReadOnlyAddr;
 		}
 		else if (target.IsAddr())
 		{