From a14107f73db9e516e11161fa15d7ec3931448d8f Mon Sep 17 00:00:00 2001 From: Seth Brenith Date: Mon, 14 Dec 2020 14:56:03 -0800 Subject: [PATCH] [torque] Add lint rules for redundant clauses This change adds two simple lint rules to prevent including 'generates' or 'constexpr' clauses in cases where they have no impact on behavior. Bug: v8:7793 Change-Id: Ib1d8fde39ca26735ff9cb7892f01e464619c2090 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2590515 Reviewed-by: Tobias Tebbi Commit-Queue: Seth Brenith Cr-Commit-Position: refs/heads/master@{#71831} --- src/builtins/constructor.tq | 2 +- src/objects/js-array.tq | 3 +-- src/torque/torque-parser.cc | 3 +++ src/torque/type-visitor.cc | 7 ++++++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/builtins/constructor.tq b/src/builtins/constructor.tq index ba68e19028..14304b1d55 100644 --- a/src/builtins/constructor.tq +++ b/src/builtins/constructor.tq @@ -17,7 +17,7 @@ namespace constructor { extern builtin FastNewObject(Context, JSFunction, JSReceiver): JSObject; -extern enum AllocationSiteMode constexpr 'AllocationSiteMode' { +extern enum AllocationSiteMode { DONT_TRACK_ALLOCATION_SITE, TRACK_ALLOCATION_SITE } diff --git a/src/objects/js-array.tq b/src/objects/js-array.tq index a4d4b9d356..b18f5bafac 100644 --- a/src/objects/js-array.tq +++ b/src/objects/js-array.tq @@ -2,8 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -extern enum IterationKind extends uint31 -constexpr 'IterationKind' { kKeys, kValues, kEntries } +extern enum IterationKind extends uint31 { kKeys, kValues, kEntries } extern class JSArrayIterator extends JSObject { iterated_object: JSReceiver; diff --git a/src/torque/torque-parser.cc b/src/torque/torque-parser.cc index f554c1993c..b8845e60ab 100644 --- a/src/torque/torque-parser.cc +++ b/src/torque/torque-parser.cc @@ -1281,6 +1281,9 @@ base::Optional MakeEnumDeclaration( NamingConventionError("Type", name, "UpperCamelCase"); } + if (constexpr_generates_opt && *constexpr_generates_opt == name) { + Lint("Unnecessary 'constexpr' clause for enum ", name); + } auto constexpr_generates = constexpr_generates_opt ? *constexpr_generates_opt : name; const bool generate_nonconstexpr = base_type_expression.has_value(); diff --git a/src/torque/type-visitor.cc b/src/torque/type-visitor.cc index 3caa8ee1c6..b0441399c0 100644 --- a/src/torque/type-visitor.cc +++ b/src/torque/type-visitor.cc @@ -300,7 +300,12 @@ const ClassType* TypeVisitor::ComputeType( if (flags & ClassFlag::kExtern) { if (decl->generates) { bool enforce_tnode_type = true; - generates = ComputeGeneratesType(decl->generates, enforce_tnode_type); + std::string explicit_generates = + ComputeGeneratesType(decl->generates, enforce_tnode_type); + if (explicit_generates == generates) { + Lint("Unnecessary 'generates' clause for class ", decl->name->value); + } + generates = explicit_generates; } if (flags & ClassFlag::kExport) { Error("cannot export a class that is marked extern");