From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id A359E385840C for ; Fri, 8 Oct 2021 17:45:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A359E385840C Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 198Hcg1k026095 for ; Fri, 8 Oct 2021 17:45:26 GMT Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by mx0b-00069f02.pphosted.com with ESMTP id 3bjrbu8x7h-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 08 Oct 2021 17:45:26 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 198HaAoF163434 for ; Fri, 8 Oct 2021 17:45:25 GMT Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10lp2103.outbound.protection.outlook.com [104.47.70.103]) by aserp3030.oracle.com with ESMTP id 3bev7y9p11-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 08 Oct 2021 17:45:24 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=L5Ag6MbAt1wchs3Fd+6+G30b55wRVI99Emvh9cAaTvEmc56OW9+wFTY0cnB6iNaSr2nBQcA1EoyAyv+tPWL2j8KW01mg9xQriVGtEF3Z4GCtAhW0XtXH93i7xUFzXFvD2f2IVSMoijnoNSSwFyM3YeRMZro149eZGQ7sr6reS0S6PN2T0i9IfubJcvGgs0LiP5IAAddzGdmSx4VYY3fc+2+3rcJwWp4WpJ+J/KxokprL0Ut9/4YgcvGmUwqbbXlWltiVDiO/re89XKIk0Yrx5rP+/rz6YX2SlowTSp/2yp2Kaiek/WYhy9cNJNjT51JEg/0JtfpqmyJFhVNC4GmLqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=KSmheOnRKEkJ88XyT6OESy9i8n7Af2NOh06GQs+PiBo=; b=Cw1q1IcX8LpqWo9bJQIozFU7R758Yu1ygjXdQYjULFfAmu0Qf89LZtrGndtHe2DbrPAsoVGCu33jwuNodvLrKoVlJ8yMQNfbyWUPQvGkiQwwe+f9o7v9l/gqtx/PMhwoWa4HbAIy387T08jzzGl/NTra7SCqyIIJ49W8LN0OMEDq3eErVV5zroW5F6FWOdnVf5kyVSYH8MJASSiBW9i4gBcGhdeUqgk/R6Eidk1JqgGgDGVWN91EYMrHuAiYZBUjCCfXxZYEPHeIeEmo/aqAsFdns71Orw8MlnuXMZ8T1BrXyI5QcvrYjiU8x2WmmM1/l231fK98gUdTTxDs+PQbfw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none Received: from SA2PR10MB4458.namprd10.prod.outlook.com (2603:10b6:806:f8::24) by SN6PR10MB2749.namprd10.prod.outlook.com (2603:10b6:805:4b::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4587.22; Fri, 8 Oct 2021 17:45:23 +0000 Received: from SA2PR10MB4458.namprd10.prod.outlook.com ([fe80::1493:70de:28e4:3d3e]) by SA2PR10MB4458.namprd10.prod.outlook.com ([fe80::1493:70de:28e4:3d3e%5]) with mapi id 15.20.4566.022; Fri, 8 Oct 2021 17:45:23 +0000 From: David Faust To: gcc-rust@gcc.gnu.org Subject: [PATCH] Remove lambda iterators in various HIR classes Date: Fri, 8 Oct 2021 10:45:07 -0700 Message-Id: <20211008174507.10534-1-david.faust@oracle.com> X-Mailer: git-send-email 2.31.1 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: SN7PR18CA0015.namprd18.prod.outlook.com (2603:10b6:806:f3::6) To SA2PR10MB4458.namprd10.prod.outlook.com (2603:10b6:806:f8::24) MIME-Version: 1.0 Received: from sequence.us.oracle.com (2606:b400:8004:44::27) by SN7PR18CA0015.namprd18.prod.outlook.com (2603:10b6:806:f3::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.17 via Frontend Transport; Fri, 8 Oct 2021 17:45:22 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8ce703f6-79a3-48a9-4d86-08d98a836755 X-MS-TrafficTypeDiagnostic: SN6PR10MB2749: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2276; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PJFDBvHX63ypFm1t8l+bcSQ1wZTd1XMVT2HurJMzPpzZ7KfXr83vWgAmH405ruDFJSQHUemVLtnY+XXvOiHd/5PhApJkD9ZwStCT2JlSBB6gVTZoaR46C8Sf0uygvgnljjxuzAMh32oOYnUVFufnbBwSqcfjr5LtYZhzXzX5iht9pjHAVCCzJy5sc51Fd/Z1QHFUrHtxjai2uJt0b02aEgUqGGcq6P4XeOSGDnQXheK2o1hekB8yUNHkXqPKWqvltkWUyIu7ZFKoH9+vb0zj529tEt547csLouZxzzglaeqMMHoa6Xmcc+HO5eF4WzjiIf3mWW2yfTH9VV21TusmU4ogMJoBk+UZyFlWaNBPDMDQtsVAeVNnueNcYHKL8MAExRfzB1lITCrwh/ZckRl764xSOHhDtBhfKbBfNQ3cLqo4zqx5rrO72cJ3OMYEnB7eYK1wD2Kk6isBlFJoFpcjC9+ky/Lpe6JiiRzUqyXz/AvW8+fcD/7gueAH/IRC+V4iO7cYJbW2bF96Ywd7bgmcv47A8moD5ooCpzzCD0We897xUrVpFzN8LdqpMq5ZrKmcKCGd26Q6qROXs+1n+W7+HwivjrO+LZn6zVtW1/2tPpwbtx6FlvKE2OEh4jHhtr/fNZgERjaiBZqEvJsTROyDvQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SA2PR10MB4458.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(44832011)(83380400001)(8936002)(6916009)(36756003)(508600001)(66476007)(66946007)(66556008)(6486002)(2616005)(30864003)(86362001)(8676002)(2906002)(38100700002)(186003)(52116002)(7696005)(316002)(5660300002)(6666004)(1076003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?egmtWaP2V2P5qtvNBdVnpenknmlF5RpZjLqEEGrhG7lcO2OaXm6ojRAFqT15?= =?us-ascii?Q?OH51DDQ0ETllApP29wN7Jdq7WCN2LSJNEZZUmBvxTgqHPaRk9/c7E6v9Khf0?= =?us-ascii?Q?odagSHIiei8vp+i0BRhR7OjqeS/0nWZnjJgQRCvvHFLiPZ2u0Mr/QMhNpcJw?= =?us-ascii?Q?cuiW83x2t9Cm5iz88Tu6nkWb1EGRinkkrMXgMVsT3ueU3ZcUufBPpDcGgoLn?= =?us-ascii?Q?GKsxO7sGCH8RjLh6Q8fOj6Rfq4efWbagA7gXuKveFOKmKKqt6nmdk9amfxzo?= =?us-ascii?Q?x/Xgr/frup5yklDd3gCZ4eZ8V8yXHxgsIw0EtHq5uUpb3+1id2dUjW5Af/6z?= =?us-ascii?Q?L5cLxlxv6n8cAqpDGY5F8fI649RdxOqbgnZFD1Pf2QjAdvGE5MXNd6oHx8Na?= =?us-ascii?Q?0Ftl3mEcoAyzMx1/6fltszXNfoJccqMFoMiSLqOkULGckeX9gBuOq7HZGgdh?= =?us-ascii?Q?lTTiN6Hy/Omz8ptoLEtGWd1qOG1hpIhXme+4Zbede6HZLqLWOfP4Sy1SomM8?= =?us-ascii?Q?k1KQo9nm8YkdijiVrZ0DvAPMY7Bvd9y9Vg/RfRdZo1y95dp2XJ8HaPJprSbV?= =?us-ascii?Q?OhPJp0OCzB38ia9tVGfVbNf1Nc9pt1u3KhY4qBycHwVHFvHypIGF+ltgVpCP?= =?us-ascii?Q?CmaVt5ia6BppGC8rvzjEZ5nR1zmRpq/4VCUlyLwSZv6XgsmIMDYkCbaqfBAv?= =?us-ascii?Q?952UtCdzKeKWoA2JHGUbO1bqL5/fNZZaQ7wRpe5f73+/uW2/7wnAQMElQEOd?= =?us-ascii?Q?wA+xtqrSkGzFohZCO/VflCsvdm/XV/ls2U6lZ1zmdkii8EN+Y/z3hSWhIQfZ?= =?us-ascii?Q?cLbei6Iw7mDkHZsPUIO+mFr6HbEfiqjLtt8G0OsTI/hbZ4W0kD0dTXhle3OZ?= =?us-ascii?Q?wQmQcsoErPuQ5j4OQRAfLp5Ec8JfxuepdEsBs1CUc8wP+MnRSDsG1z1AFgJ9?= =?us-ascii?Q?ZYrc02l7Ss2A8JR/IuUeJby2CCxFbNelFnLMAR3lkbIvK86T/J2hJlVcrexy?= =?us-ascii?Q?qwG2/vt9Ye3D1/A8ug27hpnxt3QMvSjx7DYChD4KQe3pVzjlGwzNP+upIAia?= =?us-ascii?Q?GBd86s32IPBsZJ64sbxM2NacSeHwH7CXHyo8zyd4Fr5jWW3wiPlBTr2nj5gs?= =?us-ascii?Q?75iTayi9bFHHgZ2Y2ljp7109PNvCG4cLcFTIkAl88tfEb9pRBWbPGVKdSYgJ?= =?us-ascii?Q?S9dSmU777FBbkOxelGg2oZBvPZrW7FBymorU8eHs9FTUPfZ0s8xL1aMHaaJ5?= =?us-ascii?Q?FKSPzX7R0YQvI94pSn4Rmg05IWAjaUnjgpkO1VQZ5E8SSMqcKhONm7Xz1nTk?= =?us-ascii?Q?3rg39cPJvcKsOzueS0D+4XPbFE0bQSDXZGGe8O25/Ic63A=3D=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8ce703f6-79a3-48a9-4d86-08d98a836755 X-MS-Exchange-CrossTenant-AuthSource: SA2PR10MB4458.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Oct 2021 17:45:22.9763 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: b4HldTBQPTMxhY8BswSktrm608KlHLYUKhx5SFP7tLt+sRUJqGK5FAwHgjBOtKZ+vjyveEDeGUEFXOwXHF6WBg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR10MB2749 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10131 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 mlxlogscore=909 adultscore=0 bulkscore=0 suspectscore=0 malwarescore=0 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2109230001 definitions=main-2110080098 X-Proofpoint-GUID: Dn3HSV-3UXgZTimgiYRKiTzJxcEiaMc8 X-Proofpoint-ORIG-GUID: Dn3HSV-3UXgZTimgiYRKiTzJxcEiaMc8 X-Spam-Status: No, score=-13.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, MSGID_FROM_MTA_HEADER, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-rust@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: gcc-rust mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Oct 2021 17:45:30 -0000 This patch removes the lambda iterators used in various HIR objects. These iterators make interacting with the IR for static analysis more difficult. Instead, get_X () helpers are added for accessing elements, and uses of the iterators replaced with for loops. The following objects are adjusted in this patch: - HIR::TupleExpr - HIR::StructExprField - HIR::StructStruct - HIR::TupleStruct Fixes: #704, #705, #706, #707 --- gcc/rust/backend/rust-compile-expr.h | 20 ++++----- gcc/rust/hir/tree/rust-hir-expr.h | 32 +------------ gcc/rust/hir/tree/rust-hir-item.h | 18 +------- gcc/rust/lint/rust-lint-marklive.h | 24 +++++----- gcc/rust/lint/rust-lint-scan-deadcode.h | 20 ++++----- gcc/rust/typecheck/rust-hir-type-check-expr.h | 9 ++-- gcc/rust/typecheck/rust-hir-type-check-stmt.h | 44 +++++++++--------- .../typecheck/rust-hir-type-check-toplevel.h | 45 ++++++++++--------- gcc/rust/typecheck/rust-hir-type-check.cc | 33 +++++++------- gcc/rust/typecheck/rust-tycheck-dump.h | 10 ++--- 10 files changed, 107 insertions(+), 148 deletions(-) diff --git a/gcc/rust/backend/rust-compile-expr.h b/gcc/rust/backend/rust-compile-expr.h index eb245dce5be..7c4046680e9 100644 --- a/gcc/rust/backend/rust-compile-expr.h +++ b/gcc/rust/backend/rust-compile-expr.h @@ -412,11 +412,11 @@ public: void visit (HIR::ArrayElemsValues &elems) override { - elems.iterate ([&] (HIR::Expr *e) mutable -> bool { - Bexpression *translated_expr = CompileExpr::Compile (e, ctx); - constructor.push_back (translated_expr); - return true; - }); + for (auto &elem : elems.get_values ()) + { + Bexpression *translated_expr = CompileExpr::Compile (elem.get (), ctx); + constructor.push_back (translated_expr); + } } void visit (HIR::ArrayElemsCopied &elems) override @@ -646,11 +646,11 @@ public: // this assumes all fields are in order from type resolution and if a base // struct was specified those fields are filed via accesors std::vector vals; - struct_expr.iterate ([&] (HIR::StructExprField *field) mutable -> bool { - Bexpression *expr = CompileStructExprField::Compile (field, ctx); - vals.push_back (expr); - return true; - }); + for (auto &field : struct_expr.get_fields ()) + { + Bexpression *expr = CompileStructExprField::Compile (field.get (), ctx); + vals.push_back (expr); + } translated = ctx->get_backend ()->constructor_expression (type, vals, diff --git a/gcc/rust/hir/tree/rust-hir-expr.h b/gcc/rust/hir/tree/rust-hir-expr.h index 05bc1f9f055..d9958a153be 100644 --- a/gcc/rust/hir/tree/rust-hir-expr.h +++ b/gcc/rust/hir/tree/rust-hir-expr.h @@ -796,14 +796,7 @@ public: size_t get_num_elements () const { return values.size (); } - void iterate (std::function cb) - { - for (auto it = values.begin (); it != values.end (); it++) - { - if (!cb ((*it).get ())) - return; - } - } + std::vector>& get_values () { return values; } protected: ArrayElemsValues *clone_array_elems_impl () const override @@ -1070,15 +1063,6 @@ public: bool is_unit () const { return tuple_elems.size () == 0; } - void iterate (std::function cb) - { - for (auto &tuple_elem : tuple_elems) - { - if (!cb (tuple_elem.get ())) - return; - } - } - protected: /* Use covariance to implement clone function as returning this object rather * than base */ @@ -1491,15 +1475,6 @@ public: void accept_vis (HIRVisitor &vis) override; - void iterate (std::function cb) - { - for (auto &field : fields) - { - if (!cb (field.get ())) - return; - } - } - std::vector > &get_fields () { return fields; @@ -1510,11 +1485,6 @@ public: return fields; }; - std::vector > get_fields_as_owner () - { - return std::move (fields); - }; - void set_fields_as_owner ( std::vector > new_fields) { diff --git a/gcc/rust/hir/tree/rust-hir-item.h b/gcc/rust/hir/tree/rust-hir-item.h index 8cd7a01b2e8..f5119c3dc77 100644 --- a/gcc/rust/hir/tree/rust-hir-item.h +++ b/gcc/rust/hir/tree/rust-hir-item.h @@ -1492,14 +1492,7 @@ public: void accept_vis (HIRVisitor &vis) override; - void iterate (std::function cb) - { - for (auto &field : fields) - { - if (!cb (field)) - return; - } - } + std::vector& get_fields() { return fields; } protected: /* Use covariance to implement clone function as returning this object @@ -1610,15 +1603,6 @@ public: std::vector &get_fields () { return fields; } const std::vector &get_fields () const { return fields; } - void iterate (std::function cb) - { - for (auto &field : fields) - { - if (!cb (field)) - return; - } - } - protected: /* Use covariance to implement clone function as returning this object * rather than base */ diff --git a/gcc/rust/lint/rust-lint-marklive.h b/gcc/rust/lint/rust-lint-marklive.h index 062bb96bc0f..cd72ef0243d 100644 --- a/gcc/rust/lint/rust-lint-marklive.h +++ b/gcc/rust/lint/rust-lint-marklive.h @@ -81,18 +81,18 @@ public: void visit (HIR::ArrayElemsValues &expr) override { - expr.iterate ([&] (HIR::Expr *expr) mutable -> bool { - expr->accept_vis (*this); - return true; - }); + for (auto &elem : expr.get_values ()) + { + elem->accept_vis (*this); + } } void visit (HIR::TupleExpr &expr) override { - expr.iterate ([&] (HIR::Expr *expr) mutable -> bool { - expr->accept_vis (*this); - return true; - }); + for (auto &elem : expr.get_tuple_elems ()) + { + elem->accept_vis (*this); + } } void visit (HIR::BlockExpr &expr) override @@ -236,10 +236,10 @@ public: void visit (HIR::StructExprStructFields &stct) override { - stct.iterate ([&] (HIR::StructExprField *field) -> bool { - field->accept_vis (*this); - return true; - }); + for (auto &field : stct.get_fields ()) + { + field->accept_vis (*this); + } stct.get_struct_name ().accept_vis (*this); if (stct.has_struct_base ()) diff --git a/gcc/rust/lint/rust-lint-scan-deadcode.h b/gcc/rust/lint/rust-lint-scan-deadcode.h index 464852a9f8f..152858a9e13 100644 --- a/gcc/rust/lint/rust-lint-scan-deadcode.h +++ b/gcc/rust/lint/rust-lint-scan-deadcode.h @@ -88,16 +88,16 @@ public: else { // only warn the unused fields when in unwarned struct. - stct.iterate ([&] (HIR::StructField &field) -> bool { - HirId field_hir_id = field.get_mappings ().get_hirid (); - if (should_warn (field_hir_id)) - { - rust_warning_at (field.get_locus (), 0, - "field is never read: %<%s%>", - field.get_field_name ().c_str ()); - } - return true; - }); + for (auto &field : stct.get_fields ()) + { + HirId field_hir_id = field.get_mappings ().get_hirid (); + if (should_warn (field_hir_id)) + { + rust_warning_at (field.get_locus (), 0, + "field is never read: %<%s%>", + field.get_field_name ().c_str ()); + } + } } } diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.h b/gcc/rust/typecheck/rust-hir-type-check-expr.h index 28b985108cf..d9eeb4e3759 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-expr.h +++ b/gcc/rust/typecheck/rust-hir-type-check-expr.h @@ -880,10 +880,11 @@ public: void visit (HIR::ArrayElemsValues &elems) override { std::vector types; - elems.iterate ([&] (HIR::Expr *e) mutable -> bool { - types.push_back (TypeCheckExpr::Resolve (e, false)); - return true; - }); + + for (auto &elem : elems.get_values ()) + { + types.push_back (TypeCheckExpr::Resolve (elem.get (), false)); + } infered_array_elems = TyTy::TyVar::get_implicit_infer_var (root_array_expr_locus).get_tyty (); diff --git a/gcc/rust/typecheck/rust-hir-type-check-stmt.h b/gcc/rust/typecheck/rust-hir-type-check-stmt.h index 5f4721b955b..3f8d17e5307 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-stmt.h +++ b/gcc/rust/typecheck/rust-hir-type-check-stmt.h @@ -144,17 +144,18 @@ public: std::vector fields; size_t idx = 0; - struct_decl.iterate ([&] (HIR::TupleField &field) mutable -> bool { - TyTy::BaseType *field_type - = TypeCheckType::Resolve (field.get_field_type ().get ()); - TyTy::StructFieldType *ty_field - = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), - std::to_string (idx), field_type); - fields.push_back (ty_field); - context->insert_type (field.get_mappings (), ty_field->get_field_type ()); - idx++; - return true; - }); + for (auto &field : struct_decl.get_fields ()) + { + TyTy::BaseType *field_type + = TypeCheckType::Resolve (field.get_field_type ().get ()); + TyTy::StructFieldType *ty_field + = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), + std::to_string (idx), field_type); + fields.push_back (ty_field); + context->insert_type (field.get_mappings (), + ty_field->get_field_type ()); + idx++; + } TyTy::BaseType *type = new TyTy::ADTType (struct_decl.get_mappings ().get_hirid (), @@ -196,16 +197,17 @@ public: } std::vector fields; - struct_decl.iterate ([&] (HIR::StructField &field) mutable -> bool { - TyTy::BaseType *field_type - = TypeCheckType::Resolve (field.get_field_type ().get ()); - TyTy::StructFieldType *ty_field - = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), - field.get_field_name (), field_type); - fields.push_back (ty_field); - context->insert_type (field.get_mappings (), ty_field->get_field_type ()); - return true; - }); + for (auto &field : struct_decl.get_fields ()) + { + TyTy::BaseType *field_type + = TypeCheckType::Resolve (field.get_field_type ().get ()); + TyTy::StructFieldType *ty_field + = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), + field.get_field_name (), field_type); + fields.push_back (ty_field); + context->insert_type (field.get_mappings (), + ty_field->get_field_type ()); + } TyTy::BaseType *type = new TyTy::ADTType (struct_decl.get_mappings ().get_hirid (), diff --git a/gcc/rust/typecheck/rust-hir-type-check-toplevel.h b/gcc/rust/typecheck/rust-hir-type-check-toplevel.h index 9fac813c46d..131149fabeb 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-toplevel.h +++ b/gcc/rust/typecheck/rust-hir-type-check-toplevel.h @@ -79,17 +79,18 @@ public: std::vector fields; size_t idx = 0; - struct_decl.iterate ([&] (HIR::TupleField &field) mutable -> bool { - TyTy::BaseType *field_type - = TypeCheckType::Resolve (field.get_field_type ().get ()); - TyTy::StructFieldType *ty_field - = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), - std::to_string (idx), field_type); - fields.push_back (ty_field); - context->insert_type (field.get_mappings (), ty_field->get_field_type ()); - idx++; - return true; - }); + for (auto &field : struct_decl.get_fields ()) + { + TyTy::BaseType *field_type + = TypeCheckType::Resolve (field.get_field_type ().get ()); + TyTy::StructFieldType *ty_field + = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), + std::to_string (idx), field_type); + fields.push_back (ty_field); + context->insert_type (field.get_mappings (), + ty_field->get_field_type ()); + idx++; + } TyTy::BaseType *type = new TyTy::ADTType (struct_decl.get_mappings ().get_hirid (), @@ -136,16 +137,18 @@ public: } std::vector fields; - struct_decl.iterate ([&] (HIR::StructField &field) mutable -> bool { - TyTy::BaseType *field_type - = TypeCheckType::Resolve (field.get_field_type ().get ()); - TyTy::StructFieldType *ty_field - = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), - field.get_field_name (), field_type); - fields.push_back (ty_field); - context->insert_type (field.get_mappings (), ty_field->get_field_type ()); - return true; - }); + + for (auto &field : struct_decl.get_fields ()) + { + TyTy::BaseType *field_type + = TypeCheckType::Resolve (field.get_field_type ().get ()); + TyTy::StructFieldType *ty_field + = new TyTy::StructFieldType (field.get_mappings ().get_hirid (), + field.get_field_name (), field_type); + fields.push_back (ty_field); + context->insert_type (field.get_mappings (), + ty_field->get_field_type ()); + } TyTy::BaseType *type = new TyTy::ADTType (struct_decl.get_mappings ().get_hirid (), diff --git a/gcc/rust/typecheck/rust-hir-type-check.cc b/gcc/rust/typecheck/rust-hir-type-check.cc index 0cd6883958d..a30f4c43a36 100644 --- a/gcc/rust/typecheck/rust-hir-type-check.cc +++ b/gcc/rust/typecheck/rust-hir-type-check.cc @@ -153,20 +153,21 @@ TypeCheckStructExpr::visit (HIR::StructExprStructFields &struct_expr) std::vector infered_fields; bool ok = true; - struct_expr.iterate ([&] (HIR::StructExprField *field) mutable -> bool { - resolved_field_value_expr = nullptr; - field->accept_vis (*this); - if (resolved_field_value_expr == nullptr) - { - rust_fatal_error (field->get_locus (), - "failed to resolve type for field"); - ok = false; - return false; - } - context->insert_type (field->get_mappings (), resolved_field_value_expr); - return true; - }); + for (auto &field : struct_expr.get_fields ()) + { + resolved_field_value_expr = nullptr; + field->accept_vis (*this); + if (resolved_field_value_expr == nullptr) + { + rust_fatal_error (field->get_locus (), + "failed to resolve type for field"); + ok = false; + break; + } + + context->insert_type (field->get_mappings (), resolved_field_value_expr); + } // something failed setting up the fields if (!ok) @@ -266,10 +267,8 @@ TypeCheckStructExpr::visit (HIR::StructExprStructFields &struct_expr) // correctly. The GIMPLE backend uses a simple algorithm that assumes each // assigned field in the constructor is in the same order as the field in // the type - std::vector > expr_fields - = struct_expr.get_fields_as_owner (); - for (auto &f : expr_fields) - f.release (); + for (auto &field : struct_expr.get_fields ()) + field.release (); std::vector > ordered_fields; for (size_t i = 0; i < adtFieldIndexToField.size (); i++) diff --git a/gcc/rust/typecheck/rust-tycheck-dump.h b/gcc/rust/typecheck/rust-tycheck-dump.h index cc2e3c01110..6856d0538b8 100644 --- a/gcc/rust/typecheck/rust-tycheck-dump.h +++ b/gcc/rust/typecheck/rust-tycheck-dump.h @@ -162,11 +162,11 @@ public: void visit (HIR::ArrayElemsValues &elems) override { - elems.iterate ([&] (HIR::Expr *e) mutable -> bool { - e->accept_vis (*this); - dump += ","; - return true; - }); + for (auto &elem : elems.get_values ()) + { + elem->accept_vis (*this); + dump += ","; + } } void visit (HIR::GroupedExpr &expr) override -- 2.30.2