From patchwork Wed Feb 7 11:43:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arthur Cohen X-Patchwork-Id: 197906 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2201860dyb; Wed, 7 Feb 2024 04:49:29 -0800 (PST) X-Google-Smtp-Source: AGHT+IHhqZa1457Scj9hwTgSTU4QZGDMetDSRmv2UkyT4ryESPY7MEzWdE5Lxxvlk+MbBZ0BwUVN X-Received: by 2002:a05:6102:232b:b0:46d:2956:6b11 with SMTP id b11-20020a056102232b00b0046d29566b11mr2150692vsa.16.1707310169264; Wed, 07 Feb 2024 04:49:29 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707310169; cv=pass; d=google.com; s=arc-20160816; b=mJ3zoSE/ySzdaT9zQQloya3nKI65mHS4lHr0GNYyjyP0+iw4XhGKOGwDxR87YT/ooS tFrELDjCIFLKjwb56mjuUuQn0HLiokzMm9vFryTv3DoGHtFajM4eIA+8/rkC6dXCtT3P FK6/iWASCZ/EG1XLlh51K8mhna21ZPMhL9sYZYjjSQr6+XgObO8LjGwHbS8nIEgPrBdj sejIFMajGkq5sza/MiEFzAy3C/lAaj1JBisRKbMlqW1whFmJWLKlIAs2Me2d80itFgJu 3LnuR1ICATzKu079U2E5YlNhbONztubKQHVwLScPo+xXMQFNAtpwikL9TlXJPOOb2PeA m/QA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=Id2kiLpyc7d9/Q/OJCjbR3tmnFL56ICg9trRVm14N7A=; fh=6uvsgyjdA1M/BxzsMheMCtImRRzScc5cMd/kifh7Yh8=; b=CPTXJ6PM5Z1vGFOplfFF+ShC94F1hDHQMqSICltG4hMSnLsJNppwGLMWt+NQ6Epkmt qi0bYy0Il0a8wMPxEkWa+X5/YwjO/M5OCwR4nuiDKPfWAzBxkVfsuGHPtsWxRGBo5Uot KVmtb4hmGMJuxI3HVnNp8YUYFAQ7KKqfDzX4RQZntBNOFySz2eTeLBAmRg6RluhsjN8S AhsrMyTOg3wXnyPqswGpW2G0eS6RBf68GvKIf+R/mqDhZq/D53Q82KfkpCjne2Ip2C7r ax/n+FGSbWT4sg5jUOu1DD3jOaP0LjMGqXjq/PBt1pOHacXSN0i+XAH5un3pDbHRMvy0 WHAw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=TXjs2QRY; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org" X-Forwarded-Encrypted: i=2; AJvYcCU7sZvJSUC4bbJ9FEweSKANOQ5ay/p4/VqH+f6hXWc/zFAQy7BXu1nF40csmZPsBKQuCs5IjfbnncldXZF0hxInw5Nh2Q== Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id l5-20020ad44245000000b0068c4919b66fsi1014802qvq.147.2024.02.07.04.49.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:49:29 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@embecosm.com header.s=google header.b=TXjs2QRY; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8577B385841C for ; Wed, 7 Feb 2024 12:49:28 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by sourceware.org (Postfix) with ESMTPS id 77C91385841C for ; Wed, 7 Feb 2024 12:44:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 77C91385841C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 77C91385841C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::332 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309852; cv=none; b=mDISOLu1W63mt09u2R33QaoUR6ic3WSDWQfRWXK9fkIonxG+2+pKCa2z6TrHA+CcXjG5LNyJY+D6597QNJrX63v+V6Anq1KrKZoi1/cfe8s9Adju1P2OdO4fqGZYLy4M3SihubbWxuz8xpGeByv7rnyIa2ppwdy3TKTqH0tzOO0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309852; c=relaxed/simple; bh=ESkRPyZkvzYIKPrm4s6pWomGdK9j5ELdxm4b9qdDz2E=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=CKkt5cqIxc+A8UDp9Wb/h1/69yLgoQNnWtygaGFsYDfwptDgX4TvZqr7F4Tx0dHM4mNhjResRJj8EyWetYtQc/e/W/g2SXk5gFsQpnFbfsSMYKIIjWU0cpc3mLvP7Ju0ZBDxeKJijDO1xL3w0G/L2qLa3Xr0MgVhybj0SoSlFuY= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-40fd72f7125so4883615e9.1 for ; Wed, 07 Feb 2024 04:44:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; t=1707309842; x=1707914642; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=Id2kiLpyc7d9/Q/OJCjbR3tmnFL56ICg9trRVm14N7A=; b=TXjs2QRYdxfH+2cxy/eaAbpjevy88Yoqc3oa/Xusv3mRad7FB5Zp66F3SjseUU2llF mnlQ7CVC2zDmR8kO/0nxORPwfUFXmZZM8PJr8uswytS8BJL5UHC2bCt/TjTci10m/AzU GB0aiwwkU00uJm3DC0nQhlZBciaFLJ7rBuVgFPJgKWhqgqybvexYj6kaaDogaVVFw0r3 2+WVGaOeLyGgL08dCuixsfoFqgqHBSCxJjYg2OvL2guok1uLAVBzjCrON57jsXrRX9rl 2cE4TB8xDKs7m7/ZTKKx8tpvkzJohP4NHQ65f8cZZTMUijIkm5fxg/WsyC0ZuEnSxf0q OlTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707309842; x=1707914642; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Id2kiLpyc7d9/Q/OJCjbR3tmnFL56ICg9trRVm14N7A=; b=Mk6P8nZGksBc/WM5iHxjNQfQpPGr/LkhF3Qh4nuz9X0i/0PAEeuwGVsNqzZ00z01j4 OMGsQ/ZP+zUVP01l7mKO0rzRGB8Sge2jNVmGapdU3YIxR9YlgAbO2mh87lSHpGpbMn5+ fSIArhGFJ4zo1PTvVukMlx66mqL1fmSOz/HdKPLxnz7azR0N1HIEX/Npy0zHkYANAgsI LhoE3k6ZiQH9IaO6LlSaZLnSPEs0BCBfDYo21hCW+wqWq9fM0/asEfNnXdss0lrx+Oxc z2ETC8F9x6AwSfLqjCSqnYUz7PhGIi8ebVJpoPhmbHprW3WmSXt1yY8bD/N4Hl9FArAd 4LEA== X-Gm-Message-State: AOJu0Yzr7YrX4KVk1DZTdH0dTCEN6TBUnp0N1gO770WWorKGC4Mg4Y6G f2Y3x1yPxNP4tZ9ZeTriXoCEQRX1kbqa8Zg4wtE6/vacNkPCXRr6vPN19o9wyqp7od1EEgKW6wA N3g== X-Received: by 2002:a05:600c:354d:b0:40f:d3da:85cf with SMTP id i13-20020a05600c354d00b0040fd3da85cfmr4496299wmq.8.1707309842578; Wed, 07 Feb 2024 04:44:02 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCW6lxmrSFsOCXGCbRqdvFoVU/v+Yplv9ZigVuI6vIsA31eSgkOzQnXVQ5zJLk+BAw17XeWuIpK8VD6HgBGHJapRCjI= Received: from platypus.sou.embecosm-corp.com ([212.69.42.53]) by smtp.gmail.com with ESMTPSA id x19-20020a05600c2a5300b0040fbdd6f69bsm5044188wme.33.2024.02.07.04.44.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 04:44:02 -0800 (PST) From: arthur.cohen@embecosm.com To: gcc-patches@gcc.gnu.org Cc: gcc-rust@gcc.gnu.org, Jakub Dupak Subject: [COMMITTED 04/25] gccrs: TyTy: Region (lifetime) representation Date: Wed, 7 Feb 2024 12:43:50 +0100 Message-ID: <20240207114419.1100894-5-arthur.cohen@embecosm.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20240207114419.1100894-2-arthur.cohen@embecosm.com> References: <20240207114419.1100894-2-arthur.cohen@embecosm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: arthur.cohen@embecosm.com Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790244467955367911 X-GMAIL-MSGID: 1790244467955367911 From: Jakub Dupak gcc/rust/ChangeLog: * typecheck/rust-tyty-region.h: New file. Signed-off-by: Jakub Dupak --- gcc/rust/typecheck/rust-tyty-region.h | 110 ++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 gcc/rust/typecheck/rust-tyty-region.h diff --git a/gcc/rust/typecheck/rust-tyty-region.h b/gcc/rust/typecheck/rust-tyty-region.h new file mode 100644 index 00000000000..b34a2115e7a --- /dev/null +++ b/gcc/rust/typecheck/rust-tyty-region.h @@ -0,0 +1,110 @@ +#ifndef RUST_TYTY_REGION_H +#define RUST_TYTY_REGION_H + +namespace Rust { +namespace TyTy { + +class Region +{ + enum Variant : uint8_t + { + UNRESOLVED, + STATIC, + EARLY_BOUND, + LATE_BOUND, + NAMED, + ANONYMOUS, + ERASED, + }; + + uint32_t index; + uint16_t debruijn_index; + Variant variant; + +public: + Region () : Region (UNRESOLVED) {} + Region (const Region &other) + : index (other.index), debruijn_index (other.debruijn_index), + variant (other.variant) + {} + Region (Region &&other) noexcept + : index (other.index), debruijn_index (other.debruijn_index), + variant (other.variant) + {} + Region &operator= (const Region &other) + { + if (this == &other) + return *this; + index = other.index; + debruijn_index = other.debruijn_index; + variant = other.variant; + return *this; + } + Region &operator= (Region &&other) noexcept + { + if (this == &other) + return *this; + index = other.index; + debruijn_index = other.debruijn_index; + variant = other.variant; + return *this; + } + + static Region make_static () { return Region (STATIC); } + static Region make_early_bound (uint32_t index) + { + return Region (EARLY_BOUND, index); + } + static Region make_late_bound (uint32_t index, uint16_t debruijn_index) + { + return Region (LATE_BOUND, index, debruijn_index); + } + static Region make_named (uint32_t index) { return Region (NAMED, index); } + static Region make_anonymous () { return Region (ANONYMOUS); } + static Region make_erased () { return Region (ERASED); } + + size_t get_index () const { return index; } + + bool is_static () const { return variant == STATIC; } + bool is_early_bound () const { return variant == EARLY_BOUND; } + bool is_late_bound () const { return variant == LATE_BOUND; } + bool is_named () const { return variant == NAMED; } + bool is_anonymous () const { return variant == ANONYMOUS; } + + void shift_down () { debruijn_index++; } + + WARN_UNUSED_RESULT std::string as_string () const + { + switch (variant) + { + case UNRESOLVED: + return "'unresolved"; + case STATIC: + return "'static"; + case EARLY_BOUND: + return "'early(" + std::to_string (index) + ")"; + case LATE_BOUND: + return "'late(" + std::to_string (debruijn_index) + ", " + + std::to_string (index) + ")"; + case NAMED: + return "'named(" + std::to_string (index) + ""; + case ANONYMOUS: + return "'_"; + case ERASED: + return "'erased"; + } + + rust_unreachable (); + } + +private: + explicit Region (Variant variant, uint32_t index = 0, + uint16_t debruijn_index = 0) + : index (index), debruijn_index (debruijn_index), variant (variant) + {} +}; + +} // namespace TyTy +} // namespace Rust + +#endif // RUST_TYTY_REGION_H