Quellcode durchsuchen

Fixed readonly addr handling of indexer expression

Brian Fiete vor 2 Monaten
Ursprung
Commit
c53c7b4157
2 geänderte Dateien mit 8 neuen und 1 gelöschten Zeilen
  1. 3 0
      IDE/src/IDEApp.bf
  2. 5 1
      IDEHelper/Compiler/BfExprEvaluator.cpp

+ 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())
 		{