Browse Source

Fixed error handling in const append calc

Brian Fiete 3 năm trước cách đây
mục cha
commit
9d079dfcb6

+ 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)
  	if (mCurMethodInstance != NULL)
 		mCurMethodInstance->mHasFailed = true;
 		mCurMethodInstance->mHasFailed = true;
 
 
@@ -16617,6 +16623,8 @@ BfTypedValue BfModule::TryConstCalcAppend(BfMethodInstance* methodInst, SizedArr
 		appendAllocVisitor.mModule = this;
 		appendAllocVisitor.mModule = this;
 		
 		
 		appendAllocVisitor.VisitChild(methodDecl->mBody);		
 		appendAllocVisitor.VisitChild(methodDecl->mBody);		
+		if (constResolveState.mFailed)
+			appendAllocVisitor.mFailed = true;
 		if (!appendAllocVisitor.mFailed)
 		if (!appendAllocVisitor.mFailed)
 			constValue = appendAllocVisitor.mConstAccum;
 			constValue = appendAllocVisitor.mConstAccum;
 		if (isFirstRun)
 		if (isFirstRun)

+ 2 - 0
IDEHelper/Compiler/BfModule.h

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