-
Notifications
You must be signed in to change notification settings - Fork 12.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add intmax #17896
add intmax #17896
Conversation
The sad thing about |
@thestinger Could you elaborate on that? Do you perhaps have For everyone's reference: POSIX on |
@nodakai: |
@@ -1426,6 +1435,9 @@ pub mod types { | |||
pub type uintptr_t = u32; | |||
#[cfg(target_arch = "x86_64")] | |||
pub type uintptr_t = u64; | |||
|
|||
pub type intmax_t = i64; | |||
pub type uintmax_t = i64; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/i/u/
@thestinger I mean, I was curious what you had in your mind as an example of "integer types larger than ( Though I don't think Wow, OpenSSL internally depends on |
I think we should have it all there unconditionally and it should be generated from the C headers without any additional organization. However, the current way of doing things is that libc is only for stuff that's generally correct / useful / portable and not exposed in some other way by Rust. |
It would be helpful if someone with access to the bots could check if intmax_ is i64 everywhere. |
@thestinger Do you have any objections to this? I am OK with it in general but I don't have a real opinion. Just want to take action on this PR. |
@pcwalton: I don't think we should pick and choose the parts of libc that we expose, but we do approach it that way right now and I don't think |
If it was up to me, we would use automatic binding generation or at least pretend we were using it. That would mean exposing everything C does without organization into namespaces and not making our own decisions about which functionality is useful / portable. So under that model, this would be acceptable. |
While not explicitly spelled out, the purpose of |
Closes #17075 I don't know if this is correct. The easiest way to find out is to run the following program on all targets but I can't do it myself. ```c #include <stdint.h> #include <stdio.h> int main(void) { if (sizeof(intmax_t) != 8) { puts("ERROR"); return 1; } } ```
…kril internal: Properly check the edition for edition dependent syntax kinds This puts the current edition in a bunch of places, most of which I annoted with FIXMEs asside from the ones in ide-assists because I couldnt bother with those
This PR touches a lot of parts. But the main changes are changing `hir_expand::Name` to be raw edition-dependently and only when necessary (unrelated to how the user originally wrote the identifier), and changing `is_keyword()` and `is_raw_identifier()` to be edition-aware (this was done in rust-lang#17896, but the FIXMEs were fixed here). It is possible that I missed some cases, but most IDE parts should properly escape (or not escape) identifiers now. The rules of thumb are: - If we show the identifier to the user, its rawness should be determined by the edition of the edited crate. This is nice for IDE features, but really important for changes we insert to the source code. - For tests, I chose `Edition::CURRENT` (so we only have to (maybe) update tests when an edition becomes stable, to avoid churn). - For debugging tools (helper methods and logs), I used `Edition::LATEST`.
…-keyword, r=Veykril fix: Properly account for editions in names This PR touches a lot of parts. But the main changes are changing `hir_expand::Name` to be raw edition-dependently and only when necessary (unrelated to how the user originally wrote the identifier), and changing `is_keyword()` and `is_raw_identifier()` to be edition-aware (this was done in rust-lang#17896, but the FIXMEs were fixed here). It is possible that I missed some cases, but most IDE parts should properly escape (or not escape) identifiers now. The rules of thumb are: - If we show the identifier to the user, its rawness should be determined by the edition of the edited crate. This is nice for IDE features, but really important for changes we insert to the source code. - For tests, I chose `Edition::CURRENT` (so we only have to (maybe) update tests when an edition becomes stable, to avoid churn). - For debugging tools (helper methods and logs), I used `Edition::LATEST`. Reviewing notes: This is a really big PR but most of it is mechanical translation. I changed `Name` displayers to require an edition, and followed the compiler errors. Most methods just propagate the edition requirement. The interesting cases are mostly in `ide-assists`, as sometimes the correct crate to fetch the edition from requires awareness (there may be two). `ide-completions` and `ide-diagnostics` were solved pretty easily by introducing an edition field to their context. `ide` contains many features, for most of them it was propagated to the top level function and there the edition was fetched based on the file. I also fixed all FIXMEs from rust-lang#17896. Some required introducing an edition parameter (usually not for many methods after the changes to `Name`), some were changed to a new method `is_any_identifier()` because they really want any possible keyword. Fixes rust-lang#17895. Fixes rust-lang#17774.
Closes #17075
I don't know if this is correct. The easiest way to find out is to run the following program on all targets but I can't do it myself.