| 5780 | } |
| 5781 | |
| 5782 | BfTypeReference* BfReducer::CreateTypeRef(BfAstNode* firstNode, CreateTypeRefFlags createTypeRefFlags) |
| 5783 | { |
| 5784 | int endNode = -1; |
| 5785 | if ((createTypeRefFlags & CreateTypeRefFlags_SafeGenericParse) != 0) |
| 5786 | { |
| 5787 | createTypeRefFlags = (CreateTypeRefFlags)(createTypeRefFlags & ~CreateTypeRefFlags_SafeGenericParse); |
| 5788 | int outEndNode = -1; |
| 5789 | int retryNode = -1; |
| 5790 | bool isTypeRef = IsTypeReference(firstNode, BfToken_None, -1, &retryNode, &outEndNode, NULL, NULL, NULL); |
| 5791 | if ((!isTypeRef) && (retryNode != -1)) |
| 5792 | endNode = retryNode; |
| 5793 | } |
| 5794 | |
| 5795 | if (auto tokenNode = BfNodeDynCast<BfTokenNode>(firstNode)) |
| 5796 | { |
| 5797 | BfToken token = tokenNode->GetToken(); |
| 5798 | if ((token == BfToken_Ref) || (token == BfToken_Mut)) |
| 5799 | { |
| 5800 | auto nextNode = mVisitorPos.GetNext(); |
| 5801 | mVisitorPos.MoveNext(); |
| 5802 | auto typeRef = DoCreateTypeRef(nextNode, createTypeRefFlags); |
| 5803 | if (typeRef == NULL) |
| 5804 | { |
| 5805 | mVisitorPos.mReadPos--; |
| 5806 | AddErrorNode(tokenNode); |
| 5807 | return NULL; |
| 5808 | } |
| 5809 | return CreateRefTypeRef(typeRef, tokenNode); |
| 5810 | } |
| 5811 | } |
| 5812 | return DoCreateTypeRef(firstNode, createTypeRefFlags, endNode); |
| 5813 | } |
| 5814 | |
| 5815 | BfTypeReference* BfReducer::CreateTypeRefAfter(BfAstNode* astNode, CreateTypeRefFlags createTypeRefFlags) |
| 5816 | { |
no test coverage detected