From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by sourceware.org (Postfix) with ESMTPS id BC1683858427 for ; Wed, 7 Feb 2024 12:44:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BC1683858427 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 BC1683858427 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::334 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309851; cv=none; b=TeEXACcd9ptKRI1DXPXgby2/Koi+vAplliMwdOjjT+Zj0t/XY4g0bWnFgpqZlpyGF3V2IxjQ4qYvjI5OZzSoiPKjqxpdrpaG9wpVaddOMS3b8OlsQWpd3aKzdhTBMvyOSVQBvCyg/z2NdyEoEk4Khavm1UW0sqzAn7hL/iUXIbM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707309851; c=relaxed/simple; bh=ESkRPyZkvzYIKPrm4s6pWomGdK9j5ELdxm4b9qdDz2E=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=jmcWJtugtREkp9kbwx9x2JjM5dwwGFM41pAZ/AWdYovMYX3OtilC3aQoaTEfLZFl+zbMWbxStz0CuICtG3z//Djn0eL/h/cYmCgfvk3Z6ePo/p/YOX88PNUashDqyKvrM7GEQx1otzMP3Cs11d2ZdL+oy3y2/M5SuH85kzopfwM= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-40fff96d5d7so4835615e9.2 for ; Wed, 07 Feb 2024 04:44:03 -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=ZXFrms5L/n+PLjnmn4in1aQ0BzfL35ndbs/TwieK0wfpOmrnbg7S+ll5DRLSOSWV+/ tuuq2VSx3CfijReBUeXA3MT/ZtziJrIn0oVlH274BoDnUa21lYogXL2FpeXRHAWymGYk ZUCU+mWKVOgd0gDTk3P2PMT4WvjkHAvhxqB7aXC8NkrEnOGaCViG5OAKC3E6mr5cgmna x4YkfSUyOiUHq06gmiZm7cZoEQY72QH5r7EhoGnzr4A91TXhdxEjFm4uI9Ci2UE5dx6f hs98HOLwRKPDu9rlrVMjILp851pbOpm27WKZn2UUbE+HEBnp2ZZDc1KQAnonxI/kSjJx XPmg== X-Gm-Message-State: AOJu0YxqEvzXTTBjU4G31tHPSWjHdojl4EQ3vKicM+tpZUgreqbZzF9m wYByY5Mev+ZG7Ee7x0T9rCL4LpTgr0vTiw6o1xl7WnmV6DgfCnn48riElQ+1bQ== 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.3 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=ham 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