@@ -179,9 +179,8 @@ ParserResult<TypeRepr> Parser::parseTypeSimple(Diag<> MessageID,
179179 break ;
180180 if (CodeCompletion)
181181 CodeCompletion->completeTypeSimpleBeginning ();
182- // Eat the code completion token because we handled it.
183- consumeToken (tok::code_complete);
184- return makeParserCodeCompletionResult<TypeRepr>();
182+ return makeParserCodeCompletionResult<TypeRepr>(
183+ new (Context) ErrorTypeRepr (consumeToken (tok::code_complete)));
185184 case tok::l_square: {
186185 auto Result = parseTypeCollection ();
187186 if (Result.hasSyntax ())
@@ -407,11 +406,10 @@ ParserResult<TypeRepr> Parser::parseType(Diag<> MessageID,
407406
408407 ParserResult<TypeRepr> ty =
409408 parseTypeSimpleOrComposition (MessageID, HandleCodeCompletion);
410- if (ty.hasCodeCompletion ())
411- return makeParserCodeCompletionResult<TypeRepr>();
412409 if (ty.isNull ())
413- return nullptr ;
410+ return ty ;
414411 auto tyR = ty.get ();
412+ auto status = ParserStatus (ty);
415413
416414 // Parse a throws specifier.
417415 // Don't consume 'throws', if the next token is not '->', so we can emit a
@@ -442,10 +440,11 @@ ParserResult<TypeRepr> Parser::parseType(Diag<> MessageID,
442440 }
443441 ParserResult<TypeRepr> SecondHalf =
444442 parseType (diag::expected_type_function_result);
445- if (SecondHalf.hasCodeCompletion ())
446- return makeParserCodeCompletionResult<TypeRepr>();
447- if (SecondHalf.isNull ())
448- return nullptr ;
443+ if (SecondHalf.isNull ()) {
444+ status.setIsParseError ();
445+ return status;
446+ }
447+ status |= SecondHalf;
449448
450449 if (SyntaxContext->isEnabled ()) {
451450 ParsedFunctionTypeSyntaxBuilder Builder (*SyntaxContext);
@@ -594,8 +593,8 @@ ParserResult<TypeRepr> Parser::parseType(Diag<> MessageID,
594593 if (specifierLoc.isValid () || !attrs.empty ())
595594 SyntaxContext->setCreateSyntax (SyntaxKind::AttributedType);
596595
597- return makeParserResult (applyAttributeToType (tyR, attrs, specifier,
598- specifierLoc));
596+ return makeParserResult (status, applyAttributeToType (tyR, attrs, specifier,
597+ specifierLoc));
599598}
600599
601600ParserResult<TypeRepr> Parser::parseDeclResultType (Diag<> MessageID) {
@@ -844,8 +843,6 @@ Parser::parseTypeSimpleOrComposition(Diag<> MessageID,
844843 // Parse the first type
845844 ParserResult<TypeRepr> FirstType = parseTypeSimple (MessageID,
846845 HandleCodeCompletion);
847- if (FirstType.hasCodeCompletion ())
848- return makeParserCodeCompletionResult<TypeRepr>();
849846 if (FirstType.isNull ())
850847 return FirstType;
851848 if (!Tok.isContextualPunctuator (" &" )) {
@@ -1255,8 +1252,6 @@ ParserResult<TypeRepr> Parser::parseTypeArray(TypeRepr *Base) {
12551252 auto sizeEx = parseExprBasic (diag::expected_expr);
12561253 if (sizeEx.hasCodeCompletion ())
12571254 return makeParserCodeCompletionStatus ();
1258- if (sizeEx.isNull ())
1259- return makeParserErrorResult (Base);
12601255 }
12611256
12621257 SourceLoc rsquareLoc;
0 commit comments