Skip to content
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 unstable Literal::subspan(). #56120

Merged
merged 1 commit into from
Nov 23, 2018
Merged

Conversation

SergioBenitez
Copy link
Contributor

Take 2 of #55971. Still ~wrong, but now with a comment! (and less of a surface) Unblocks #49219.

r? @alexcrichton

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Nov 21, 2018
@alexcrichton
Copy link
Member

@bors: r+

This is unstable, helps unblock other PRs, is within the ballpark of what we'd like to stabilize long-term, and looks solid enough for immediate use. Sounds good to me!

@bors
Copy link
Contributor

bors commented Nov 21, 2018

📌 Commit 09e7051 has been approved by alexcrichton

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Nov 21, 2018
// `self.span()` actually maps to, so this method can currently only be
// called blindly. For example, `to_string()` for the character 'c' returns
// "'\u{63}'"; there is no way for the user to know whether the source text
// was 'c' or whether it was '\u{63}'.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this is correct. Literal::to_string should show the exact source contents, if the literal isn't synthetic.

Copy link
Contributor Author

@SergioBenitez SergioBenitez Nov 22, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is correct. Try:

extern crate proc_macro;

use crate::proc_macro::Literal;
use crate::proc_macro::TokenStream;

#[proc_macro]
pub fn go(_: TokenStream) -> TokenStream {
    let literal = Literal::string("hel\u{6c}o");
    println!("literal: {}", literal.to_string());

    let literal = Literal::character('c');
    println!("literal: {}", literal.to_string());

    let literal = Literal::character(100 as char);
    println!("literal: {}", literal.to_string());

    let literal = Literal::byte_string(b"hello");
    println!("literal: {}", literal.to_string());

    let literal = Literal::byte_string(b"he\x42");
    println!("literal: {}", literal.to_string());

    let literal = Literal::byte_string(&['h' as u8, 'e' as u8, ]);
    println!("literal: {}", literal.to_string());

    let literal = Literal::f32_unsuffixed(1.0);
    println!("literal: {}", literal.to_string());

    let literal = Literal::f32_unsuffixed(1.134100000022);
    println!("literal: {}", literal.to_string());

    TokenStream::new()
}

Edit: This may be different if the Literal comes from a TokenStream parsed from source. Nevertheless, this method needs to be correct regardless of where the Literal comes from.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If it's synthetic then the span doesn't matter, I was talking about Literals from the source. But also, we shouldn't be using escape_unicode like that.

kennytm added a commit to kennytm/rust that referenced this pull request Nov 23, 2018
Add unstable Literal::subspan().

Take 2 of rust-lang#55971. Still ~wrong, but now with a comment! (and less of a surface) Unblocks rust-lang#49219.

r? @alexcrichton
bors added a commit that referenced this pull request Nov 23, 2018
Rollup of 14 pull requests

Successful merges:

 - #55767 (Disable some pretty-printers when gdb is rust-enabled)
 - #55838 (Fix #[cfg] for step impl on ranges)
 - #55869 (Add std::iter::unfold)
 - #55945 (Ensure that the argument to `static_assert` is a `bool`)
 - #56022 (When popping in CTFE, perform validation before jumping to next statement to have a better span for the error)
 - #56048 (Add rustc_codegen_ssa to sysroot)
 - #56091 (Fix json output in the self-profiler)
 - #56097 (Fix invalid bitcast taking bool out of a union represented as a scalar)
 - #56116 (ci: Download clang/lldb from tarballs)
 - #56120 (Add unstable Literal::subspan().)
 - #56154 (Pass additional linker flags when targeting Fuchsia)
 - #56162 (std::str Adapt documentation to reality)
 - #56163 ([master] Backport 1.30.1 release notes)
 - #56168 (Fix the tracking issue for hash_raw_entry)

Failed merges:

r? @ghost
@bors bors merged commit 09e7051 into rust-lang:master Nov 23, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants