浏览代码

Fixed IsTypeReference 'char*[]' cases

Brian Fiete 3 年之前
父节点
当前提交
d6a447f915
共有 1 个文件被更改,包括 14 次插入2 次删除
  1. 14 2
      IDEHelper/Compiler/BfReducer.cpp

+ 14 - 2
IDEHelper/Compiler/BfReducer.cpp

@@ -716,6 +716,8 @@ bool BfReducer::IsTypeReference(BfAstNode* checkNode, BfToken successToken, int
 				}
 				else if ((checkToken == BfToken_Star) || (checkToken == BfToken_Question))
 				{
+					bool keepParsing = false;
+
 					if (checkToken == BfToken_Star)
 					{
 						auto prevNode = mVisitorPos.Get(checkIdx - 1);
@@ -738,6 +740,12 @@ bool BfReducer::IsTypeReference(BfAstNode* checkNode, BfToken successToken, int
 						{
 							auto nextNode = mVisitorPos.Get(checkIdx + 1);
 							auto nextToken = BfNodeDynCast<BfTokenNode>(nextNode);
+							if ((nextToken != NULL) && (nextToken->GetToken() == BfToken_LBracket))
+							{
+								keepParsing = true;
+								break;
+							}
+
 							if ((nextToken == NULL) || (nextToken->GetToken() != BfToken_Star))
 								break;
 							checkTokenNode = nextToken;
@@ -759,8 +767,12 @@ bool BfReducer::IsTypeReference(BfAstNode* checkNode, BfToken successToken, int
 						}
 					}
 
-					// Star or Question always end a TypeRef
-					if ((chevronDepth == 0) && (parenDepth == 0) && (bracketDepth == 0))
+					// Star or Question normally end a TypeRef
+					if (keepParsing)
+					{
+						// Keep going
+					}
+					else if ((chevronDepth == 0) && (parenDepth == 0) && (bracketDepth == 0))
 					{
 						if (hadTupleComma)
 							return false;