G: use name refs in paths

This commit is contained in:
Aleksey Kladov 2018-02-10 14:17:38 +03:00
parent fa2131365e
commit e792ec3eca
10 changed files with 93 additions and 51 deletions

View file

@ -60,6 +60,16 @@ fn name(p: &mut Parser) {
}
}
fn name_ref(p: &mut Parser) {
if p.at(IDENT) {
let m = p.start();
p.bump();
m.complete(p, NAME_REF);
} else {
p.error("expected identifier");
}
}
fn error_block(p: &mut Parser, message: &str) {
assert!(p.at(L_CURLY));
let err = p.start();

View file

@ -42,7 +42,8 @@ fn path_segment(p: &mut Parser, first: bool) {
p.eat(COLONCOLON);
}
match p.current() {
IDENT | SELF_KW | SUPER_KW => p.bump(),
IDENT => name_ref(p),
SELF_KW | SUPER_KW => p.bump(),
_ => {
p.error("expected identifier");
}

View file

@ -5,8 +5,9 @@ FILE@[0; 12)
PATH@[3; 9)
PATH@[3; 7)
PATH_SEGMENT@[3; 7)
WHITESPACE@[3; 4)
IDENT@[4; 7) "foo"
NAME_REF@[3; 7)
WHITESPACE@[3; 4)
IDENT@[4; 7) "foo"
COLONCOLON@[7; 9)
PATH_SEGMENT@[9; 9)
err: `expected identifier`

View file

@ -4,8 +4,9 @@ FILE@[0; 19)
USE_TREE@[3; 7)
PATH@[3; 7)
PATH_SEGMENT@[3; 7)
WHITESPACE@[3; 4)
IDENT@[4; 7) "foo"
NAME_REF@[3; 7)
WHITESPACE@[3; 4)
IDENT@[4; 7) "foo"
SEMI@[7; 8)
WHITESPACE@[8; 9)
USE_ITEM@[9; 19)
@ -15,5 +16,6 @@ FILE@[0; 19)
PATH_SEGMENT@[12; 18)
WHITESPACE@[12; 13)
COLONCOLON@[13; 15)
IDENT@[15; 18) "bar"
NAME_REF@[15; 18)
IDENT@[15; 18) "bar"
SEMI@[18; 19)

View file

@ -8,13 +8,16 @@ FILE@[0; 40)
PATH_SEGMENT@[3; 9)
WHITESPACE@[3; 4)
COLONCOLON@[4; 6)
IDENT@[6; 9) "foo"
NAME_REF@[6; 9)
IDENT@[6; 9) "foo"
COLONCOLON@[9; 11)
PATH_SEGMENT@[11; 14)
IDENT@[11; 14) "bar"
NAME_REF@[11; 14)
IDENT@[11; 14) "bar"
COLONCOLON@[14; 16)
PATH_SEGMENT@[16; 19)
IDENT@[16; 19) "baz"
NAME_REF@[16; 19)
IDENT@[16; 19) "baz"
SEMI@[19; 20)
WHITESPACE@[20; 21)
USE_ITEM@[21; 40)
@ -24,13 +27,16 @@ FILE@[0; 40)
PATH@[24; 33)
PATH@[24; 28)
PATH_SEGMENT@[24; 28)
WHITESPACE@[24; 25)
IDENT@[25; 28) "foo"
NAME_REF@[24; 28)
WHITESPACE@[24; 25)
IDENT@[25; 28) "foo"
COLONCOLON@[28; 30)
PATH_SEGMENT@[30; 33)
IDENT@[30; 33) "bar"
NAME_REF@[30; 33)
IDENT@[30; 33) "bar"
COLONCOLON@[33; 35)
PATH_SEGMENT@[35; 38)
IDENT@[35; 38) "baz"
NAME_REF@[35; 38)
IDENT@[35; 38) "baz"
SEMI@[38; 39)
WHITESPACE@[39; 40)

View file

@ -67,14 +67,17 @@ FILE@[0; 98)
PATH@[72; 81)
PATH@[72; 76)
PATH_SEGMENT@[72; 76)
WHITESPACE@[72; 73)
IDENT@[73; 76) "foo"
NAME_REF@[72; 76)
WHITESPACE@[72; 73)
IDENT@[73; 76) "foo"
COLONCOLON@[76; 78)
PATH_SEGMENT@[78; 81)
IDENT@[78; 81) "bar"
NAME_REF@[78; 81)
IDENT@[78; 81) "bar"
COLONCOLON@[81; 83)
PATH_SEGMENT@[83; 86)
IDENT@[83; 86) "baz"
NAME_REF@[83; 86)
IDENT@[83; 86) "baz"
R_PAREN@[86; 87)
WHITESPACE@[87; 88)
FN_KW@[88; 90)

View file

@ -9,7 +9,8 @@ FILE@[0; 65)
SELF_KW@[4; 8)
COLONCOLON@[8; 10)
PATH_SEGMENT@[10; 13)
IDENT@[10; 13) "foo"
NAME_REF@[10; 13)
IDENT@[10; 13) "foo"
SEMI@[13; 14)
WHITESPACE@[14; 15)
USE_ITEM@[15; 38)
@ -26,7 +27,8 @@ FILE@[0; 65)
SUPER_KW@[26; 31)
COLONCOLON@[31; 33)
PATH_SEGMENT@[33; 36)
IDENT@[33; 36) "bar"
NAME_REF@[33; 36)
IDENT@[33; 36) "bar"
SEMI@[36; 37)
WHITESPACE@[37; 38)
USE_ITEM@[38; 65)
@ -42,12 +44,14 @@ FILE@[0; 65)
SELF_KW@[44; 48)
COLONCOLON@[48; 50)
PATH_SEGMENT@[50; 51)
IDENT@[50; 51) "a"
NAME_REF@[50; 51)
IDENT@[50; 51) "a"
COLONCOLON@[51; 53)
PATH_SEGMENT@[53; 58)
SUPER_KW@[53; 58)
COLONCOLON@[58; 60)
PATH_SEGMENT@[60; 63)
IDENT@[60; 63) "bar"
NAME_REF@[60; 63)
IDENT@[60; 63) "bar"
SEMI@[63; 64)
WHITESPACE@[64; 65)

View file

@ -36,8 +36,9 @@ FILE@[0; 81)
USE_TREE@[37; 44)
PATH@[37; 41)
PATH_SEGMENT@[37; 41)
WHITESPACE@[37; 38)
IDENT@[38; 41) "foo"
NAME_REF@[37; 41)
WHITESPACE@[37; 38)
IDENT@[38; 41) "foo"
COLONCOLON@[41; 43)
STAR@[43; 44)
SEMI@[44; 45)
@ -47,8 +48,9 @@ FILE@[0; 81)
USE_TREE@[49; 57)
PATH@[49; 53)
PATH_SEGMENT@[49; 53)
WHITESPACE@[49; 50)
IDENT@[50; 53) "foo"
NAME_REF@[49; 53)
WHITESPACE@[49; 50)
IDENT@[50; 53) "foo"
COLONCOLON@[53; 55)
L_CURLY@[55; 56)
R_CURLY@[56; 57)
@ -61,25 +63,29 @@ FILE@[0; 81)
PATH_SEGMENT@[62; 68)
WHITESPACE@[62; 63)
COLONCOLON@[63; 65)
IDENT@[65; 68) "foo"
NAME_REF@[65; 68)
IDENT@[65; 68) "foo"
COLONCOLON@[68; 70)
L_CURLY@[70; 71)
USE_TREE@[71; 72)
PATH@[71; 72)
PATH_SEGMENT@[71; 72)
IDENT@[71; 72) "a"
NAME_REF@[71; 72)
IDENT@[71; 72) "a"
COMMA@[72; 73)
USE_TREE@[73; 75)
PATH@[73; 75)
PATH_SEGMENT@[73; 75)
WHITESPACE@[73; 74)
IDENT@[74; 75) "b"
NAME_REF@[73; 75)
WHITESPACE@[73; 74)
IDENT@[74; 75) "b"
COMMA@[75; 76)
USE_TREE@[76; 78)
PATH@[76; 78)
PATH_SEGMENT@[76; 78)
WHITESPACE@[76; 77)
IDENT@[77; 78) "c"
NAME_REF@[76; 78)
WHITESPACE@[76; 77)
IDENT@[77; 78) "c"
R_CURLY@[78; 79)
SEMI@[79; 80)
WHITESPACE@[80; 81)

View file

@ -4,9 +4,10 @@ FILE@[0; 55)
USE_TREE@[3; 14)
PATH@[3; 8)
PATH_SEGMENT@[3; 8)
WHITESPACE@[3; 4)
IDENT@[4; 7) "foo"
WHITESPACE@[7; 8)
NAME_REF@[3; 8)
WHITESPACE@[3; 4)
IDENT@[4; 7) "foo"
WHITESPACE@[7; 8)
ALIAS@[8; 14)
AS_KW@[8; 10)
NAME@[10; 14)
@ -19,15 +20,17 @@ FILE@[0; 55)
USE_TREE@[19; 53)
PATH@[19; 23)
PATH_SEGMENT@[19; 23)
WHITESPACE@[19; 20)
IDENT@[20; 23) "foo"
NAME_REF@[19; 23)
WHITESPACE@[19; 20)
IDENT@[20; 23) "foo"
COLONCOLON@[23; 25)
L_CURLY@[25; 26)
USE_TREE@[26; 32)
PATH@[26; 28)
PATH_SEGMENT@[26; 28)
IDENT@[26; 27) "a"
WHITESPACE@[27; 28)
NAME_REF@[26; 28)
IDENT@[26; 27) "a"
WHITESPACE@[27; 28)
ALIAS@[28; 32)
AS_KW@[28; 30)
NAME@[30; 32)
@ -48,8 +51,9 @@ FILE@[0; 55)
PATH_SEGMENT@[41; 48)
WHITESPACE@[41; 42)
COLONCOLON@[42; 44)
IDENT@[44; 47) "foo"
WHITESPACE@[47; 48)
NAME_REF@[44; 48)
IDENT@[44; 47) "foo"
WHITESPACE@[47; 48)
ALIAS@[48; 52)
AS_KW@[48; 50)
NAME@[50; 52)

View file

@ -97,8 +97,9 @@ FILE@[0; 200)
PLUS@[107; 108)
PATH@[108; 114)
PATH_SEGMENT@[108; 114)
WHITESPACE@[108; 109)
IDENT@[109; 114) "Clone"
NAME_REF@[108; 114)
WHITESPACE@[108; 109)
IDENT@[109; 114) "Clone"
R_ANGLE@[114; 115)
SEMI@[115; 116)
WHITESPACE@[116; 117)
@ -114,14 +115,16 @@ FILE@[0; 200)
COLON@[127; 128)
PATH@[128; 135)
PATH_SEGMENT@[128; 135)
WHITESPACE@[128; 129)
IDENT@[129; 134) "Clone"
WHITESPACE@[134; 135)
NAME_REF@[128; 135)
WHITESPACE@[128; 129)
IDENT@[129; 134) "Clone"
WHITESPACE@[134; 135)
PLUS@[135; 136)
PATH@[136; 141)
PATH_SEGMENT@[136; 141)
WHITESPACE@[136; 137)
IDENT@[137; 141) "Copy"
NAME_REF@[136; 141)
WHITESPACE@[136; 137)
IDENT@[137; 141) "Copy"
R_ANGLE@[141; 142)
SEMI@[142; 143)
WHITESPACE@[143; 144)
@ -139,8 +142,9 @@ FILE@[0; 200)
PATH_SEGMENT@[155; 162)
WHITESPACE@[155; 156)
COLONCOLON@[156; 158)
IDENT@[158; 161) "Foo"
WHITESPACE@[161; 162)
NAME_REF@[158; 162)
IDENT@[158; 161) "Foo"
WHITESPACE@[161; 162)
PLUS@[162; 163)
PATH@[163; 174)
PATH@[163; 168)
@ -149,8 +153,9 @@ FILE@[0; 200)
SELF_KW@[164; 168)
COLONCOLON@[168; 170)
PATH_SEGMENT@[170; 174)
IDENT@[170; 173) "Bar"
WHITESPACE@[173; 174)
NAME_REF@[170; 174)
IDENT@[170; 173) "Bar"
WHITESPACE@[173; 174)
PLUS@[174; 175)
WHITESPACE@[175; 176)
LIFETIME@[176; 178) "'a"