about summary refs log tree commit diff
path: root/compiler/rustc_serialize
AgeCommit message (Collapse)AuthorLines
2023-11-22Call FileEncoder::finish in rmeta encodingBen Kimock-7/+36
2023-11-15Bump cfg(bootstrap)sMark Rousskov-3/+3
2023-10-30Clean up `rustc_*/Cargo.toml`.Nicholas Nethercote-0/+4
- Sort dependencies and features sections. - Add `tidy` markers to the sorted sections so they stay sorted. - Remove empty `[lib`] sections. - Remove "See more keys..." comments. Excluded files: - rustc_codegen_{cranelift,gcc}, because they're external. - rustc_lexer, because it has external use. - stable_mir, because it has external use.
2023-10-08rustdoc: remove rust logo from non-Rust cratesMichael Howell-0/+3
2023-10-06Use `collect` to decode `Vec`.Nicholas Nethercote-23/+10
It's hyper-optimized, we don't need our own unsafe code here. This requires getting rid of all the `Allocator` stuff, which isn't needed anyway.
2023-10-06Streamline some `Encodable` impls.Nicholas Nethercote-6/+3
Making them consistent with similar impls.
2023-10-06Use `collect` for decoding more collection types.Nicholas Nethercote-40/+6
2023-10-06rustc_serialize: merge `collection_impls.rs` into `serialize.rs`.Nicholas Nethercote-264/+258
`serialize.rs` has the `Encodable`/`Decodable` impls for lots of basic types, including `Vec`. `collection_impls` has it for lots of collection types. The distinction isn't really meaningful, and it's simpler to have them all in a single file.
2023-10-06Remove unused serialization support for `LinkedList`.Nicholas Nethercote-17/+1
2023-10-06rustc_serialize: Remove unneeded feature decls.Nicholas Nethercote-11/+5
I.e. `maybe_uninit_slice` and `new_uninit`. Also sort the remaining features and remove an ugly, low-value comment.
2023-09-22Open the FileEncoder file for reading and writingBen Kimock-1/+6
2023-09-20PR feedbackBen Kimock-32/+54
2023-09-10Reimplement FileEncoder with a small-write optimizationBen Kimock-217/+90
2023-09-04Use a specialized varint + bitpacking scheme for DepGraph encodingBen Kimock-1/+1
2023-07-03Upgrade to indexmap 2.0.0Josh Stone-1/+1
The new version was already added to the tree as an indirect dependency in #113046, but now our direct dependents are using it too.
2023-05-15Fix the `FileEncoder` buffer size.Nicholas Nethercote-33/+11
It allows a variable size, but in practice we always use the default of 8192 bytes. This commit fixes it to that size, which makes things slightly faster because the size can be hard-wired in generated code. The commit also: - Rearranges some buffer capacity checks so they're all in the same form (`x > BUFSIZE`). - Removes some buffer capacity assertions and comments about them. With an 8192 byte buffer, we're not in any danger of overflowing a `usize`.
2023-05-04Factor out more repeated code in `{write,read}_leb128!`.Nicholas Nethercote-95/+44
Make them generate the entire function, not just the function body.
2023-05-04Rename `file_encoder_write_leb128!`.Nicholas Nethercote-9/+9
`MemEncoder` was recently removed, leaving `FileEncoder` as the only encoder. So this prefix is no longer needed, and `write_leb128!` matches the existing `read_leb128!`.
2023-05-04Reorder some `MemDecoder` methods.Nicholas Nethercote-12/+12
So they match the order in the `Decoder` trait.
2023-05-04Remove a low value comment.Nicholas Nethercote-4/+0
2023-05-02Remove `MemEncoder`.Nicholas Nethercote-133/+16
It's only used in tests. Which is bad, because it means that `FileEncoder` is used in the compiler but isn't used in tests! `tests/opaque.rs` now tests encoding/decoding round-trips via file. Because this is slower than memory, this commit also adjusts the `u16`/`i16` tests so they are more like the `u32`/`i32` tests, i.e. they don't test every possible value.
2023-05-02Move some `Encodable`/`Decodable` tests.Nicholas Nethercote-0/+39
Round-trip encoding/decoding of many types is tested in `compiler/rustc_serialize/tests/opaque.rs`. There is also a small amount of encoding/decoding testing in three files in `tests/ui-fulldeps`. There is no obvious reason why these three files are necessary. They were originally added in 2014. Maybe it wasn't possible for a proc macro to run in a unit test back then? This commit just moves the testing from those three files into the unit test.
2023-04-28Remove `MemDecoder::read_byte`.Nicholas Nethercote-14/+9
It's just a synonym for `read_u8`.
2023-04-28Add some provided methods to `Encoder`/`Decoder`.Nicholas Nethercote-84/+56
The methods for `i8`, `bool`, `char`, `str` are the same for all impls, because they layered on top of other methods.
2023-04-28Remove a low-value assertion.Nicholas Nethercote-7/+2
Checking that `read_raw_bytes(len)` changes the position by `len` is a reasonable thing for a test, but isn't much use in just one of the zillion `Decodable` impls.
2023-04-28Add a comment explaining the lack of `Decoder::read_enum_variant`.Nicholas Nethercote-0/+5
Because I was wondering about it, and this may save a future person from also wondering.
2023-04-28Remove `MemDecoder::read_raw_bytes_inherent`.Nicholas Nethercote-19/+11
It's unnecessary. Note that `MemDecoder::read_raw_bytes` how has a `&'a [u8]` return type, the same as what `read_raw_bytes_inherent` had.
2023-04-23Rewrite MemDecoder around pointers not a sliceBen Kimock-50/+137
2023-04-06Remove f32 & f64 from MemDecoder/MemEncoderScott McMurray-70/+14
2023-03-25Update indexmap and rayon cratesJohn Kåre Alsaker-1/+1
2023-02-25Emit the enum discriminant separately for the Encodable macroJohn Kåre Alsaker-12/+0
2023-02-21Auto merge of #104754 - nnethercote:more-ThinVec-in-ast, r=the8472bors-1/+1
Use `ThinVec` more in the AST r? `@ghost`
2023-02-21Upgrade `thin-vec` from 0.2.9 to 0.2.12.Nicholas Nethercote-1/+1
Because 0.2.10 added supports for `ThinVec::splice`, and 0.2.12 is the latest release.
2023-02-20Remove old FIXME that no longer appliesDeadbeef-5/+0
it looks like Encodable was fallible at some point, but that was changed which means that this FIXME is no longer applicable
2022-12-10compiler: remove unnecessary imports and qualified pathsKaDiWa-1/+0
2022-11-29rename `{max=>largest}_max_leb128_len`Maybe Waffle-6/+6
2022-11-29Replace a macro with a functionMaybe Waffle-16/+13
2022-11-27Prefer doc comments over `//`-comments in compilerMaybe Waffle-14/+14
2022-11-02rustdoc: use ThinVec for cleaned genericsMichael Howell-1/+1
2022-09-26remove cfg(bootstrap)Pietro Albini-1/+0
2022-09-20Rollup merge of #101014 - ↵Michael Howell-1/+3
isikkema:fix-zmeta-stats-file-encoder-no-read-perms, r=isikkema Fix -Zmeta-stats ICE by giving `FileEncoder` file read permissions Fixes #101001 As far as I can tell, #101001 is caused because the file is being created with write-only permissions here: https://github.com/rust-lang/rust/blob/master/compiler/rustc_serialize/src/opaque.rs#L196 but it is trying to be read here: https://github.com/rust-lang/rust/blob/master/compiler/rustc_metadata/src/rmeta/encoder.rs#L780 This PR attempts to fix this by creating/opening the file with the same permissions as `File::create()` with the addition of read.
2022-09-20add comment explaining read permissionsSikkema, Isaac-0/+2
2022-09-15Only enable the let_else feature on bootstrapest31-1/+1
On later stages, the feature is already stable. Result of running: rg -l "feature.let_else" compiler/ src/librustdoc/ library/ | xargs sed -s -i "s#\\[feature.let_else#\\[cfg_attr\\(bootstrap, feature\\(let_else\\)#"
2022-08-29Replace `rustc_data_structures::thin_vec::ThinVec` with `thin_vec::ThinVec`.Nicholas Nethercote-4/+17
`rustc_data_structures::thin_vec::ThinVec` looks like this: ``` pub struct ThinVec<T>(Option<Box<Vec<T>>>); ``` It's just a zero word if the vector is empty, but requires two allocations if it is non-empty. So it's only usable in cases where the vector is empty most of the time. This commit removes it in favour of `thin_vec::ThinVec`, which is also word-sized, but stores the length and capacity in the same allocation as the elements. It's good in a wider variety of situation, e.g. in enum variants where the vector is usually/always non-empty. The commit also: - Sorts some `Cargo.toml` dependency lists, to make additions easier. - Sorts some `use` item lists, to make additions easier. - Changes `clean_trait_ref_with_bindings` to take a `ThinVec<TypeBinding>` rather than a `&[TypeBinding]`, because this avoid some unnecessary allocations.
2022-08-25use `File::options()` instead of `File::create()`Sikkema, Isaac-1/+1
2022-08-25Adding support for rustc_serialize encode and decode for Box and Vec that ↵Ellen Arteca-11/+16
use a custom allocator
2022-08-21Rollup merge of #100822 - WaffleLapkin:no_offset_question_mark, r=scottmcmMatthias Krüger-1/+1
Replace most uses of `pointer::offset` with `add` and `sub` As PR title says, it replaces `pointer::offset` in compiler and standard library with `pointer::add` and `pointer::sub`. This generally makes code cleaner, easier to grasp and removes (or, well, hides) integer casts. This is generally trivially correct, `.offset(-constant)` is just `.sub(constant)`, `.offset(usized as isize)` is just `.add(usized)`, etc. However in some cases we need to be careful with signs of things. r? ````@scottmcm```` _split off from #100746_
2022-08-21Replace most uses of `pointer::offset` with `add` and `sub`Maybe Waffle-1/+1
2022-08-18Add diagnostic translation lints to crates that don't emit them5225225-0/+2
2022-07-17Upgrade indexmap and thorin-dwp to use hashbrown 0.12Josh Stone-1/+1
This removes the last dependencies on hashbrown 0.11.