Skip to content

Fix unicode tables - #5944

Closed
graydon wants to merge 291 commits into
rust-lang:masterfrom
graydon:fix-unicode-tables
Closed

Fix unicode tables#5944
graydon wants to merge 291 commits into
rust-lang:masterfrom
graydon:fix-unicode-tables

Conversation

@graydon

Copy link
Copy Markdown
Contributor

This switches the unicode tables in core to use static character-range tables and a binary search helper rather than open-coded switch statements. It adds about 50k of read only data to the libcore binary but cuts out a number of huge functions that were expensive to compile.

brsonand others added 30 commits April 3, 2013 22:54
It doesn't quite reflect reality
The sentence "Remember that `(float, float)` is a tuple of two floats"
sounds like you've already read a section on tuples, but that section
comes later. Changing it to "Assuming that ..." makes it more about
taking the writer's word that the syntax is how tuples are defined.
Because the PTHREAD_STACK_MIN of my system is larger than default size, I add the stack_sz check to prevent assertion failure.
Besides, libuv has to be modified because some flags are different from other targets. Instead of using hardcoded numbers, I change them to predefined symbols.
By the way, the toolchain I used is http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/mips-gnu-linux
libuv patch: http://people.cs.nctu.edu.tw/~jyyou/rust/mips-uv.patch
Below is the current test result.
* core test
stackwalk tests can cause segfault so I ignored them.
```
failures:
io::tests::test_read_be_int_n
io::tests::test_read_buffer_big_enough
io::tests::test_read_f32
io::tests::test_read_write_be
io::tests::test_read_write_f32
io::tests::test_read_write_le
io::tests::test_simple
io::tests::test_write_empty
rand::tests::rng_seeded_custom_seed2
unstable::uvll::test::test_uv_ll_struct_size_addrinfo
unstable::uvll::test::test_uv_ll_struct_size_uv_timer_t
result: FAILED. 596 passed; 11 failed; 49 ignored
```
* std test:
```
failures:
time::tests::run_tests
result: FAILED. 330 passed; 1 failed; 21 ignored
```
…e with a
bare function store (which is not in fact a kind of value) but rather
ty::TraitRef. Removes many uses of fail!() and other telltale signs of
type-semantic mismatch.
cc rust-lang#4183 (not a fix, but related)
borsand others added 25 commits April 15, 2013 09:57
This takes care of one of the last remnants of assumptions about enum layout. A type visitor is now passed a function to read a value's discriminant, then accesses fields by being passed a byte offset for each one. The latter may not be fully general, despite the constraints imposed on representations by borrowed pointers, but works for any representations currently planned and is relatively simple.
Closesrust-lang#5652.
…rphism
Closesrust-lang#5487, rust-lang#1913, and rust-lang#4568
I tracked this by adding all used unsafe blocks/functions to a set on the `tcx` passed around, and then when the lint pass comes around if an unsafe block/function isn't listed in that set, it's unused.
I also removed everything from the compiler that was unused, and up to stage2 is now compiling without any known unused unsafe blocks.
I chose `unused_unsafe` as the name of the lint attribute, but there may be a better name...
Hopefully this puts out the final fire
Hopefully this puts out the final fire
r? @graydon
Pulled out tests into their own modules inside the files they test,
as per the draft style guidelines.
Started a new module, path_util, for utility functions to do with
paths and directories.
Changed default_dest_dir to use a condition and return Path
instead of Option<Path>.
…=catamorphism
This adds examples for the methods in std::base64.
Each example is complete in the sense that you can copy-paste it into a file and compile it successfully without adding anything (imports, etc). The hardest part of figuring out how to use this was figuring out the right import statements to put at the top.
This patch is a sledge hammer that moves all tests into `#[cfg(test)] mod test { .. }`, and makes them private, there were several instances of `pub mod tests { #[test] pub fn ... } `.
(The reason for this is I was playing with using `syntax` to index code ([result so far](http://www.ug.it.usyd.edu.au/~hwil7821/rust-api/)) and it was getting some junk from the tests.)
The rustdoc commit is particularly brutal, so it's fine if that one isn't landed.
Can now use them like `x.transform(|i| i + 3).zip(y.filter(|i| i % 2)`.
This will help not to meet confusing errors.
In issue rust-lang#5873, the error was "expected constant expr for vector length: Can't cast str to int".
It was originally "expected constant expr for vector length: Non-constant path in constant expr"
This patch make the original error to be printed.
@graydongraydon closed this Apr 18, 2013
flip1995 pushed a commit to flip1995/rust that referenced this pull request Aug 28, 2020
Fix ICE in `repeat_once`
changelog: Fix ICE in [`repeat_once`]
Fixesrust-lang#5944
calebcartwright added a commit to calebcartwright/rust that referenced this pull request Oct 23, 2023
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
7562: add `generate_enum_match` assist r=matklad a=yoshuawuyts
This adds a `generate_enum_match` assist, which generates `is_` variants for enums (e.g. `Option::{is_none,is_some}` in std). This is my first attempt at contributing to Rust-Analyzer, so I'm not sure if I've gotten everything right. Thanks!
## Example
**Input**
```rust
pub(crate) enum Variant {
Undefined,
Minor, // cursor here
Major,
}
```
**Output**
```rust
pub(crate) enum Variant {
Undefined,
Minor,
Major,
}
impl Variant {
pub(crate) fn is_minor(&self) -> bool {
matches!(self, Self::Minor)
}
}
```
## Future Directions
I made this as a stepping stone for some of the more involved refactors (e.g. rust-lang#5944). I'm not sure yet how to create, use, and test `window.showQuickPick`-based asssists in RA. But once that's possible, it'd probably be nice to be able to generate match methods in bulk through the quickpick UI rather than one-by-one:
```
[x] Select enum members to generate methods for. (3 selected) [ OK ]
---------------------------------------------------------------------------
[x] Undefined
[x] Minor
[x] Major
```
Co-authored-by: Yoshua Wuyts <yoshuawuyts+github@gmail.com>
Co-authored-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
U007D pushed a commit to U007D/rust-mos that referenced this pull request Aug 21, 2026
10539: Add "generate delegate methods" assist r=Veykril a=yoshuawuyts
_Co-authored with `@rylev_.`
This patch adds a new assist: "generate delegate method" which creates a method that calls to a method defined on an inner field. Delegation is common when authoring newtypes, and having IDE support for this is the best way we can make this easier to author in Rust, bar adding language-level support for it. Thanks!
Closesrust-lang#5944.
## Example
__before__
```rust
struct Age(u8);
impl Age {
fn age(&self) -> u8 {
self.0
}
}
struct Person {
ag$0e: Age,
}
```
__after__
```rust
struct Age(u8);
impl Age {
fn age(&self) -> u8 {
self.0
}
}
struct Person {
age: Age,
}
impl Person {
$0fn age(&self) -> u8 {
self.age.age()
}
}
```
Co-authored-by: Ryan Levick <me@ryanlevick.com>
Co-authored-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

20 participants

@graydon@jwise@kud1ing@catamorphism@huonw@bors@brson@crabtw@metajack@Zhann@nikomatsakis@klutzy@gifnksm@thestinger@zofrex@pavpanchekha@jld@lucab@alexcrichton@auroranockert