Bläddra i källkod

Fixed error handling in const append calc

Brian Fiete 3 år sedan
förälder
incheckning
9d079dfcb6
2 ändrade filer med 10 tillägg och 0 borttagningar
  1. 8 0
      IDEHelper/Compiler/BfModule.cpp
  2. 2 0
      IDEHelper/Compiler/BfModule.h

+ 8 - 0
IDEHelper/Compiler/BfModule.cpp

@@ -3113,6 +3113,12 @@ BfError* BfModule::Fail(const StringImpl& error, BfAstNode* refNode, bool isPers
 		}
 	}
 
+	if ((mCurMethodState != NULL) && (mCurMethodState->mConstResolveState != NULL) && (mCurMethodState->mConstResolveState->mInCalcAppend))
+	{
+		mCurMethodState->mConstResolveState->mFailed = true;
+		return NULL;
+	}
+
  	if (mCurMethodInstance != NULL)
 		mCurMethodInstance->mHasFailed = true;
 
@@ -16617,6 +16623,8 @@ BfTypedValue BfModule::TryConstCalcAppend(BfMethodInstance* methodInst, SizedArr
 		appendAllocVisitor.mModule = this;
 		
 		appendAllocVisitor.VisitChild(methodDecl->mBody);		
+		if (constResolveState.mFailed)
+			appendAllocVisitor.mFailed = true;
 		if (!appendAllocVisitor.mFailed)
 			constValue = appendAllocVisitor.mConstAccum;
 		if (isFirstRun)

+ 2 - 0
IDEHelper/Compiler/BfModule.h

@@ -921,12 +921,14 @@ public:
 	BfMethodInstance* mMethodInstance;
 	BfConstResolveState* mPrevConstResolveState;
 	bool mInCalcAppend;
+	bool mFailed;
 
 	BfConstResolveState()
 	{
 		mMethodInstance = NULL;
 		mPrevConstResolveState = NULL;
 		mInCalcAppend = false;
+		mFailed = false;
 	}
 };