mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-29 04:55:58 +02:00
Made AssertCurrentNode a soft error
This commit is contained in:
parent
61a1f077ab
commit
cc107ae341
2 changed files with 48 additions and 24 deletions
|
@ -77,25 +77,30 @@ bool BfReducer::StringEquals(BfAstNode* node, BfAstNode* node2)
|
||||||
}
|
}
|
||||||
|
|
||||||
int gAssertCurrentNodeIdx = 0;
|
int gAssertCurrentNodeIdx = 0;
|
||||||
void BfReducer::AssertCurrentNode(BfAstNode* node)
|
bool BfReducer::AssertCurrentNode(BfAstNode* node)
|
||||||
{
|
{
|
||||||
if (mSkipCurrentNodeAssert)
|
if (mSkipCurrentNodeAssert)
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
|
bool success = true;
|
||||||
auto currentNode = mVisitorPos.GetCurrent();
|
auto currentNode = mVisitorPos.GetCurrent();
|
||||||
if (currentNode == NULL)
|
if (currentNode == NULL)
|
||||||
return;
|
return success;
|
||||||
if ((!node->LocationEndEquals(currentNode)) && (mLastErrorSrcEnd != currentNode->mSrcEnd))
|
if ((!node->LocationEndEquals(currentNode)) && (mLastErrorSrcEnd != currentNode->mSrcEnd))
|
||||||
{
|
{
|
||||||
const char* lastCPtr = &node->GetSourceData()->mSrc[node->GetSrcEnd() - 1];
|
const char* lastCPtr = &node->GetSourceData()->mSrc[node->GetSrcEnd() - 1];
|
||||||
// We have an "exceptional" case where breaking a double chevron will look like a position error
|
// We have an "exceptional" case where breaking a double chevron will look like a position error
|
||||||
if ((lastCPtr[0] != '>') || (lastCPtr[1] != '>'))
|
if ((lastCPtr[0] != '>') || (lastCPtr[1] != '>'))
|
||||||
{
|
{
|
||||||
BF_FATAL("Internal parsing error");
|
//BF_FATAL("Internal parsing error");
|
||||||
|
Fail("Internal parsing error", currentNode);
|
||||||
|
AddErrorNode(currentNode);
|
||||||
|
success = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gAssertCurrentNodeIdx++;
|
gAssertCurrentNodeIdx++;
|
||||||
mAssertCurrentNodeIdx++;
|
mAssertCurrentNodeIdx++;
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
// For autocomplete we only do a reduce on nodes the cursor is in
|
// For autocomplete we only do a reduce on nodes the cursor is in
|
||||||
|
@ -243,7 +248,8 @@ void BfReducer::AddErrorNode(BfAstNode* astNode, bool removeNode)
|
||||||
|
|
||||||
bool BfReducer::IsTypeReference(BfAstNode* checkNode, BfToken successToken, int endNode, int* retryNode, int* outEndNode, bool* couldBeExpr, bool* isGenericType, bool* isTuple)
|
bool BfReducer::IsTypeReference(BfAstNode* checkNode, BfToken successToken, int endNode, int* retryNode, int* outEndNode, bool* couldBeExpr, bool* isGenericType, bool* isTuple)
|
||||||
{
|
{
|
||||||
AssertCurrentNode(checkNode);
|
if (!AssertCurrentNode(checkNode))
|
||||||
|
return false;
|
||||||
|
|
||||||
if (couldBeExpr != NULL)
|
if (couldBeExpr != NULL)
|
||||||
*couldBeExpr = true;
|
*couldBeExpr = true;
|
||||||
|
@ -1081,7 +1087,8 @@ bool BfReducer::IsTypeReference(BfAstNode* checkNode, BfToken successToken, int
|
||||||
|
|
||||||
bool BfReducer::IsLocalMethod(BfAstNode* nameNode)
|
bool BfReducer::IsLocalMethod(BfAstNode* nameNode)
|
||||||
{
|
{
|
||||||
AssertCurrentNode(nameNode);
|
if (!AssertCurrentNode(nameNode))
|
||||||
|
return false;
|
||||||
|
|
||||||
int parenDepth = 0;
|
int parenDepth = 0;
|
||||||
bool hadParens = false;
|
bool hadParens = false;
|
||||||
|
@ -1608,7 +1615,8 @@ BfExpression* BfReducer::CreateExpression(BfAstNode* node, CreateExprFlags creat
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AssertCurrentNode(node);
|
if (!AssertCurrentNode(node))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
auto rhsCreateExprFlags = (CreateExprFlags)(createExprFlags & CreateExprFlags_BreakOnRChevron);
|
auto rhsCreateExprFlags = (CreateExprFlags)(createExprFlags & CreateExprFlags_BreakOnRChevron);
|
||||||
|
|
||||||
|
@ -3154,7 +3162,8 @@ BfExpression* BfReducer::CreateExpression(BfAstNode* node, CreateExprFlags creat
|
||||||
|
|
||||||
BfExpression* BfReducer::CreateExpressionAfter(BfAstNode* node, CreateExprFlags createExprFlags)
|
BfExpression* BfReducer::CreateExpressionAfter(BfAstNode* node, CreateExprFlags createExprFlags)
|
||||||
{
|
{
|
||||||
AssertCurrentNode(node);
|
if (!AssertCurrentNode(node))
|
||||||
|
return NULL;
|
||||||
auto nextNode = mVisitorPos.GetNext();
|
auto nextNode = mVisitorPos.GetNext();
|
||||||
bool isEmpty = false;
|
bool isEmpty = false;
|
||||||
if (auto tokenNode = BfNodeDynCast<BfTokenNode>(nextNode))
|
if (auto tokenNode = BfNodeDynCast<BfTokenNode>(nextNode))
|
||||||
|
@ -4876,7 +4885,8 @@ bool BfReducer::IsTerminatingExpression(BfAstNode* node)
|
||||||
|
|
||||||
BfAstNode* BfReducer::CreateStatement(BfAstNode* node, CreateStmtFlags createStmtFlags)
|
BfAstNode* BfReducer::CreateStatement(BfAstNode* node, CreateStmtFlags createStmtFlags)
|
||||||
{
|
{
|
||||||
AssertCurrentNode(node);
|
if (!AssertCurrentNode(node))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
if ((createStmtFlags & CreateStmtFlags_CheckStack) != 0)
|
if ((createStmtFlags & CreateStmtFlags_CheckStack) != 0)
|
||||||
{
|
{
|
||||||
|
@ -4989,7 +4999,8 @@ BfAstNode* BfReducer::CreateStatement(BfAstNode* node, CreateStmtFlags createStm
|
||||||
|
|
||||||
BfAstNode* BfReducer::CreateStatementAfter(BfAstNode* node, CreateStmtFlags createStmtFlags)
|
BfAstNode* BfReducer::CreateStatementAfter(BfAstNode* node, CreateStmtFlags createStmtFlags)
|
||||||
{
|
{
|
||||||
AssertCurrentNode(node);
|
if (!AssertCurrentNode(node))
|
||||||
|
return NULL;
|
||||||
auto nextNode = mVisitorPos.GetNext();
|
auto nextNode = mVisitorPos.GetNext();
|
||||||
if (nextNode == NULL)
|
if (nextNode == NULL)
|
||||||
{
|
{
|
||||||
|
@ -5062,7 +5073,8 @@ BfTypeReference* BfReducer::DoCreateNamedTypeRef(BfIdentifierNode* identifierNod
|
||||||
|
|
||||||
BfTypeReference* BfReducer::DoCreateTypeRef(BfAstNode* firstNode, CreateTypeRefFlags createTypeRefFlags, int endNode)
|
BfTypeReference* BfReducer::DoCreateTypeRef(BfAstNode* firstNode, CreateTypeRefFlags createTypeRefFlags, int endNode)
|
||||||
{
|
{
|
||||||
AssertCurrentNode(firstNode);
|
if (!AssertCurrentNode(firstNode))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
bool parseArrayBracket = (createTypeRefFlags & CreateTypeRefFlags_NoParseArrayBrackets) == 0;
|
bool parseArrayBracket = (createTypeRefFlags & CreateTypeRefFlags_NoParseArrayBrackets) == 0;
|
||||||
|
|
||||||
|
@ -5822,7 +5834,8 @@ BfTypeReference* BfReducer::CreateTypeRef(BfAstNode* firstNode, CreateTypeRefFla
|
||||||
|
|
||||||
BfTypeReference* BfReducer::CreateTypeRefAfter(BfAstNode* astNode, CreateTypeRefFlags createTypeRefFlags)
|
BfTypeReference* BfReducer::CreateTypeRefAfter(BfAstNode* astNode, CreateTypeRefFlags createTypeRefFlags)
|
||||||
{
|
{
|
||||||
AssertCurrentNode(astNode);
|
if (!AssertCurrentNode(astNode))
|
||||||
|
return NULL;
|
||||||
auto nextNode = mVisitorPos.GetNext();
|
auto nextNode = mVisitorPos.GetNext();
|
||||||
if (nextNode == NULL)
|
if (nextNode == NULL)
|
||||||
{
|
{
|
||||||
|
@ -5883,7 +5896,8 @@ BfTypeReference* BfReducer::CreateRefTypeRef(BfTypeReference* elementType, BfTok
|
||||||
|
|
||||||
BfIdentifierNode* BfReducer::CompactQualifiedName(BfAstNode* leftNode, bool allowGlobalLookup)
|
BfIdentifierNode* BfReducer::CompactQualifiedName(BfAstNode* leftNode, bool allowGlobalLookup)
|
||||||
{
|
{
|
||||||
AssertCurrentNode(leftNode);
|
if (!AssertCurrentNode(leftNode))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
if ((leftNode == NULL) || (!leftNode->IsA<BfIdentifierNode>()))
|
if ((leftNode == NULL) || (!leftNode->IsA<BfIdentifierNode>()))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -7357,7 +7371,10 @@ BfAstNode* BfReducer::ReadTypeMember(BfAstNode* node, bool declStarted, int dept
|
||||||
// prevTypeMemberNodeStart.Set();
|
// prevTypeMemberNodeStart.Set();
|
||||||
|
|
||||||
if (mCurTypeDecl != NULL)
|
if (mCurTypeDecl != NULL)
|
||||||
AssertCurrentNode(node);
|
{
|
||||||
|
if (!AssertCurrentNode(node))
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
BfTokenNode* refToken = NULL;
|
BfTokenNode* refToken = NULL;
|
||||||
|
|
||||||
|
@ -9128,7 +9145,8 @@ BfAstNode* BfReducer::HandleTopLevel(BfBlock* node)
|
||||||
|
|
||||||
BfAstNode* BfReducer::CreateTopLevelObject(BfTokenNode* tokenNode, BfAttributeDirective* attributes, BfAstNode* deferredHeadNode, bool isAnonymous)
|
BfAstNode* BfReducer::CreateTopLevelObject(BfTokenNode* tokenNode, BfAttributeDirective* attributes, BfAstNode* deferredHeadNode, bool isAnonymous)
|
||||||
{
|
{
|
||||||
AssertCurrentNode(tokenNode);
|
if (!AssertCurrentNode(tokenNode))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
bool isSimpleEnum = false;
|
bool isSimpleEnum = false;
|
||||||
if (tokenNode->GetToken() == BfToken_Enum)
|
if (tokenNode->GetToken() == BfToken_Enum)
|
||||||
|
@ -9914,7 +9932,8 @@ BfAstNode* BfReducer::CreateTopLevelObject(BfTokenNode* tokenNode, BfAttributeDi
|
||||||
|
|
||||||
BfTokenNode* BfReducer::ExpectTokenAfter(BfAstNode* node, BfToken token)
|
BfTokenNode* BfReducer::ExpectTokenAfter(BfAstNode* node, BfToken token)
|
||||||
{
|
{
|
||||||
AssertCurrentNode(node);
|
if (!AssertCurrentNode(node))
|
||||||
|
return NULL;
|
||||||
auto nextNode = mVisitorPos.GetNext();
|
auto nextNode = mVisitorPos.GetNext();
|
||||||
auto tokenNode = BfNodeDynCast<BfTokenNode>(nextNode);
|
auto tokenNode = BfNodeDynCast<BfTokenNode>(nextNode);
|
||||||
if ((tokenNode == NULL) ||
|
if ((tokenNode == NULL) ||
|
||||||
|
@ -9929,7 +9948,8 @@ BfTokenNode* BfReducer::ExpectTokenAfter(BfAstNode* node, BfToken token)
|
||||||
|
|
||||||
BfTokenNode* BfReducer::ExpectTokenAfter(BfAstNode* node, BfToken tokenA, BfToken tokenB)
|
BfTokenNode* BfReducer::ExpectTokenAfter(BfAstNode* node, BfToken tokenA, BfToken tokenB)
|
||||||
{
|
{
|
||||||
AssertCurrentNode(node);
|
if (!AssertCurrentNode(node))
|
||||||
|
return NULL;
|
||||||
auto nextNode = mVisitorPos.GetNext();
|
auto nextNode = mVisitorPos.GetNext();
|
||||||
auto tokenNode = BfNodeDynCast<BfTokenNode>(nextNode);
|
auto tokenNode = BfNodeDynCast<BfTokenNode>(nextNode);
|
||||||
if ((tokenNode == NULL) ||
|
if ((tokenNode == NULL) ||
|
||||||
|
@ -9944,7 +9964,8 @@ BfTokenNode* BfReducer::ExpectTokenAfter(BfAstNode* node, BfToken tokenA, BfToke
|
||||||
|
|
||||||
BfTokenNode* BfReducer::ExpectTokenAfter(BfAstNode* node, BfToken tokenA, BfToken tokenB, BfToken tokenC)
|
BfTokenNode* BfReducer::ExpectTokenAfter(BfAstNode* node, BfToken tokenA, BfToken tokenB, BfToken tokenC)
|
||||||
{
|
{
|
||||||
AssertCurrentNode(node);
|
if (!AssertCurrentNode(node))
|
||||||
|
return NULL;
|
||||||
auto nextNode = mVisitorPos.GetNext();
|
auto nextNode = mVisitorPos.GetNext();
|
||||||
auto tokenNode = BfNodeDynCast<BfTokenNode>(nextNode);
|
auto tokenNode = BfNodeDynCast<BfTokenNode>(nextNode);
|
||||||
|
|
||||||
|
@ -9963,7 +9984,8 @@ BfTokenNode* BfReducer::ExpectTokenAfter(BfAstNode* node, BfToken tokenA, BfToke
|
||||||
|
|
||||||
BfTokenNode* BfReducer::ExpectTokenAfter(BfAstNode* node, BfToken tokenA, BfToken tokenB, BfToken tokenC, BfToken tokenD)
|
BfTokenNode* BfReducer::ExpectTokenAfter(BfAstNode* node, BfToken tokenA, BfToken tokenB, BfToken tokenC, BfToken tokenD)
|
||||||
{
|
{
|
||||||
AssertCurrentNode(node);
|
if (!AssertCurrentNode(node))
|
||||||
|
return NULL;
|
||||||
auto nextNode = mVisitorPos.GetNext();
|
auto nextNode = mVisitorPos.GetNext();
|
||||||
auto tokenNode = BfNodeDynCast<BfTokenNode>(nextNode);
|
auto tokenNode = BfNodeDynCast<BfTokenNode>(nextNode);
|
||||||
BfToken token = BfToken_Null;
|
BfToken token = BfToken_Null;
|
||||||
|
@ -9981,7 +10003,8 @@ BfTokenNode* BfReducer::ExpectTokenAfter(BfAstNode* node, BfToken tokenA, BfToke
|
||||||
|
|
||||||
BfIdentifierNode* BfReducer::ExpectIdentifierAfter(BfAstNode* node, const char* typeName)
|
BfIdentifierNode* BfReducer::ExpectIdentifierAfter(BfAstNode* node, const char* typeName)
|
||||||
{
|
{
|
||||||
AssertCurrentNode(node);
|
if (!AssertCurrentNode(node))
|
||||||
|
return NULL;
|
||||||
auto nextNode = mVisitorPos.GetNext();
|
auto nextNode = mVisitorPos.GetNext();
|
||||||
auto identifierNode = BfNodeDynCast<BfIdentifierNode>(nextNode);
|
auto identifierNode = BfNodeDynCast<BfIdentifierNode>(nextNode);
|
||||||
if (identifierNode == NULL)
|
if (identifierNode == NULL)
|
||||||
|
@ -9998,7 +10021,8 @@ BfIdentifierNode* BfReducer::ExpectIdentifierAfter(BfAstNode* node, const char*
|
||||||
|
|
||||||
BfBlock* BfReducer::ExpectBlockAfter(BfAstNode* node)
|
BfBlock* BfReducer::ExpectBlockAfter(BfAstNode* node)
|
||||||
{
|
{
|
||||||
AssertCurrentNode(node);
|
if (!AssertCurrentNode(node))
|
||||||
|
return NULL;
|
||||||
auto nextNode = mVisitorPos.GetNext();
|
auto nextNode = mVisitorPos.GetNext();
|
||||||
auto block = BfNodeDynCast<BfBlock>(nextNode);
|
auto block = BfNodeDynCast<BfBlock>(nextNode);
|
||||||
if (block == NULL)
|
if (block == NULL)
|
||||||
|
|
|
@ -209,7 +209,7 @@ public:
|
||||||
BfTokenNode* BreakQuestionLBracket(BfTokenNode* tokenNode);
|
BfTokenNode* BreakQuestionLBracket(BfTokenNode* tokenNode);
|
||||||
BfCommentNode* FindDocumentation(BfAstNode* defNodeHead, BfAstNode* defNodeEnd = NULL, bool checkDocAfter = false);
|
BfCommentNode* FindDocumentation(BfAstNode* defNodeHead, BfAstNode* defNodeEnd = NULL, bool checkDocAfter = false);
|
||||||
|
|
||||||
void AssertCurrentNode(BfAstNode* node);
|
bool AssertCurrentNode(BfAstNode* node);
|
||||||
bool IsNodeRelevant(BfAstNode* astNode);
|
bool IsNodeRelevant(BfAstNode* astNode);
|
||||||
bool IsCursorInside(BfAstNode* astNode);
|
bool IsCursorInside(BfAstNode* astNode);
|
||||||
bool IsNodeRelevant(BfAstNode* startNode, BfAstNode* endNode);
|
bool IsNodeRelevant(BfAstNode* startNode, BfAstNode* endNode);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue