From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id sI59M5lYHWoqYy0AWB0awg (envelope-from ) for ; Mon, 01 Jun 2026 06:02:01 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=Rka5oSGO; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=Rka5oSGO; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id B98AA1E062; Mon, 01 Jun 2026 06:02:01 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id F12DB1E062 for ; Mon, 01 Jun 2026 06:02:00 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 54E744BA2E23 for ; Mon, 1 Jun 2026 10:02:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 54E744BA2E23 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=Rka5oSGO; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=Rka5oSGO Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012009.outbound.protection.outlook.com [52.101.66.9]) by sourceware.org (Postfix) with ESMTPS id 947DE4BA2E09 for ; Mon, 1 Jun 2026 10:01:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 947DE4BA2E09 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 947DE4BA2E09 Authentication-Results: sourceware.org; arc=pass smtp.remote-ip=52.101.66.9 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1780308090; cv=pass; b=EAaNnw0yw6HAhkG/wg6RNCwlCjuW+QS6qxG7QD2MVSXpcVb68OJBe84CdD7IVVID+FWjAKz1G3GkSpiFFggjsCO2Kj4G3ZDR+jOyOJCSSekFVDA3WH6xL4nIZ0zgkjQLqLDHvZ2a0gBbWfrGilnMt33OD+62Ou+tr2M+7Hdi5hs= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1780308090; c=relaxed/simple; bh=Lp5b0MlFOW1e01cKhZsApc7BaIiBCIpObQjYSWEV/MM=; h=DKIM-Signature:DKIM-Signature:Message-ID:Date:Subject:To:From: MIME-Version; b=Acb4/nkoawEp2du/s8gJKPmXOu9a35lOb/6xfmJnUowwuBP/p4e9vTEasKZNQQU1tqRWrWiQQUsb8zKxgUOBrxPjE0xSRecD1KjK8tHkI8RcsNoy94weCCr12Rqn13KWRhrd+nig3T1Maoe3+iB6q6+o//rZ5z/L9z0XDxL0wRs= ARC-Authentication-Results: i=3; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=Rka5oSGO; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=Rka5oSGO DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 947DE4BA2E09 ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=l9vbF9BoKe+9U9CBZ/reeBl9KS9l4Z1ahbrvfcxniMFyN57pDdHYtqtVG7zAAs/EqtAK5hODserNTBh5bmzGMgi439E9c7s6BuaW9QeasbydsjxyRJyHYOuI0eCVWRkEShwSv8pg6nf8FSvNYeSZ+kwaa5vu1OOm5qw42WXsugOc46dYrJhUamzqTWlPZwwvGrSAt1FkrPSNr+kive6zyCjeuApWJ7UUKgg9pv4a1gwGoCQUnGGbvFwRAuPW1d3reVe3h2NGUX4r+jC/Hu7vh/lhdLctwos690wjNCdzXqDDv1oSPNDFOzZfA1wQMi5v2Ok+9lxkv+3ZmSFFBKVhKQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=nW2qWTC5NkwQdegYd6uZrfGS3o7ZT2skWF5nV7Nt2lM=; b=Rvm07Lqbn08bKvpH3umwjj0xkmIxxUc5iREkHZOaR5Ysvt37wGfNUpovmWypDsk9fJTKqNUfAPk0wAK/WT/811a6savoevLE2/kJcNROALHCdlV7eF/fWA2ZFRSey7ra+SpQSAaJBTxOttpWnNW/8/DnXRnxV9F+17EabVkyPVFAU8ddLExge/yBEFBZFRJD2IBMeclt60cqRqjPAXNC1I6Yad80L1Y4i9Yx1tPmWOZcqXxfN7UyCN+nf+giPLdt9GAEUYqhn3AD0uP0O45tMWDWV27enpGnXdmnLhsY99RX08dSwYA40FTC7MQZ139gzROidtcDd2rd2z2qHDHWjA== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=tromey.com smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nW2qWTC5NkwQdegYd6uZrfGS3o7ZT2skWF5nV7Nt2lM=; b=Rka5oSGOpE6OtZ4Nw+tXsyMce/ixXuwCyKNww1wSEhelx1//EkbNujhbRuYCmPoJLvEk5TArdZscjniu3Q5FAX/hRNFMtypQsrfhqe/R0PO5XgAdtwm2+byrnSVJl2VG0gCTEwJlpx1gKAbFZtVWrdullNcuWyKq9fCWwsrQK4M= Received: from DU2PR04CA0061.eurprd04.prod.outlook.com (2603:10a6:10:232::6) by DB4PR08MB8174.eurprd08.prod.outlook.com (2603:10a6:10:382::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.71.16; Mon, 1 Jun 2026 10:01:25 +0000 Received: from DB1PEPF0003922F.eurprd03.prod.outlook.com (2603:10a6:10:232:cafe::49) by DU2PR04CA0061.outlook.office365.com (2603:10a6:10:232::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.71.16 via Frontend Transport; Mon, 1 Jun 2026 10:01:25 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by DB1PEPF0003922F.mail.protection.outlook.com (10.167.8.102) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.92.5 via Frontend Transport; Mon, 1 Jun 2026 10:01:25 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UgmeQ0HX2DOaVSev0wCEGAZzg5IeCAKQSDxZ3wRWlvCkQLbEwilJxH0ebAzgRRFuT9HRutezU44KSqdRKhU6SEon244Y9tKuKf7ekC5amWDsxwc6vrYjzweDG3zHAOTI/xXzHy4MT1bmbfl8eX/3UC847ReMreqlcAM+tzBdlGoWaKoBwvkpGIu6JEp2WKdIaQBuGqffkQMTjG33/IHxiWZirpQMyxYzh8g0Sy+lRRcgcFUC+6Wbs1GcVA6zjGRdDNytk588K2N8pvGXbnukCjfU3oGhNuVbgzxbiBksbdnMNN9nUUA2HX8d2ndD+UoZtRFIb0d48k5OJgv/UHmXDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=nW2qWTC5NkwQdegYd6uZrfGS3o7ZT2skWF5nV7Nt2lM=; b=wMXh8iwkU94rLRHxp/fiUfERqoAYgl7hKFfYj9P0+wZWxrAEkRSkiQM76KI4RsgK6eW+kk8p7fpEDTbTa6ImYVsQYjpunQz0VLbgWnplf9oHO8ENoe4G+KoxGKXgZURrRZMR9jG5UQRorLImEQ9s87MZZs3MDk/Fic4+qd5RXzVN3pFFKi4RJyGULlUcK2Zg41fs/wSFpJoLVUYPwUtRqUayoAdGNOH5mX2Ne9uByr2RPU1sJCpuUUf9tQqv5pcU02WLR6yWstySNaMrfBhb7vizOzE3JwuDrh2hUbI0yzoHJAq01bsT7rzf3B6OQL7P2zQk3ouYOda3hLZcnoMfKw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nW2qWTC5NkwQdegYd6uZrfGS3o7ZT2skWF5nV7Nt2lM=; b=Rka5oSGOpE6OtZ4Nw+tXsyMce/ixXuwCyKNww1wSEhelx1//EkbNujhbRuYCmPoJLvEk5TArdZscjniu3Q5FAX/hRNFMtypQsrfhqe/R0PO5XgAdtwm2+byrnSVJl2VG0gCTEwJlpx1gKAbFZtVWrdullNcuWyKq9fCWwsrQK4M= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from DU0PR08MB8663.eurprd08.prod.outlook.com (2603:10a6:10:401::6) by GVXPR08MB11638.eurprd08.prod.outlook.com (2603:10a6:150:326::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.71.15; Mon, 1 Jun 2026 10:00:16 +0000 Received: from DU0PR08MB8663.eurprd08.prod.outlook.com ([fe80::f957:cec9:ec8d:7968]) by DU0PR08MB8663.eurprd08.prod.outlook.com ([fe80::f957:cec9:ec8d:7968%2]) with mapi id 15.21.0071.015; Mon, 1 Jun 2026 10:00:16 +0000 Message-ID: <962fc6a6-7e7a-4427-b312-2195d62d19a4@arm.com> Date: Mon, 1 Jun 2026 11:00:15 +0100 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 1/4] Add gdbpy_borrowed_ref To: Tom Tromey , gdb-patches@sourceware.org References: <20260521-python-safety-initial-v3-0-d0679c36e499@tromey.com> <20260521-python-safety-initial-v3-1-d0679c36e499@tromey.com> Content-Language: en-US From: Matthieu Longo In-Reply-To: <20260521-python-safety-initial-v3-1-d0679c36e499@tromey.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: PR3P250CA0029.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:57::34) To DU0PR08MB8663.eurprd08.prod.outlook.com (2603:10a6:10:401::6) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: DU0PR08MB8663:EE_|GVXPR08MB11638:EE_|DB1PEPF0003922F:EE_|DB4PR08MB8174:EE_ X-MS-Office365-Filtering-Correlation-Id: 98b1f985-4b61-47b6-2776-08debfc4bdc2 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; ARA:13230040|366016|376014|1800799024|6133799003|56012099006|11063799006|4143699003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info-Original: jtabXVMXpPg0p8U5prYB5uCDSCMic99bLYOzbP2R3mk7/Wh1eBvIPuh/IVAca9vgSAHnt2aHqgmZT0UTC91O/70iyqvBuCgF70TuFGD7LlGWiDHB1EP/cmecW0nTWsXyrtId5wzlrt2ZC5VFQREmoFehHJ9yh4Bpe4WPKbHMdvdbDIvPb3l1OeN9OlQoUjpT1WBLRRHjaM+ADFemZmvGKouUswAUK9JfBdfZNTzJEtktimiitKFoLixLRpVnwUhOtHCSsdh/a84HqIfp5qhCfW/4HE5Qc9GlrD4AfB5/wFf2Vu0T5ADHlV3udkx5yhL4LXsZHpyX6r+VVOUDuLmEJomCFD4Klr67zp/otbQeE4QU/q0P1h8xI5ZCzGYIUqO4F3AMARjFSSqeanW9YDbloRjhI6TVXsWl9VTsQv1W0Olc37AnEEMJRD18uBBGY66fuPWuqOaq2xc5g/CnuPdvs40NrZtCkDq0Z6vVMGoHI4/+gBavRV7CyER7/LXdzZlyaENqtGU+IOGgOao1Pblu+Hyo8zz1CZZadVEOeIvfVZTc03pMisCRKdCmMtHRX7SEMm1qlFxToDryO1+7hwhadYYJZyWI9CHZcB1WSyLvD6B6EVF354IGzhl+2PDw3MKOH9PTQ/sKYfMZ4As02LVgLzdTxrfSq2v0SwBzPwoGzkk0Wg6Hw6r3c1DV3DF8ZSUDCwffGEfXW63FS7GWHzL9yg== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU0PR08MB8663.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(6133799003)(56012099006)(11063799006)(4143699003)(18002099003)(22082099003); DIR:OUT; SFP:1101; X-Exchange-RoutingPolicyChecked: AVFE6SXb3RnJC4N5AkY/cnopAzhj17QmKyhyiO07toc6W1vGdyBnmo0exooetpNu/n81A9fq15/ZG9y5NPEuGZWKoAkCySUgGCoXxy2NaJM+M/8jkCmkL23ZYcc6/OdYU3veOuk4S/zOw7BVLVQU2D+0LDSNGgB/tWspjr+T0D9tZJMyBtlvzY29He4ruEFYUODgb+7hLIK6pymbKHaJJJ/djbNp1uXcmCFndsypuqZvSAHN1opzZi7g1RZHDhJfO8lh3396WmL8Ix8++Q4z7rteqgKoP7jxudzowrHc4j9qE6G5CoLMyrItOqCEyrlyP58IZuXK/ASzc4S+7qieRQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR08MB11638 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB1PEPF0003922F.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 2a69b1a8-b773-47a9-1a4e-08debfc494f3 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|36860700016|82310400026|376014|35042699022|14060799003|6133799003|18002099003|22082099003|56012099006|11063799006|4143699003; X-Microsoft-Antispam-Message-Info: oURvxgWTmu5uBzhJmZ64yVV/KXkABJ7LznFg8WvYpPqJ8iUnhuDzu+EZBYcGjLZLkLw/ntKQ9mVJbyLT4yA9RVkwSa1m3mN7oGLl0Bl4McQeQCGqsiwTsglDwFPd1b2k9ZPrueJUVYvWmL6gMUodWkpdgaVBCXp+HGtWzb3nIMSN3krPAjqBkO/rSVqkbrRTw70P0n3L0oXty6OB9Yf0NLvMN3ovJlbUQQOERfNaLHORzHBBEfGvsX+vk0MpWneQJrkIHUElHBwpZmSoa5U2HIfnFeTyzpl3+6VNjHooOwemztfRA5Pw4EMwX87nUr44jmZHAIJC+4RkFmcyiO7SUYfYc85B712qiJkkDQhlCcbN7bdZo0PtxyyK0RmwIhKx2XwSXrExCHg/5vHEfZalN5KaO5GAt7ES2EJEXTMnIZHwye8Et7pwATgNyxH2Xi+Uh5HhYfphfO8aQrIOK71bsr+ZoPaEQdyzlFPBHhS3ZBvqoCzpEtI2+bRdOJdhVFq5C/tQnYV4571z//sDXYmknqlnIeoEwCJiv06gDgezHq/gIzY3StMdb5beCNSubKldxb8NbEnAc7Wpqjj7kWHSPu7OmuHaYswRiFwGqt9U3SFWHfCbxZrUD9g2x+bthkh7ni02YgWL+zNXyd46Hj9oG8qkT30+8hluIZ/4Lno+FcoENpfhlxSePNHK1yn81Obsvz7sOP834rv7qiptCjFXyDLQHaETubvQwUeQaTqP20o= X-Forefront-Antispam-Report: CIP:4.158.2.129; CTRY:GB; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:outbound-uk1.az.dlp.m.darktrace.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(1800799024)(36860700016)(82310400026)(376014)(35042699022)(14060799003)(6133799003)(18002099003)(22082099003)(56012099006)(11063799006)(4143699003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: MGe+t7ucTGVoBBzAz+Z1BQr6YiOc4Uf3CKmK90N/QTJjYR5dYiXdwOrqK7Xn4Y09qWa+c6l5QUL0FdTaDQS/wlR5YswB/gYSEuKP5dbmfkXVwq0Kvm3nZ9FFdUgQR1bcSbeWfo4J45qoo9Dw+XumLotpVEZK4pDspwwMh7qRolSLBTvJJ4RjQhoteg1iyhmboDggKnZQVmxOnwuSDziFYNcahP9HWh55shxPy6ITpjK1YHHfF8AjGHkCCGiB8kVEynEPaKE1yeDfB3LUZhEvO0TAL5RNx5w3Q7BFfM2eyEoLCEjP3NqagrxHOHkXIvufquckmVcc5DNtWoycXAt/vVZm0tDuTEaHu4O31MwxqCDgrWUsgfnF2U/6VfTyGB+jJDPJxJO9wAAMKhZrjhWy6khQm727+BWyaL/w6X1vAYdpm/bALIBo7ppRwqQO209c X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jun 2026 10:01:25.0843 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 98b1f985-4b61-47b6-2776-08debfc4bdc2 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[4.158.2.129]; Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: DB1PEPF0003922F.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR08MB8174 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org On 22/05/2026 00:27, Tom Tromey wrote: > This adds new gdbpy_opt_borrowed_ref and gdbpy_borrowed_ref classes. > These classes are primarily for code "documentation" purposes -- it > makes it clear to the reader that a given reference is borrowed. > However, they also add a tiny bit of safety, in that conversion to > gdbpy_ref<> will either be rejected (by the "opt" class) or acquire a > new reference. > --- > gdb/python/py-ref.h | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 86 insertions(+) > > diff --git a/gdb/python/py-ref.h b/gdb/python/py-ref.h > index 3d2906fd7f5..3d0373b7001 100644 > --- a/gdb/python/py-ref.h > +++ b/gdb/python/py-ref.h > @@ -21,6 +21,7 @@ > #define GDB_PYTHON_PY_REF_H > > #include "gdbsupport/gdb_ref_ptr.h" > +#include "gdbsupport/traits.h" > #include "python-traits.h" > > /* A policy class for gdb::ref_ptr for Python reference counting. */ > @@ -42,6 +43,91 @@ struct gdbpy_ref_policy > template using gdbpy_ref > = gdb::ref_ptr; > > +/* A class representing an optional borrowed reference. It is > + "optional" because NULL is a valid value. > + > + This is a simple wrapper for a pointer to PyObject or some subclass > + of it. Aside from documenting what the code does, the main > + advantage of using this is that conversion to a gdbpy_ref is > + prevented. > + > + An optional borrowed reference is only used in situations where > + Python says NULL is valid. For example, it is used as the type of > + the "keywords" argument to a varargs method. Most code should > + prefer an ordinary gdbpy_borrowed_ref, see below. */ > +template > +class gdbpy_opt_borrowed_ref > +{ > +public: > + > + gdbpy_opt_borrowed_ref (T *obj) > + : m_obj (obj) > + { > + } > + > + template > + gdbpy_opt_borrowed_ref (const gdbpy_ref &ref) > + : m_obj (ref.get ()) > + { > + } > + > + operator T * () const > + { > + return m_obj; > + } > + > + operator gdbpy_ref () = delete; > + > +protected: > + > + T *m_obj; > +}; > + > +/* A borrowed reference that is guaranteed not to be NULL. > + > + Like gdbpy_opt_borrowed_ref, this mostly serves a documentary > + purpose. However, it also allows a checked cast to any subclass of > + T, and conversion to a gdbpy_ref will automatically acquire a > + new reference -- a safety improvement over plain PyObject * or the > + like. */ > +template > +class gdbpy_borrowed_ref : public gdbpy_opt_borrowed_ref > +{ > +public: > + > + gdbpy_borrowed_ref (T *obj) > + : gdbpy_opt_borrowed_ref (obj) > + { > + gdb_assert (this->m_obj != nullptr); > + } > + > + template > + gdbpy_borrowed_ref (const gdbpy_ref &ref) > + : gdbpy_opt_borrowed_ref (ref) > + { > + gdb_assert (this->m_obj != nullptr); > + } > + > + gdbpy_borrowed_ref (std::nullptr_t) = delete; > + > + /* Allow a (checked) conversion to any subclass of T. */ > + template + typename = gdb::Requires>> > + operator U * () const > + { > + gdb_assert (PyObject_TypeCheck (this->m_obj, > + U::corresponding_object_type)); > + return static_cast (this->m_obj); > + } > + > + /* When converting a borrowed reference to a gdbpy_ref<>, a new > + reference is acquired. */ > + operator gdbpy_ref () const > + { > + return gdbpy_ref::new_reference (this->m_obj); > + } > +}; > + > /* A wrapper class for Python extension objects that have a __dict__ attribute. > > Any Python C object extension needing __dict__ should inherit from this > Hi Tom, Any idea when this patch could land on master ? Matthieu