mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-28 20:46:00 +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;
|
||||
void BfReducer::AssertCurrentNode(BfAstNode* node)
|
||||
bool BfReducer::AssertCurrentNode(BfAstNode* node)
|
||||
{
|
||||
if (mSkipCurrentNodeAssert)
|
||||
return;
|
||||
|
||||
return true;
|
||||
|
||||
bool success = true;
|
||||
auto currentNode = mVisitorPos.GetCurrent();
|
||||
if (currentNode == NULL)
|
||||
return;
|
||||
return success;
|
||||
if ((!node->LocationEndEquals(currentNode)) && (mLastErrorSrcEnd != currentNode->mSrcEnd))
|
||||
{
|
||||
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
|
||||
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++;
|
||||
mAssertCurrentNodeIdx++;
|
||||
return success;
|
||||
}
|
||||
|
||||
// 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)
|
||||
{
|
||||
AssertCurrentNode(checkNode);
|
||||
if (!AssertCurrentNode(checkNode))
|
||||
return false;
|
||||
|
||||
if (couldBeExpr != NULL)
|
||||
*couldBeExpr = true;
|
||||
|
@ -1081,7 +1087,8 @@ bool BfReducer::IsTypeReference(BfAstNode* checkNode, BfToken successToken, int
|
|||
|
||||
bool BfReducer::IsLocalMethod(BfAstNode* nameNode)
|
||||
{
|
||||
AssertCurrentNode(nameNode);
|
||||
if (!AssertCurrentNode(nameNode))
|
||||
return false;
|
||||
|
||||
int parenDepth = 0;
|
||||
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);
|
||||
|
||||
|
@ -3154,7 +3162,8 @@ BfExpression* BfReducer::CreateExpression(BfAstNode* node, CreateExprFlags creat
|
|||
|
||||
BfExpression* BfReducer::CreateExpressionAfter(BfAstNode* node, CreateExprFlags createExprFlags)
|
||||
{
|
||||
AssertCurrentNode(node);
|
||||
if (!AssertCurrentNode(node))
|
||||
return NULL;
|
||||
auto nextNode = mVisitorPos.GetNext();
|
||||
bool isEmpty = false;
|
||||
if (auto tokenNode = BfNodeDynCast<BfTokenNode>(nextNode))
|
||||
|
@ -4876,7 +4885,8 @@ bool BfReducer::IsTerminatingExpression(BfAstNode* node)
|
|||
|
||||
BfAstNode* BfReducer::CreateStatement(BfAstNode* node, CreateStmtFlags createStmtFlags)
|
||||
{
|
||||
AssertCurrentNode(node);
|
||||
if (!AssertCurrentNode(node))
|
||||
return NULL;
|
||||
|
||||
if ((createStmtFlags & CreateStmtFlags_CheckStack) != 0)
|
||||
{
|
||||
|
@ -4989,7 +4999,8 @@ BfAstNode* BfReducer::CreateStatement(BfAstNode* node, CreateStmtFlags createStm
|
|||
|
||||
BfAstNode* BfReducer::CreateStatementAfter(BfAstNode* node, CreateStmtFlags createStmtFlags)
|
||||
{
|
||||
AssertCurrentNode(node);
|
||||
if (!AssertCurrentNode(node))
|
||||
return NULL;
|
||||
auto nextNode = mVisitorPos.GetNext();
|
||||
if (nextNode == NULL)
|
||||
{
|
||||
|
@ -5062,7 +5073,8 @@ BfTypeReference* BfReducer::DoCreateNamedTypeRef(BfIdentifierNode* identifierNod
|
|||
|
||||
BfTypeReference* BfReducer::DoCreateTypeRef(BfAstNode* firstNode, CreateTypeRefFlags createTypeRefFlags, int endNode)
|
||||
{
|
||||
AssertCurrentNode(firstNode);
|
||||
if (!AssertCurrentNode(firstNode))
|
||||
return NULL;
|
||||
|
||||
bool parseArrayBracket = (createTypeRefFlags & CreateTypeRefFlags_NoParseArrayBrackets) == 0;
|
||||
|
||||
|
@ -5822,7 +5834,8 @@ BfTypeReference* BfReducer::CreateTypeRef(BfAstNode* firstNode, CreateTypeRefFla
|
|||
|
||||
BfTypeReference* BfReducer::CreateTypeRefAfter(BfAstNode* astNode, CreateTypeRefFlags createTypeRefFlags)
|
||||
{
|
||||
AssertCurrentNode(astNode);
|
||||
if (!AssertCurrentNode(astNode))
|
||||
return NULL;
|
||||
auto nextNode = mVisitorPos.GetNext();
|
||||
if (nextNode == NULL)
|
||||
{
|
||||
|
@ -5883,7 +5896,8 @@ BfTypeReference* BfReducer::CreateRefTypeRef(BfTypeReference* elementType, BfTok
|
|||
|
||||
BfIdentifierNode* BfReducer::CompactQualifiedName(BfAstNode* leftNode, bool allowGlobalLookup)
|
||||
{
|
||||
AssertCurrentNode(leftNode);
|
||||
if (!AssertCurrentNode(leftNode))
|
||||
return NULL;
|
||||
|
||||
if ((leftNode == NULL) || (!leftNode->IsA<BfIdentifierNode>()))
|
||||
return NULL;
|
||||
|
@ -7357,7 +7371,10 @@ BfAstNode* BfReducer::ReadTypeMember(BfAstNode* node, bool declStarted, int dept
|
|||
// prevTypeMemberNodeStart.Set();
|
||||
|
||||
if (mCurTypeDecl != NULL)
|
||||
AssertCurrentNode(node);
|
||||
{
|
||||
if (!AssertCurrentNode(node))
|
||||
return NULL;
|
||||
}
|
||||
|
||||
BfTokenNode* refToken = NULL;
|
||||
|
||||
|
@ -9127,8 +9144,9 @@ BfAstNode* BfReducer::HandleTopLevel(BfBlock* node)
|
|||
}
|
||||
|
||||
BfAstNode* BfReducer::CreateTopLevelObject(BfTokenNode* tokenNode, BfAttributeDirective* attributes, BfAstNode* deferredHeadNode, bool isAnonymous)
|
||||
{
|
||||
AssertCurrentNode(tokenNode);
|
||||
{
|
||||
if (!AssertCurrentNode(tokenNode))
|
||||
return NULL;
|
||||
|
||||
bool isSimpleEnum = false;
|
||||
if (tokenNode->GetToken() == BfToken_Enum)
|
||||
|
@ -9914,7 +9932,8 @@ BfAstNode* BfReducer::CreateTopLevelObject(BfTokenNode* tokenNode, BfAttributeDi
|
|||
|
||||
BfTokenNode* BfReducer::ExpectTokenAfter(BfAstNode* node, BfToken token)
|
||||
{
|
||||
AssertCurrentNode(node);
|
||||
if (!AssertCurrentNode(node))
|
||||
return NULL;
|
||||
auto nextNode = mVisitorPos.GetNext();
|
||||
auto tokenNode = BfNodeDynCast<BfTokenNode>(nextNode);
|
||||
if ((tokenNode == NULL) ||
|
||||
|
@ -9929,7 +9948,8 @@ BfTokenNode* BfReducer::ExpectTokenAfter(BfAstNode* node, BfToken token)
|
|||
|
||||
BfTokenNode* BfReducer::ExpectTokenAfter(BfAstNode* node, BfToken tokenA, BfToken tokenB)
|
||||
{
|
||||
AssertCurrentNode(node);
|
||||
if (!AssertCurrentNode(node))
|
||||
return NULL;
|
||||
auto nextNode = mVisitorPos.GetNext();
|
||||
auto tokenNode = BfNodeDynCast<BfTokenNode>(nextNode);
|
||||
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)
|
||||
{
|
||||
AssertCurrentNode(node);
|
||||
if (!AssertCurrentNode(node))
|
||||
return NULL;
|
||||
auto nextNode = mVisitorPos.GetNext();
|
||||
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)
|
||||
{
|
||||
AssertCurrentNode(node);
|
||||
if (!AssertCurrentNode(node))
|
||||
return NULL;
|
||||
auto nextNode = mVisitorPos.GetNext();
|
||||
auto tokenNode = BfNodeDynCast<BfTokenNode>(nextNode);
|
||||
BfToken token = BfToken_Null;
|
||||
|
@ -9981,7 +10003,8 @@ BfTokenNode* BfReducer::ExpectTokenAfter(BfAstNode* node, BfToken tokenA, BfToke
|
|||
|
||||
BfIdentifierNode* BfReducer::ExpectIdentifierAfter(BfAstNode* node, const char* typeName)
|
||||
{
|
||||
AssertCurrentNode(node);
|
||||
if (!AssertCurrentNode(node))
|
||||
return NULL;
|
||||
auto nextNode = mVisitorPos.GetNext();
|
||||
auto identifierNode = BfNodeDynCast<BfIdentifierNode>(nextNode);
|
||||
if (identifierNode == NULL)
|
||||
|
@ -9998,7 +10021,8 @@ BfIdentifierNode* BfReducer::ExpectIdentifierAfter(BfAstNode* node, const char*
|
|||
|
||||
BfBlock* BfReducer::ExpectBlockAfter(BfAstNode* node)
|
||||
{
|
||||
AssertCurrentNode(node);
|
||||
if (!AssertCurrentNode(node))
|
||||
return NULL;
|
||||
auto nextNode = mVisitorPos.GetNext();
|
||||
auto block = BfNodeDynCast<BfBlock>(nextNode);
|
||||
if (block == NULL)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue