Commit 9e0140d6 authored by Seth Brenith's avatar Seth Brenith Committed by V8 LUCI CQ

[torque] Continue past error when return type is missing

Bug: v8:7793
Change-Id: I1d5f85921f06e22679053cc7b2fe0a1371562048
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3206270
Commit-Queue: Nico Hartmann <nicohartmann@chromium.org>
Reviewed-by: 's avatarNico Hartmann <nicohartmann@chromium.org>
Cr-Commit-Position: refs/heads/main@{#77245}
parent 41a5a247
......@@ -523,6 +523,15 @@ base::Optional<ParseResult> MakeDebugStatement(
return ParseResult{result};
}
base::Optional<ParseResult> DeprecatedMakeVoidType(
ParseResultIterator* child_results) {
Error("Default void return types are deprecated. Add `: void`.");
TypeExpression* result = MakeNode<BasicTypeExpression>(
std::vector<std::string>{}, MakeNode<Identifier>("void"),
std::vector<TypeExpression*>{});
return ParseResult{result};
}
base::Optional<ParseResult> MakeExternalMacro(
ParseResultIterator* child_results) {
auto transitioning = child_results->NextAs<bool>();
......@@ -2262,6 +2271,10 @@ struct TorqueGrammar : Grammar {
TryOrDefault<TypeList>(Sequence({Token("("), typeList, Token(")")}))},
MakeLabelAndTypes)};
// Result: TypeExpression*
Symbol returnType = {Rule({Token(":"), &type}),
Rule({}, DeprecatedMakeVoidType)};
// Result: LabelAndTypesVector
Symbol* optionalLabelList{TryOrDefault<LabelAndTypesVector>(
Sequence({Token("labels"),
......@@ -2569,7 +2582,7 @@ struct TorqueGrammar : Grammar {
Symbol method = {Rule(
{CheckIf(Token("transitioning")),
Optional<std::string>(Sequence({Token("operator"), &externalString})),
Token("macro"), &name, &parameterListNoVararg, Token(":"), &type,
Token("macro"), &name, &parameterListNoVararg, &returnType,
optionalLabelList, &block},
MakeMethodDeclaration)};
......@@ -2616,7 +2629,7 @@ struct TorqueGrammar : Grammar {
AsSingletonVector<Declaration*, MakeTypeAliasDeclaration>()),
Rule({Token("intrinsic"), &intrinsicName,
TryOrDefault<GenericParameters>(&genericParameters),
&parameterListNoVararg, Token(":"), &type, &optionalBody},
&parameterListNoVararg, &returnType, &optionalBody},
AsSingletonVector<Declaration*, MakeIntrinsicDeclaration>()),
Rule({Token("extern"), CheckIf(Token("transitioning")),
Optional<std::string>(
......@@ -2624,33 +2637,32 @@ struct TorqueGrammar : Grammar {
Token("macro"),
Optional<std::string>(Sequence({&identifier, Token("::")})), &name,
TryOrDefault<GenericParameters>(&genericParameters),
&typeListMaybeVarArgs, Token(":"), &type, optionalLabelList,
Token(";")},
&typeListMaybeVarArgs, &returnType, optionalLabelList, Token(";")},
AsSingletonVector<Declaration*, MakeExternalMacro>()),
Rule({Token("extern"), CheckIf(Token("transitioning")),
CheckIf(Token("javascript")), Token("builtin"), &name,
TryOrDefault<GenericParameters>(&genericParameters),
&typeListMaybeVarArgs, Token(":"), &type, Token(";")},
&typeListMaybeVarArgs, &returnType, Token(";")},
AsSingletonVector<Declaration*, MakeExternalBuiltin>()),
Rule({Token("extern"), CheckIf(Token("transitioning")), Token("runtime"),
&name, &typeListMaybeVarArgs, Token(":"), &type, Token(";")},
&name, &typeListMaybeVarArgs, &returnType, Token(";")},
AsSingletonVector<Declaration*, MakeExternalRuntime>()),
Rule({annotations, CheckIf(Token("transitioning")),
Optional<std::string>(
Sequence({Token("operator"), &externalString})),
Token("macro"), &name,
TryOrDefault<GenericParameters>(&genericParameters),
&parameterListNoVararg, Token(":"), &type, optionalLabelList,
&parameterListNoVararg, &returnType, optionalLabelList,
&optionalBody},
AsSingletonVector<Declaration*, MakeTorqueMacroDeclaration>()),
Rule({CheckIf(Token("transitioning")), CheckIf(Token("javascript")),
Token("builtin"), &name,
TryOrDefault<GenericParameters>(&genericParameters),
&parameterListAllowVararg, Token(":"), &type, &optionalBody},
&parameterListAllowVararg, &returnType, &optionalBody},
AsSingletonVector<Declaration*, MakeTorqueBuiltinDeclaration>()),
Rule({CheckIf(Token("transitioning")), &name,
&genericSpecializationTypeList, &parameterListAllowVararg,
Token(":"), &type, optionalLabelList, &block},
&returnType, optionalLabelList, &block},
AsSingletonVector<Declaration*, MakeSpecializationDeclaration>()),
Rule({Token("#include"), &externalString},
AsSingletonVector<Declaration*, MakeCppIncludeDeclaration>()),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment