rust/library/std/src
bors 537aab7a2e Auto merge of #120131 - oli-obk:pattern_types_syntax, r=compiler-errors
Implement minimal, internal-only pattern types in the type system

rebase of https://github.com/rust-lang/rust/pull/107606

You can create pattern types with `std::pat::pattern_type!(ty is pat)`. The feature is incomplete and will panic on you if you use any pattern other than integral range patterns. The only way to create or deconstruct a pattern type is via `transmute`.

This PR's implementation differs from the MCP's text. Specifically

> This means you could implement different traits for different pattern types with the same base type. Thus, we just forbid implementing any traits for pattern types.

is violated in this PR. The reason is that we do need impls after all in order to make them usable as fields. constants of type `std::time::Nanoseconds` struct are used in patterns, so the type must be structural-eq, which it only can be if you derive several traits on it. It doesn't need to be structural-eq recursively, so we can just manually implement the relevant traits on the pattern type and use the pattern type as a private field.

Waiting on:

* [x] move all unrelated commits into their own PRs.
* [x] fix niche computation (see 2db07f94f44f078daffe5823680d07d4fded883f)
* [x] add lots more tests
* [x] T-types MCP https://github.com/rust-lang/types-team/issues/126 to finish
* [x] some commit cleanup
* [x] full self-review
* [x] remove 61bd325da19a918cc3e02bbbdce97281a389c648, it's not necessary anymore I think.
* [ ] ~~make sure we never accidentally leak pattern types to user code (add stability checks or feature gate checks and appopriate tests)~~ we don't even do this for the new float primitives
* [x] get approval that [the scope expansion to trait impls](https://rust-lang.zulipchat.com/#narrow/stream/326866-t-types.2Fnominated/topic/Pattern.20types.20types-team.23126/near/427670099) is ok

r? `@BoxyUwU`
2024-04-08 16:25:23 +00:00
..
backtrace remove redundant imports 2023-12-10 10:56:22 +08:00
collections Add "put" as a confusable for insert on hash map/set 2024-03-19 14:28:01 -04:00
env remove redundant imports 2023-12-10 10:56:22 +08:00
error core/any: remove Provider trait 2023-08-13 13:07:53 -06:00
f32 Add gamma and ln_gamma functions to f32 and f64 2023-07-31 07:41:50 -07:00
f64 Add gamma and ln_gamma functions to f32 and f64 2023-07-31 07:41:50 -07:00
ffi Rollup merge of #112136 - clarfonthey:ffi-c_str, r=cuviper 2024-03-10 10:58:14 +01:00
fs Support for visionOS 2024-03-18 20:45:45 -07:00
hash update version placeholders 2023-12-22 11:01:42 +01:00
io Auto merge of #122754 - Mark-Simulacrum:bootstrap-bump, r=albertlarsan68 2024-03-20 13:43:41 +00:00
net SeqCst->Relaxed in std::net::test. 2024-03-20 15:35:13 +01:00
num removed nonfunctioning benchmark 2024-01-11 11:30:12 -05:00
os Rollup merge of #121419 - agg23:xrOS-pr, r=davidtwco 2024-04-05 22:33:25 +02:00
panic review: fix nits and move panic safety tests to the correct place 2020-09-25 23:10:24 +02:00
path remove redundant imports 2023-12-10 10:56:22 +08:00
prelude Remove RustcEncodable/Decodable from 2024 prelude 2024-03-22 13:30:48 -07:00
process Rollup merge of #114379 - RalfJung:command-removed-env-vars, r=m-ou-se 2023-09-22 12:15:25 +02:00
sync Rollup merge of #114788 - tisonkun:get_mut_or_init, r=dtolnay 2024-04-06 13:00:04 +02:00
sys Rollup merge of #115984 - hermit-os:fuse, r=m-ou-se 2024-04-08 14:31:09 +02:00
sys_common sys_common::thread_local_key: make a note that this is not used on Windows 2024-04-07 12:23:47 +02:00
thread Auto merge of #123433 - GnomedDev:remove-threadname-alloc, r=joboet 2024-04-06 00:17:23 +00:00
time Rollup merge of #103056 - beetrees:timespec-bug-fix, r=thomcc 2023-05-05 18:40:32 +05:30
alloc.rs SeqCst->{Release,Acquire} for alloc error hook. 2024-03-19 15:27:11 +01:00
ascii.rs Add the basic ascii::Char type 2023-05-03 22:09:33 -07:00
backtrace.rs rename ptr::invalid -> ptr::without_provenance 2024-02-21 20:15:52 +01:00
env.rs Remove doc aliases to PATH 2024-02-29 14:28:47 -05:00
error.rs Clean dead codes 2023-11-26 09:25:07 +08:00
f32.rs Use the guaranteed precision of a couple of float functions in docs 2024-03-01 18:57:42 +01:00
f64.rs Use the guaranteed precision of a couple of float functions in docs 2024-03-01 18:57:42 +01:00
fs.rs use a consistent style for links 2024-04-02 21:41:16 +02:00
keyword_docs.rs Mention labelled blocks in break docs 2024-03-15 10:51:57 -07:00
lib.miri.rs add 'x.py miri', and make it work for 'library/{core,alloc,std}' 2024-04-03 20:27:20 +02:00
lib.rs Add pattern types to parser 2024-04-08 11:57:17 +00:00
macros.rs added column number to dbg!() 2023-12-12 18:12:23 +08:00
num.rs Switch NonZero alias direction. 2024-01-27 16:38:57 +01:00
panic.rs catch_panic: warn about panicking payload drop 2024-03-31 11:54:16 +02:00
panicking.rs std: move thread::current TLS variable out of thread_info 2024-03-31 11:28:24 +02:00
pat.rs Add pattern types to parser 2024-04-08 11:57:17 +00:00
path.rs Rollup merge of #120051 - riverbl:os-str-display, r=m-ou-se 2024-02-28 16:04:49 +01:00
process.rs Use generic NonZero everywhere in std. 2024-02-22 15:17:33 +01:00
rt.rs Remove rt::init allocation for thread name 2024-04-04 23:17:15 +01:00
time.rs Rust is a proper name: rust → Rust 2024-03-07 07:49:22 +01:00