From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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-Google-Smtp-Source: AGHT+IExFRsMT0WwAARFeVQEzNJOzRkYPvmIhZZUmQLYevlbduMkxhLUAEggdB67bK04ERa/RngOBQ== 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> Reply-To: arthur.cohen@embecosm.com MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 List-Id: 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 -- 2.42.1