mirror of
https://github.com/rust-lang/rust.git
synced 2025-10-02 18:27:37 +00:00
175 lines
7.0 KiB
Rust
175 lines
7.0 KiB
Rust
// Proc macros using `mixed_site` spans exhibit usual properties of `macro_rules` hygiene.
|
|
|
|
//@ aux-build: token-site-span.rs
|
|
//@ proc-macro: mixed-site-span.rs
|
|
|
|
extern crate mixed_site_span;
|
|
extern crate token_site_span;
|
|
|
|
use mixed_site_span::{proc_macro_rules, with_crate};
|
|
use token_site_span::{
|
|
invoke_with_crate, invoke_with_ident,
|
|
use_input_crate, use_mixed_crate, use_call_crate,
|
|
use_input_krate, use_mixed_krate, use_call_krate,
|
|
};
|
|
|
|
pub struct ItemUse;
|
|
|
|
fn main() {
|
|
'label_use: loop {
|
|
let local_use = 1;
|
|
proc_macro_rules!();
|
|
//~^ ERROR cannot find type `ItemUse` in crate `$crate`
|
|
//~| ERROR use of undeclared label `'label_use`
|
|
//~| ERROR cannot find value `local_use` in this scope
|
|
ItemDef; // OK
|
|
local_def; //~ ERROR cannot find value `local_def` in this scope
|
|
}
|
|
}
|
|
|
|
// Successful resolutions of `mixed_site_span::proc_macro_item`
|
|
const _: () = {
|
|
invoke_with_crate!{mixed proc_macro_item}
|
|
invoke_with_ident!{mixed proc_macro_item}
|
|
invoke_with_ident!{krate mixed proc_macro_item}
|
|
with_crate!{krate mixed proc_macro_item}
|
|
|
|
macro_rules! test {() => {
|
|
invoke_with_ident!{$crate mixed proc_macro_item}
|
|
with_crate!{$crate mixed proc_macro_item}
|
|
}}
|
|
test!();
|
|
};
|
|
|
|
// Failed resolutions of `proc_macro_item`
|
|
const _: () = {
|
|
// token_site_span::proc_macro_item
|
|
invoke_with_crate!{input proc_macro_item} //~ ERROR unresolved import `$crate`
|
|
invoke_with_ident!{input proc_macro_item} //~ ERROR unresolved import `$crate`
|
|
invoke_with_crate!{call proc_macro_item} //~ ERROR unresolved import `$crate`
|
|
invoke_with_ident!{call proc_macro_item} //~ ERROR unresolved import `$crate`
|
|
invoke_with_ident!{hello call proc_macro_item} //~ ERROR unresolved import `$crate`
|
|
|
|
// crate::proc_macro_item
|
|
invoke_with_ident!{krate input proc_macro_item} //~ ERROR unresolved import `$crate::proc_macro_item`
|
|
with_crate!{krate input proc_macro_item} //~ ERROR unresolved import `$crate::proc_macro_item`
|
|
with_crate!{krate call proc_macro_item} //~ ERROR unresolved import `$crate`
|
|
|
|
macro_rules! test {() => {
|
|
// crate::proc_macro_item
|
|
invoke_with_ident!{$crate input proc_macro_item} //~ ERROR unresolved import `$crate`
|
|
with_crate!{$crate input proc_macro_item} //~ ERROR unresolved import `$crate`
|
|
with_crate!{$crate call proc_macro_item} //~ ERROR unresolved import `$crate`
|
|
|
|
// token_site_span::proc_macro_item
|
|
invoke_with_ident!{$crate call proc_macro_item} //~ ERROR unresolved import `$crate`
|
|
}}
|
|
test!();
|
|
};
|
|
|
|
// Successful resolutions of `token_site_span::TokenItem`
|
|
const _: () = {
|
|
invoke_with_crate!{input TokenItem}
|
|
invoke_with_ident!{input TokenItem}
|
|
invoke_with_crate!{call TokenItem}
|
|
invoke_with_ident!{call TokenItem}
|
|
invoke_with_ident!{hello call TokenItem}
|
|
|
|
macro_rules! test {() => {
|
|
invoke_with_ident!{$crate call TokenItem}
|
|
}}
|
|
test!();
|
|
};
|
|
|
|
// Failed resolutions of `TokenItem`
|
|
const _: () = {
|
|
// crate::TokenItem
|
|
invoke_with_ident!{krate input TokenItem} //~ ERROR unresolved import `$crate::TokenItem`
|
|
with_crate!{krate input TokenItem} //~ ERROR unresolved import `$crate::TokenItem`
|
|
with_crate!{krate call TokenItem} //~ ERROR unresolved import `$crate`
|
|
|
|
// mixed_site_span::TokenItem
|
|
invoke_with_crate!{mixed TokenItem} //~ ERROR unresolved import `$crate`
|
|
invoke_with_ident!{mixed TokenItem} //~ ERROR unresolved import `$crate`
|
|
invoke_with_ident!{krate mixed TokenItem} //~ ERROR unresolved import `$crate`
|
|
with_crate!{krate mixed TokenItem} //~ ERROR unresolved import `$crate`
|
|
|
|
macro_rules! test {() => {
|
|
// crate::TokenItem
|
|
invoke_with_ident!{$crate input TokenItem} //~ ERROR unresolved import `$crate`
|
|
with_crate!{$crate input TokenItem} //~ ERROR unresolved import `$crate`
|
|
with_crate!{$crate call TokenItem} //~ ERROR unresolved import `$crate`
|
|
|
|
// mixed_site_span::TokenItem
|
|
invoke_with_ident!{$crate mixed TokenItem} //~ ERROR unresolved import `$crate`
|
|
with_crate!{$crate mixed TokenItem} //~ ERROR unresolved import `$crate`
|
|
|
|
}}
|
|
test!();
|
|
};
|
|
|
|
|
|
// Successful resolutions of `crate::ItemUse`
|
|
const _: () = {
|
|
invoke_with_ident!{krate input ItemUse}
|
|
with_crate!{krate input ItemUse}
|
|
with_crate!{krate call ItemUse}
|
|
|
|
macro_rules! test {() => {
|
|
invoke_with_ident!{$crate input ItemUse}
|
|
with_crate!{$crate input ItemUse}
|
|
with_crate!{$crate call ItemUse}
|
|
}}
|
|
test!();
|
|
};
|
|
|
|
// Failed resolutions of `ItemUse`
|
|
const _: () = {
|
|
// token_site_span::ItemUse
|
|
invoke_with_crate!{input ItemUse} //~ ERROR unresolved import `$crate`
|
|
invoke_with_ident!{input ItemUse} //~ ERROR unresolved import `$crate`
|
|
|
|
// mixed_site_span::ItemUse
|
|
invoke_with_crate!{mixed ItemUse} //~ ERROR unresolved import `$crate`
|
|
invoke_with_ident!{mixed ItemUse} //~ ERROR unresolved import `$crate`
|
|
invoke_with_ident!{krate mixed ItemUse} //~ ERROR unresolved import `$crate`
|
|
with_crate!{krate mixed ItemUse} //~ ERROR unresolved import `$crate`
|
|
|
|
invoke_with_crate!{call ItemUse} //~ ERROR unresolved import `$crate`
|
|
invoke_with_ident!{call ItemUse} //~ ERROR unresolved import `$crate`
|
|
invoke_with_ident!{hello call ItemUse} //~ ERROR unresolved import `$crate`
|
|
|
|
macro_rules! test {() => {
|
|
invoke_with_ident!{$crate mixed ItemUse} //~ ERROR unresolved import `$crate`
|
|
with_crate!{$crate mixed ItemUse} //~ ERROR unresolved import `$crate`
|
|
|
|
invoke_with_ident!{$crate call ItemUse} //~ ERROR unresolved import `$crate`
|
|
}}
|
|
test!();
|
|
};
|
|
|
|
|
|
// Only mixed should see mixed_site_span::proc_macro_item
|
|
use_input_crate!{proc_macro_item} //~ ERROR unresolved import `$crate`
|
|
use_input_krate!{proc_macro_item} //~ ERROR unresolved import `$crate`
|
|
use_mixed_crate!{proc_macro_item}
|
|
use_mixed_krate!{proc_macro_item}
|
|
use_call_crate!{proc_macro_item} //~ ERROR unresolved import `$crate`
|
|
use_call_krate!{proc_macro_item} //~ ERROR unresolved import `$crate`
|
|
|
|
// Only mixed should fail to see token_site_span::TokenItem
|
|
use_input_crate!{TokenItem}
|
|
use_input_krate!{TokenItem}
|
|
use_mixed_crate!{TokenItem} //~ ERROR unresolved import `$crate`
|
|
use_mixed_krate!{TokenItem} //~ ERROR unresolved import `$crate`
|
|
use_call_crate!{TokenItem}
|
|
use_call_krate!{TokenItem}
|
|
|
|
// Everything should fail to see crate::ItemUse
|
|
use_input_crate!{ItemUse} //~ ERROR unresolved import `$crate`
|
|
use_input_krate!{ItemUse} //~ ERROR unresolved import `$crate`
|
|
use_mixed_crate!{ItemUse} //~ ERROR unresolved import `$crate`
|
|
use_mixed_krate!{ItemUse} //~ ERROR unresolved import `$crate`
|
|
use_call_crate!{ItemUse} //~ ERROR unresolved import `$crate`
|
|
use_call_krate!{ItemUse} //~ ERROR unresolved import `$crate`
|