Hygiene serialization implementation

This commit is contained in:
Aaron Hill 2020-03-17 11:45:02 -04:00
parent 6c8927b0cf
commit 0caebfabe6
No known key found for this signature in database
GPG key ID: B4087E510E98B164
32 changed files with 929 additions and 284 deletions

View file

@ -0,0 +1,5 @@
#![feature(decl_macro)]
macro x() { struct MyStruct; }
x!();
x!();

View file

@ -0,0 +1,8 @@
// check-pass
// aux-build:needs_hygiene.rs
extern crate needs_hygiene;
use needs_hygiene::*;
fn main() {}

View file

@ -0,0 +1,10 @@
// run-fail
// check-run-results
// exec-env:RUST_BACKTRACE=0
//
// Regression test for issue #70963
// The captured stderr from this test reports a location
// inside `VecDeque::with_capacity`, instead of `<::core::macros::panic macros>`
fn main() {
std::collections::VecDeque::<String>::with_capacity(!0);
}

View file

@ -0,0 +1,2 @@
thread 'main' panicked at 'capacity overflow', $SRC_DIR/liballoc/collections/vec_deque.rs:LL:COL
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

View file

@ -2,79 +2,79 @@ PRINT-BANG INPUT (DISPLAY): struct M($crate :: S) ;
PRINT-BANG INPUT (DEBUG): TokenStream [
Ident {
ident: "struct",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Ident {
ident: "M",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Group {
delimiter: Parenthesis,
stream: TokenStream [
Ident {
ident: "$crate",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Joint,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Alone,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Ident {
ident: "S",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
],
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ';',
spacing: Alone,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
]
PRINT-ATTR INPUT (DISPLAY): struct A($crate :: S) ;
PRINT-ATTR INPUT (DEBUG): TokenStream [
Ident {
ident: "struct",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Ident {
ident: "A",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Group {
delimiter: Parenthesis,
stream: TokenStream [
Ident {
ident: "$crate",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Joint,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Alone,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Ident {
ident: "S",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
],
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ';',
spacing: Alone,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
]

View file

@ -2,109 +2,109 @@ PRINT-ATTR INPUT (DISPLAY): struct A(identity ! ($crate :: S)) ;
PRINT-ATTR INPUT (DEBUG): TokenStream [
Ident {
ident: "struct",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Ident {
ident: "A",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Group {
delimiter: Parenthesis,
stream: TokenStream [
Ident {
ident: "identity",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: '!',
spacing: Alone,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Group {
delimiter: Parenthesis,
stream: TokenStream [
Ident {
ident: "$crate",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Joint,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Alone,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Ident {
ident: "S",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
],
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
],
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ';',
spacing: Alone,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
]
PRINT-ATTR INPUT (DISPLAY): struct B(identity ! ($crate :: S)) ;
PRINT-ATTR INPUT (DEBUG): TokenStream [
Ident {
ident: "struct",
span: #10 bytes(LO..HI),
span: #13 bytes(LO..HI),
},
Ident {
ident: "B",
span: #10 bytes(LO..HI),
span: #13 bytes(LO..HI),
},
Group {
delimiter: Parenthesis,
stream: TokenStream [
Ident {
ident: "identity",
span: #10 bytes(LO..HI),
span: #13 bytes(LO..HI),
},
Punct {
ch: '!',
spacing: Alone,
span: #10 bytes(LO..HI),
span: #13 bytes(LO..HI),
},
Group {
delimiter: Parenthesis,
stream: TokenStream [
Ident {
ident: "$crate",
span: #10 bytes(LO..HI),
span: #13 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Joint,
span: #10 bytes(LO..HI),
span: #13 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Alone,
span: #10 bytes(LO..HI),
span: #13 bytes(LO..HI),
},
Ident {
ident: "S",
span: #10 bytes(LO..HI),
span: #13 bytes(LO..HI),
},
],
span: #10 bytes(LO..HI),
span: #13 bytes(LO..HI),
},
],
span: #10 bytes(LO..HI),
span: #13 bytes(LO..HI),
},
Punct {
ch: ';',
spacing: Alone,
span: #10 bytes(LO..HI),
span: #13 bytes(LO..HI),
},
]

View file

@ -2,239 +2,239 @@ PRINT-BANG INPUT (DISPLAY): struct M($crate :: S) ;
PRINT-BANG INPUT (DEBUG): TokenStream [
Ident {
ident: "struct",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Ident {
ident: "M",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Group {
delimiter: Parenthesis,
stream: TokenStream [
Ident {
ident: "$crate",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Joint,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Alone,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Ident {
ident: "S",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
],
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ';',
spacing: Alone,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
]
PRINT-ATTR INPUT (DISPLAY): struct A($crate :: S) ;
PRINT-ATTR INPUT (DEBUG): TokenStream [
Ident {
ident: "struct",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Ident {
ident: "A",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Group {
delimiter: Parenthesis,
stream: TokenStream [
Ident {
ident: "$crate",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Joint,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Alone,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Ident {
ident: "S",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
],
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ';',
spacing: Alone,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
]
PRINT-DERIVE INPUT (DISPLAY): struct D($crate :: S) ;
PRINT-DERIVE INPUT (DEBUG): TokenStream [
Ident {
ident: "struct",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Ident {
ident: "D",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Group {
delimiter: Parenthesis,
stream: TokenStream [
Ident {
ident: "$crate",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Joint,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Alone,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Ident {
ident: "S",
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
],
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
Punct {
ch: ';',
spacing: Alone,
span: #3 bytes(LO..HI),
span: #6 bytes(LO..HI),
},
]
PRINT-BANG INPUT (DISPLAY): struct M($crate :: S) ;
PRINT-BANG INPUT (DEBUG): TokenStream [
Ident {
ident: "struct",
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Ident {
ident: "M",
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Group {
delimiter: Parenthesis,
stream: TokenStream [
Ident {
ident: "$crate",
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Joint,
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Alone,
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Ident {
ident: "S",
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
],
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Punct {
ch: ';',
spacing: Alone,
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
]
PRINT-ATTR INPUT (DISPLAY): struct A($crate :: S) ;
PRINT-ATTR INPUT (DEBUG): TokenStream [
Ident {
ident: "struct",
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Ident {
ident: "A",
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Group {
delimiter: Parenthesis,
stream: TokenStream [
Ident {
ident: "$crate",
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Joint,
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Alone,
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Ident {
ident: "S",
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
],
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Punct {
ch: ';',
spacing: Alone,
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
]
PRINT-DERIVE INPUT (DISPLAY): struct D($crate :: S) ;
PRINT-DERIVE INPUT (DEBUG): TokenStream [
Ident {
ident: "struct",
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Ident {
ident: "D",
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Group {
delimiter: Parenthesis,
stream: TokenStream [
Ident {
ident: "$crate",
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Joint,
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Punct {
ch: ':',
spacing: Alone,
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Ident {
ident: "S",
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
],
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
Punct {
ch: ';',
spacing: Alone,
span: #13 bytes(LO..HI),
span: #16 bytes(LO..HI),
},
]

View file

@ -8,7 +8,7 @@ PRINT-BANG INPUT (DEBUG): TokenStream [
span: #0 bytes(402..403),
},
],
span: #3 bytes(269..271),
span: #6 bytes(269..271),
},
]
PRINT-ATTR INPUT (DISPLAY): const A : u8 = 0 ;

View file

@ -1,4 +1,4 @@
Def site: $DIR/auxiliary/make-macro.rs:7:9: 10:10 (#3)
Def site: $DIR/auxiliary/make-macro.rs:7:9: 10:10 (#6)
#![feature /* 0#0 */(prelude_import)]
#[prelude_import /* 0#1 */]
use std /* 0#1 */::prelude /* 0#1 */::v1 /* 0#1 */::*;
@ -21,12 +21,19 @@ Expansions:
0: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: Root
1: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: AstPass(StdImports)
2: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: Macro(Bang, "meta_macro::print_def_site")
3: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: Macro(Bang, "cfg_if")
4: parent: ExpnId(3), call_site_ctxt: #4, def_site_ctxt: #0, kind: Macro(Bang, "$crate::cfg_if")
5: parent: ExpnId(4), call_site_ctxt: #5, def_site_ctxt: #0, kind: Macro(Bang, "$crate::cfg_if")
6: parent: ExpnId(5), call_site_ctxt: #0, def_site_ctxt: #0, kind: Macro(Bang, "features")
SyntaxContexts:
#0: parent: #0, outer_mark: (ExpnId(0), Opaque)
#1: parent: #0, outer_mark: (ExpnId(1), Opaque)
#2: parent: #0, outer_mark: (ExpnId(1), Transparent)
#3: parent: #0, outer_mark: (ExpnId(2), Opaque)
#4: parent: #0, outer_mark: (ExpnId(2), Transparent)
#5: parent: #0, outer_mark: (ExpnId(2), SemiTransparent)
#3: parent: #0, outer_mark: (ExpnId(6), SemiTransparent)
#4: parent: #0, outer_mark: (ExpnId(3), SemiTransparent)
#5: parent: #0, outer_mark: (ExpnId(4), SemiTransparent)
#6: parent: #0, outer_mark: (ExpnId(2), Opaque)
#7: parent: #0, outer_mark: (ExpnId(2), Transparent)
#8: parent: #0, outer_mark: (ExpnId(2), SemiTransparent)
*/

View file

@ -1 +1 @@
Def site: $DIR/auxiliary/make-macro.rs:7:9: 10:10 (#3)
Def site: $DIR/auxiliary/make-macro.rs:7:9: 10:10 (#6)

View file

@ -5,10 +5,10 @@ PRINT-BANG INPUT (DEBUG): TokenStream [
stream: TokenStream [
Ident {
ident: "FirstStruct",
span: $DIR/auxiliary/nested-macro-rules.rs:15:14: 15:25 (#3),
span: $DIR/auxiliary/nested-macro-rules.rs:15:14: 15:25 (#8),
},
],
span: $DIR/auxiliary/nested-macro-rules.rs:9:27: 9:32 (#3),
span: $DIR/auxiliary/nested-macro-rules.rs:9:27: 9:32 (#7),
},
]
PRINT-BANG INPUT (DISPLAY): SecondStruct
@ -18,9 +18,9 @@ PRINT-BANG INPUT (DEBUG): TokenStream [
stream: TokenStream [
Ident {
ident: "SecondStruct",
span: $DIR/nested-macro-rules.rs:18:38: 18:50 (#9),
span: $DIR/nested-macro-rules.rs:18:38: 18:50 (#14),
},
],
span: $DIR/auxiliary/nested-macro-rules.rs:9:27: 9:32 (#8),
span: $DIR/auxiliary/nested-macro-rules.rs:9:27: 9:32 (#13),
},
]

View file

@ -4,7 +4,7 @@ PRINT-BANG INPUT (DEBUG): TokenStream [
kind: Str,
symbol: "hi",
suffix: None,
span: $DIR/nodelim-groups.rs:13:42: 13:46 (#3),
span: $DIR/nodelim-groups.rs:13:42: 13:46 (#6),
},
Group {
delimiter: None,
@ -44,7 +44,7 @@ PRINT-BANG INPUT (DEBUG): TokenStream [
span: $DIR/nodelim-groups.rs:17:27: 17:28 (#0),
},
],
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#3),
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#6),
},
Group {
delimiter: Parenthesis,
@ -53,21 +53,21 @@ PRINT-BANG INPUT (DEBUG): TokenStream [
kind: Integer,
symbol: "1",
suffix: None,
span: $DIR/nodelim-groups.rs:13:53: 13:54 (#3),
span: $DIR/nodelim-groups.rs:13:53: 13:54 (#6),
},
Punct {
ch: '+',
spacing: Alone,
span: $DIR/nodelim-groups.rs:13:55: 13:56 (#3),
span: $DIR/nodelim-groups.rs:13:55: 13:56 (#6),
},
Literal {
kind: Integer,
symbol: "1",
suffix: None,
span: $DIR/nodelim-groups.rs:13:57: 13:58 (#3),
span: $DIR/nodelim-groups.rs:13:57: 13:58 (#6),
},
],
span: $DIR/nodelim-groups.rs:13:52: 13:59 (#3),
span: $DIR/nodelim-groups.rs:13:52: 13:59 (#6),
},
]
PRINT-BANG INPUT (DISPLAY): "hi" "hello".len() + "world".len() (1 + 1)
@ -77,7 +77,7 @@ PRINT-BANG INPUT (DEBUG): TokenStream [
kind: Str,
symbol: "hi",
suffix: None,
span: $DIR/nodelim-groups.rs:13:42: 13:46 (#8),
span: $DIR/nodelim-groups.rs:13:42: 13:46 (#11),
},
Group {
delimiter: None,
@ -86,49 +86,49 @@ PRINT-BANG INPUT (DEBUG): TokenStream [
kind: Str,
symbol: "hello",
suffix: None,
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#8),
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#11),
},
Punct {
ch: '.',
spacing: Alone,
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#8),
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#11),
},
Ident {
ident: "len",
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#8),
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#11),
},
Group {
delimiter: Parenthesis,
stream: TokenStream [],
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#8),
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#11),
},
Punct {
ch: '+',
spacing: Alone,
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#8),
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#11),
},
Literal {
kind: Str,
symbol: "world",
suffix: None,
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#8),
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#11),
},
Punct {
ch: '.',
spacing: Alone,
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#8),
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#11),
},
Ident {
ident: "len",
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#8),
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#11),
},
Group {
delimiter: Parenthesis,
stream: TokenStream [],
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#8),
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#11),
},
],
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#8),
span: $DIR/nodelim-groups.rs:13:47: 13:51 (#11),
},
Group {
delimiter: Parenthesis,
@ -137,20 +137,20 @@ PRINT-BANG INPUT (DEBUG): TokenStream [
kind: Integer,
symbol: "1",
suffix: None,
span: $DIR/nodelim-groups.rs:13:53: 13:54 (#8),
span: $DIR/nodelim-groups.rs:13:53: 13:54 (#11),
},
Punct {
ch: '+',
spacing: Alone,
span: $DIR/nodelim-groups.rs:13:55: 13:56 (#8),
span: $DIR/nodelim-groups.rs:13:55: 13:56 (#11),
},
Literal {
kind: Integer,
symbol: "1",
suffix: None,
span: $DIR/nodelim-groups.rs:13:57: 13:58 (#8),
span: $DIR/nodelim-groups.rs:13:57: 13:58 (#11),
},
],
span: $DIR/nodelim-groups.rs:13:52: 13:59 (#8),
span: $DIR/nodelim-groups.rs:13:52: 13:59 (#11),
},
]