mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-29 10:13:54 +00:00
Expr macros
This commit is contained in:
parent
c871022f98
commit
5691da4c84
@ -202,16 +202,22 @@ fn arg_list(p: &mut Parser) {
|
||||
// let _ = a;
|
||||
// let _ = a::b;
|
||||
// let _ = ::a::<b>;
|
||||
// let _ = format!();
|
||||
// }
|
||||
fn path_expr(p: &mut Parser, r: Restrictions) -> CompletedMarker {
|
||||
assert!(paths::is_path_start(p));
|
||||
let m = p.start();
|
||||
paths::expr_path(p);
|
||||
if p.at(L_CURLY) && !r.forbid_structs {
|
||||
struct_lit(p);
|
||||
m.complete(p, STRUCT_LIT)
|
||||
} else {
|
||||
m.complete(p, PATH_EXPR)
|
||||
match p.current() {
|
||||
L_CURLY if !r.forbid_structs => {
|
||||
struct_lit(p);
|
||||
m.complete(p, STRUCT_LIT)
|
||||
}
|
||||
EXCL => {
|
||||
items::macro_call_after_excl(p);
|
||||
m.complete(p, MACRO_CALL)
|
||||
}
|
||||
_ => m.complete(p, PATH_EXPR)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -277,7 +277,7 @@ fn mod_item(p: &mut Parser) {
|
||||
}
|
||||
}
|
||||
|
||||
enum MacroFlavor {
|
||||
pub(super) enum MacroFlavor {
|
||||
Curly,
|
||||
NonCurly,
|
||||
}
|
||||
@ -285,6 +285,10 @@ enum MacroFlavor {
|
||||
fn macro_call(p: &mut Parser) -> MacroFlavor {
|
||||
assert!(paths::is_path_start(p));
|
||||
paths::use_path(p);
|
||||
macro_call_after_excl(p)
|
||||
}
|
||||
|
||||
pub(super) fn macro_call_after_excl(p: &mut Parser) -> MacroFlavor {
|
||||
p.expect(EXCL);
|
||||
p.eat(IDENT);
|
||||
let flavor = match p.current() {
|
||||
|
@ -2,4 +2,5 @@ fn foo() {
|
||||
let _ = a;
|
||||
let _ = a::b;
|
||||
let _ = ::a::<b>;
|
||||
let _ = format!();
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
FILE@[0; 68)
|
||||
FN_ITEM@[0; 68)
|
||||
FILE@[0; 91)
|
||||
FN_ITEM@[0; 91)
|
||||
FN_KW@[0; 2)
|
||||
NAME@[2; 6)
|
||||
WHITESPACE@[2; 3)
|
||||
@ -8,7 +8,7 @@ FILE@[0; 68)
|
||||
L_PAREN@[6; 7)
|
||||
R_PAREN@[7; 8)
|
||||
WHITESPACE@[8; 9)
|
||||
BLOCK_EXPR@[9; 68)
|
||||
BLOCK_EXPR@[9; 91)
|
||||
L_CURLY@[9; 10)
|
||||
LET_STMT@[10; 30)
|
||||
WHITESPACE@[10; 15)
|
||||
@ -46,7 +46,7 @@ FILE@[0; 68)
|
||||
IDENT@[41; 42) "b"
|
||||
SEMI@[42; 43)
|
||||
WHITESPACE@[43; 48)
|
||||
LET_STMT@[48; 66)
|
||||
LET_STMT@[48; 70)
|
||||
LET_KW@[48; 51)
|
||||
PLACEHOLDER_PAT@[51; 54)
|
||||
WHITESPACE@[51; 52)
|
||||
@ -71,6 +71,24 @@ FILE@[0; 68)
|
||||
IDENT@[62; 63) "b"
|
||||
R_ANGLE@[63; 64)
|
||||
SEMI@[64; 65)
|
||||
WHITESPACE@[65; 66)
|
||||
R_CURLY@[66; 67)
|
||||
WHITESPACE@[67; 68)
|
||||
WHITESPACE@[65; 70)
|
||||
LET_STMT@[70; 89)
|
||||
LET_KW@[70; 73)
|
||||
PLACEHOLDER_PAT@[73; 76)
|
||||
WHITESPACE@[73; 74)
|
||||
UNDERSCORE@[74; 75)
|
||||
WHITESPACE@[75; 76)
|
||||
EQ@[76; 77)
|
||||
MACRO_CALL@[77; 87)
|
||||
PATH@[77; 84)
|
||||
PATH_SEGMENT@[77; 84)
|
||||
NAME_REF@[77; 84)
|
||||
WHITESPACE@[77; 78)
|
||||
IDENT@[78; 84) "format"
|
||||
EXCL@[84; 85)
|
||||
L_PAREN@[85; 86)
|
||||
R_PAREN@[86; 87)
|
||||
SEMI@[87; 88)
|
||||
WHITESPACE@[88; 89)
|
||||
R_CURLY@[89; 90)
|
||||
WHITESPACE@[90; 91)
|
||||
|
Loading…
Reference in New Issue
Block a user