extern blocks

This commit is contained in:
Aleksey Kladov 2018-09-04 00:49:21 +03:00
parent 952da31f44
commit c3e28f0646
8 changed files with 1032 additions and 8 deletions

View file

@ -227,6 +227,7 @@ fn extern_item_list(p: &mut Parser) {
assert!(p.at(L_CURLY)); assert!(p.at(L_CURLY));
let m = p.start(); let m = p.start();
p.bump(); p.bump();
mod_contents(p, true);
p.expect(R_CURLY); p.expect(R_CURLY);
m.complete(p, EXTERN_ITEM_LIST); m.complete(p, EXTERN_ITEM_LIST);
} }

View file

@ -127,7 +127,8 @@ fn validate_block_structure(root: SyntaxNodeRef) {
assert_eq!( assert_eq!(
node.parent(), node.parent(),
pair.parent(), pair.parent(),
"\nunpaired curleys:\n{}", "\nunpaired curleys:\n{}\n{}\n",
root.text(),
utils::dump_tree(root), utils::dump_tree(root),
); );
assert!( assert!(

View file

@ -0,0 +1,29 @@
extern {
pub fn socket(domain: ::c_int, ty: ::c_int, protocol: ::c_int) -> ::c_int;
pub fn bind(fd: ::c_int, addr: *const sockaddr, len: socklen_t) -> ::c_int;
pub fn connect(socket: ::c_int, address: *const sockaddr,
len: socklen_t) -> ::c_int;
pub fn listen(socket: ::c_int, backlog: ::c_int) -> ::c_int;
pub fn getsockname(socket: ::c_int, address: *mut sockaddr,
address_len: *mut socklen_t) -> ::c_int;
pub fn getsockopt(sockfd: ::c_int,
level: ::c_int,
optname: ::c_int,
optval: *mut ::c_void,
optlen: *mut ::socklen_t) -> ::c_int;
pub fn setsockopt(socket: ::c_int, level: ::c_int, name: ::c_int,
value: *const ::c_void,
option_len: socklen_t) -> ::c_int;
pub fn getpeername(socket: ::c_int, address: *mut sockaddr,
address_len: *mut socklen_t) -> ::c_int;
pub fn sendto(socket: ::c_int, buf: *const ::c_void, len: ::size_t,
flags: ::c_int, addr: *const sockaddr,
addrlen: socklen_t) -> ::ssize_t;
pub fn send(socket: ::c_int, buf: *const ::c_void, len: ::size_t,
flags: ::c_int) -> ::ssize_t;
pub fn recvfrom(socket: ::c_int, buf: *mut ::c_void, len: ::size_t,
flags: ::c_int, addr: *mut ::sockaddr,
addrlen: *mut ::socklen_t) -> ::ssize_t;
pub fn recv(socket: ::c_int, buf: *mut ::c_void, len: ::size_t,
flags: ::c_int) -> ::ssize_t;
}

View file

@ -0,0 +1,973 @@
ROOT@[0; 1598)
EXTERN_BLOCK@[0; 1597)
ABI@[0; 6)
EXTERN_KW@[0; 6)
WHITESPACE@[6; 7)
EXTERN_ITEM_LIST@[7; 1597)
L_CURLY@[7; 8)
WHITESPACE@[8; 13)
FN_DEF@[13; 87)
VISIBILITY@[13; 16)
PUB_KW@[13; 16)
WHITESPACE@[16; 17)
FN_KW@[17; 19)
WHITESPACE@[19; 20)
NAME@[20; 26)
IDENT@[20; 26) "socket"
PARAM_LIST@[26; 75)
L_PAREN@[26; 27)
PARAM@[27; 42)
BIND_PAT@[27; 33)
NAME@[27; 33)
IDENT@[27; 33) "domain"
COLON@[33; 34)
WHITESPACE@[34; 35)
PATH_TYPE@[35; 42)
PATH@[35; 42)
PATH_SEGMENT@[35; 42)
COLONCOLON@[35; 37)
NAME_REF@[37; 42)
IDENT@[37; 42) "c_int"
COMMA@[42; 43)
WHITESPACE@[43; 44)
PARAM@[44; 55)
BIND_PAT@[44; 46)
NAME@[44; 46)
IDENT@[44; 46) "ty"
COLON@[46; 47)
WHITESPACE@[47; 48)
PATH_TYPE@[48; 55)
PATH@[48; 55)
PATH_SEGMENT@[48; 55)
COLONCOLON@[48; 50)
NAME_REF@[50; 55)
IDENT@[50; 55) "c_int"
COMMA@[55; 56)
WHITESPACE@[56; 57)
PARAM@[57; 74)
BIND_PAT@[57; 65)
NAME@[57; 65)
IDENT@[57; 65) "protocol"
COLON@[65; 66)
WHITESPACE@[66; 67)
PATH_TYPE@[67; 74)
PATH@[67; 74)
PATH_SEGMENT@[67; 74)
COLONCOLON@[67; 69)
NAME_REF@[69; 74)
IDENT@[69; 74) "c_int"
R_PAREN@[74; 75)
WHITESPACE@[75; 76)
RET_TYPE@[76; 86)
THIN_ARROW@[76; 78)
WHITESPACE@[78; 79)
PATH_TYPE@[79; 86)
PATH@[79; 86)
PATH_SEGMENT@[79; 86)
COLONCOLON@[79; 81)
NAME_REF@[81; 86)
IDENT@[81; 86) "c_int"
SEMI@[86; 87)
WHITESPACE@[87; 92)
FN_DEF@[92; 167)
VISIBILITY@[92; 95)
PUB_KW@[92; 95)
WHITESPACE@[95; 96)
FN_KW@[96; 98)
WHITESPACE@[98; 99)
NAME@[99; 103)
IDENT@[99; 103) "bind"
PARAM_LIST@[103; 155)
L_PAREN@[103; 104)
PARAM@[104; 115)
BIND_PAT@[104; 106)
NAME@[104; 106)
IDENT@[104; 106) "fd"
COLON@[106; 107)
WHITESPACE@[107; 108)
PATH_TYPE@[108; 115)
PATH@[108; 115)
PATH_SEGMENT@[108; 115)
COLONCOLON@[108; 110)
NAME_REF@[110; 115)
IDENT@[110; 115) "c_int"
COMMA@[115; 116)
WHITESPACE@[116; 117)
PARAM@[117; 138)
BIND_PAT@[117; 121)
NAME@[117; 121)
IDENT@[117; 121) "addr"
COLON@[121; 122)
WHITESPACE@[122; 123)
POINTER_TYPE@[123; 138)
STAR@[123; 124)
CONST_KW@[124; 129)
WHITESPACE@[129; 130)
PATH_TYPE@[130; 138)
PATH@[130; 138)
PATH_SEGMENT@[130; 138)
NAME_REF@[130; 138)
IDENT@[130; 138) "sockaddr"
COMMA@[138; 139)
WHITESPACE@[139; 140)
PARAM@[140; 154)
BIND_PAT@[140; 143)
NAME@[140; 143)
IDENT@[140; 143) "len"
COLON@[143; 144)
WHITESPACE@[144; 145)
PATH_TYPE@[145; 154)
PATH@[145; 154)
PATH_SEGMENT@[145; 154)
NAME_REF@[145; 154)
IDENT@[145; 154) "socklen_t"
R_PAREN@[154; 155)
WHITESPACE@[155; 156)
RET_TYPE@[156; 166)
THIN_ARROW@[156; 158)
WHITESPACE@[158; 159)
PATH_TYPE@[159; 166)
PATH@[159; 166)
PATH_SEGMENT@[159; 166)
COLONCOLON@[159; 161)
NAME_REF@[161; 166)
IDENT@[161; 166) "c_int"
SEMI@[166; 167)
WHITESPACE@[167; 172)
FN_DEF@[172; 276)
VISIBILITY@[172; 175)
PUB_KW@[172; 175)
WHITESPACE@[175; 176)
FN_KW@[176; 178)
WHITESPACE@[178; 179)
NAME@[179; 186)
IDENT@[179; 186) "connect"
PARAM_LIST@[186; 264)
L_PAREN@[186; 187)
PARAM@[187; 202)
BIND_PAT@[187; 193)
NAME@[187; 193)
IDENT@[187; 193) "socket"
COLON@[193; 194)
WHITESPACE@[194; 195)
PATH_TYPE@[195; 202)
PATH@[195; 202)
PATH_SEGMENT@[195; 202)
COLONCOLON@[195; 197)
NAME_REF@[197; 202)
IDENT@[197; 202) "c_int"
COMMA@[202; 203)
WHITESPACE@[203; 204)
PARAM@[204; 228)
BIND_PAT@[204; 211)
NAME@[204; 211)
IDENT@[204; 211) "address"
COLON@[211; 212)
WHITESPACE@[212; 213)
POINTER_TYPE@[213; 228)
STAR@[213; 214)
CONST_KW@[214; 219)
WHITESPACE@[219; 220)
PATH_TYPE@[220; 228)
PATH@[220; 228)
PATH_SEGMENT@[220; 228)
NAME_REF@[220; 228)
IDENT@[220; 228) "sockaddr"
COMMA@[228; 229)
WHITESPACE@[229; 249)
PARAM@[249; 263)
BIND_PAT@[249; 252)
NAME@[249; 252)
IDENT@[249; 252) "len"
COLON@[252; 253)
WHITESPACE@[253; 254)
PATH_TYPE@[254; 263)
PATH@[254; 263)
PATH_SEGMENT@[254; 263)
NAME_REF@[254; 263)
IDENT@[254; 263) "socklen_t"
R_PAREN@[263; 264)
WHITESPACE@[264; 265)
RET_TYPE@[265; 275)
THIN_ARROW@[265; 267)
WHITESPACE@[267; 268)
PATH_TYPE@[268; 275)
PATH@[268; 275)
PATH_SEGMENT@[268; 275)
COLONCOLON@[268; 270)
NAME_REF@[270; 275)
IDENT@[270; 275) "c_int"
SEMI@[275; 276)
WHITESPACE@[276; 281)
FN_DEF@[281; 341)
VISIBILITY@[281; 284)
PUB_KW@[281; 284)
WHITESPACE@[284; 285)
FN_KW@[285; 287)
WHITESPACE@[287; 288)
NAME@[288; 294)
IDENT@[288; 294) "listen"
PARAM_LIST@[294; 329)
L_PAREN@[294; 295)
PARAM@[295; 310)
BIND_PAT@[295; 301)
NAME@[295; 301)
IDENT@[295; 301) "socket"
COLON@[301; 302)
WHITESPACE@[302; 303)
PATH_TYPE@[303; 310)
PATH@[303; 310)
PATH_SEGMENT@[303; 310)
COLONCOLON@[303; 305)
NAME_REF@[305; 310)
IDENT@[305; 310) "c_int"
COMMA@[310; 311)
WHITESPACE@[311; 312)
PARAM@[312; 328)
BIND_PAT@[312; 319)
NAME@[312; 319)
IDENT@[312; 319) "backlog"
COLON@[319; 320)
WHITESPACE@[320; 321)
PATH_TYPE@[321; 328)
PATH@[321; 328)
PATH_SEGMENT@[321; 328)
COLONCOLON@[321; 323)
NAME_REF@[323; 328)
IDENT@[323; 328) "c_int"
R_PAREN@[328; 329)
WHITESPACE@[329; 330)
RET_TYPE@[330; 340)
THIN_ARROW@[330; 332)
WHITESPACE@[332; 333)
PATH_TYPE@[333; 340)
PATH@[333; 340)
PATH_SEGMENT@[333; 340)
COLONCOLON@[333; 335)
NAME_REF@[335; 340)
IDENT@[335; 340) "c_int"
SEMI@[340; 341)
WHITESPACE@[341; 346)
FN_DEF@[346; 469)
VISIBILITY@[346; 349)
PUB_KW@[346; 349)
WHITESPACE@[349; 350)
FN_KW@[350; 352)
WHITESPACE@[352; 353)
NAME@[353; 364)
IDENT@[353; 364) "getsockname"
PARAM_LIST@[364; 457)
L_PAREN@[364; 365)
PARAM@[365; 380)
BIND_PAT@[365; 371)
NAME@[365; 371)
IDENT@[365; 371) "socket"
COLON@[371; 372)
WHITESPACE@[372; 373)
PATH_TYPE@[373; 380)
PATH@[373; 380)
PATH_SEGMENT@[373; 380)
COLONCOLON@[373; 375)
NAME_REF@[375; 380)
IDENT@[375; 380) "c_int"
COMMA@[380; 381)
WHITESPACE@[381; 382)
PARAM@[382; 404)
BIND_PAT@[382; 389)
NAME@[382; 389)
IDENT@[382; 389) "address"
COLON@[389; 390)
WHITESPACE@[390; 391)
POINTER_TYPE@[391; 404)
STAR@[391; 392)
MUT_KW@[392; 395)
WHITESPACE@[395; 396)
PATH_TYPE@[396; 404)
PATH@[396; 404)
PATH_SEGMENT@[396; 404)
NAME_REF@[396; 404)
IDENT@[396; 404) "sockaddr"
COMMA@[404; 405)
WHITESPACE@[405; 429)
PARAM@[429; 456)
BIND_PAT@[429; 440)
NAME@[429; 440)
IDENT@[429; 440) "address_len"
COLON@[440; 441)
WHITESPACE@[441; 442)
POINTER_TYPE@[442; 456)
STAR@[442; 443)
MUT_KW@[443; 446)
WHITESPACE@[446; 447)
PATH_TYPE@[447; 456)
PATH@[447; 456)
PATH_SEGMENT@[447; 456)
NAME_REF@[447; 456)
IDENT@[447; 456) "socklen_t"
R_PAREN@[456; 457)
WHITESPACE@[457; 458)
RET_TYPE@[458; 468)
THIN_ARROW@[458; 460)
WHITESPACE@[460; 461)
PATH_TYPE@[461; 468)
PATH@[461; 468)
PATH_SEGMENT@[461; 468)
COLONCOLON@[461; 463)
NAME_REF@[463; 468)
IDENT@[463; 468) "c_int"
SEMI@[468; 469)
WHITESPACE@[469; 474)
FN_DEF@[474; 691)
VISIBILITY@[474; 477)
PUB_KW@[474; 477)
WHITESPACE@[477; 478)
FN_KW@[478; 480)
WHITESPACE@[480; 481)
NAME@[481; 491)
IDENT@[481; 491) "getsockopt"
PARAM_LIST@[491; 679)
L_PAREN@[491; 492)
PARAM@[492; 507)
BIND_PAT@[492; 498)
NAME@[492; 498)
IDENT@[492; 498) "sockfd"
COLON@[498; 499)
WHITESPACE@[499; 500)
PATH_TYPE@[500; 507)
PATH@[500; 507)
PATH_SEGMENT@[500; 507)
COLONCOLON@[500; 502)
NAME_REF@[502; 507)
IDENT@[502; 507) "c_int"
COMMA@[507; 508)
WHITESPACE@[508; 531)
PARAM@[531; 545)
BIND_PAT@[531; 536)
NAME@[531; 536)
IDENT@[531; 536) "level"
COLON@[536; 537)
WHITESPACE@[537; 538)
PATH_TYPE@[538; 545)
PATH@[538; 545)
PATH_SEGMENT@[538; 545)
COLONCOLON@[538; 540)
NAME_REF@[540; 545)
IDENT@[540; 545) "c_int"
COMMA@[545; 546)
WHITESPACE@[546; 569)
PARAM@[569; 585)
BIND_PAT@[569; 576)
NAME@[569; 576)
IDENT@[569; 576) "optname"
COLON@[576; 577)
WHITESPACE@[577; 578)
PATH_TYPE@[578; 585)
PATH@[578; 585)
PATH_SEGMENT@[578; 585)
COLONCOLON@[578; 580)
NAME_REF@[580; 585)
IDENT@[580; 585) "c_int"
COMMA@[585; 586)
WHITESPACE@[586; 609)
PARAM@[609; 630)
BIND_PAT@[609; 615)
NAME@[609; 615)
IDENT@[609; 615) "optval"
COLON@[615; 616)
WHITESPACE@[616; 617)
POINTER_TYPE@[617; 630)
STAR@[617; 618)
MUT_KW@[618; 621)
WHITESPACE@[621; 622)
PATH_TYPE@[622; 630)
PATH@[622; 630)
PATH_SEGMENT@[622; 630)
COLONCOLON@[622; 624)
NAME_REF@[624; 630)
IDENT@[624; 630) "c_void"
COMMA@[630; 631)
WHITESPACE@[631; 654)
PARAM@[654; 678)
BIND_PAT@[654; 660)
NAME@[654; 660)
IDENT@[654; 660) "optlen"
COLON@[660; 661)
WHITESPACE@[661; 662)
POINTER_TYPE@[662; 678)
STAR@[662; 663)
MUT_KW@[663; 666)
WHITESPACE@[666; 667)
PATH_TYPE@[667; 678)
PATH@[667; 678)
PATH_SEGMENT@[667; 678)
COLONCOLON@[667; 669)
NAME_REF@[669; 678)
IDENT@[669; 678) "socklen_t"
R_PAREN@[678; 679)
WHITESPACE@[679; 680)
RET_TYPE@[680; 690)
THIN_ARROW@[680; 682)
WHITESPACE@[682; 683)
PATH_TYPE@[683; 690)
PATH@[683; 690)
PATH_SEGMENT@[683; 690)
COLONCOLON@[683; 685)
NAME_REF@[685; 690)
IDENT@[685; 690) "c_int"
SEMI@[690; 691)
WHITESPACE@[691; 696)
FN_DEF@[696; 864)
VISIBILITY@[696; 699)
PUB_KW@[696; 699)
WHITESPACE@[699; 700)
FN_KW@[700; 702)
WHITESPACE@[702; 703)
NAME@[703; 713)
IDENT@[703; 713) "setsockopt"
PARAM_LIST@[713; 852)
L_PAREN@[713; 714)
PARAM@[714; 729)
BIND_PAT@[714; 720)
NAME@[714; 720)
IDENT@[714; 720) "socket"
COLON@[720; 721)
WHITESPACE@[721; 722)
PATH_TYPE@[722; 729)
PATH@[722; 729)
PATH_SEGMENT@[722; 729)
COLONCOLON@[722; 724)
NAME_REF@[724; 729)
IDENT@[724; 729) "c_int"
COMMA@[729; 730)
WHITESPACE@[730; 731)
PARAM@[731; 745)
BIND_PAT@[731; 736)
NAME@[731; 736)
IDENT@[731; 736) "level"
COLON@[736; 737)
WHITESPACE@[737; 738)
PATH_TYPE@[738; 745)
PATH@[738; 745)
PATH_SEGMENT@[738; 745)
COLONCOLON@[738; 740)
NAME_REF@[740; 745)
IDENT@[740; 745) "c_int"
COMMA@[745; 746)
WHITESPACE@[746; 747)
PARAM@[747; 760)
BIND_PAT@[747; 751)
NAME@[747; 751)
IDENT@[747; 751) "name"
COLON@[751; 752)
WHITESPACE@[752; 753)
PATH_TYPE@[753; 760)
PATH@[753; 760)
PATH_SEGMENT@[753; 760)
COLONCOLON@[753; 755)
NAME_REF@[755; 760)
IDENT@[755; 760) "c_int"
COMMA@[760; 761)
WHITESPACE@[761; 784)
PARAM@[784; 806)
BIND_PAT@[784; 789)
NAME@[784; 789)
IDENT@[784; 789) "value"
COLON@[789; 790)
WHITESPACE@[790; 791)
POINTER_TYPE@[791; 806)
STAR@[791; 792)
CONST_KW@[792; 797)
WHITESPACE@[797; 798)
PATH_TYPE@[798; 806)
PATH@[798; 806)
PATH_SEGMENT@[798; 806)
COLONCOLON@[798; 800)
NAME_REF@[800; 806)
IDENT@[800; 806) "c_void"
COMMA@[806; 807)
WHITESPACE@[807; 830)
PARAM@[830; 851)
BIND_PAT@[830; 840)
NAME@[830; 840)
IDENT@[830; 840) "option_len"
COLON@[840; 841)
WHITESPACE@[841; 842)
PATH_TYPE@[842; 851)
PATH@[842; 851)
PATH_SEGMENT@[842; 851)
NAME_REF@[842; 851)
IDENT@[842; 851) "socklen_t"
R_PAREN@[851; 852)
WHITESPACE@[852; 853)
RET_TYPE@[853; 863)
THIN_ARROW@[853; 855)
WHITESPACE@[855; 856)
PATH_TYPE@[856; 863)
PATH@[856; 863)
PATH_SEGMENT@[856; 863)
COLONCOLON@[856; 858)
NAME_REF@[858; 863)
IDENT@[858; 863) "c_int"
SEMI@[863; 864)
WHITESPACE@[864; 869)
FN_DEF@[869; 992)
VISIBILITY@[869; 872)
PUB_KW@[869; 872)
WHITESPACE@[872; 873)
FN_KW@[873; 875)
WHITESPACE@[875; 876)
NAME@[876; 887)
IDENT@[876; 887) "getpeername"
PARAM_LIST@[887; 980)
L_PAREN@[887; 888)
PARAM@[888; 903)
BIND_PAT@[888; 894)
NAME@[888; 894)
IDENT@[888; 894) "socket"
COLON@[894; 895)
WHITESPACE@[895; 896)
PATH_TYPE@[896; 903)
PATH@[896; 903)
PATH_SEGMENT@[896; 903)
COLONCOLON@[896; 898)
NAME_REF@[898; 903)
IDENT@[898; 903) "c_int"
COMMA@[903; 904)
WHITESPACE@[904; 905)
PARAM@[905; 927)
BIND_PAT@[905; 912)
NAME@[905; 912)
IDENT@[905; 912) "address"
COLON@[912; 913)
WHITESPACE@[913; 914)
POINTER_TYPE@[914; 927)
STAR@[914; 915)
MUT_KW@[915; 918)
WHITESPACE@[918; 919)
PATH_TYPE@[919; 927)
PATH@[919; 927)
PATH_SEGMENT@[919; 927)
NAME_REF@[919; 927)
IDENT@[919; 927) "sockaddr"
COMMA@[927; 928)
WHITESPACE@[928; 952)
PARAM@[952; 979)
BIND_PAT@[952; 963)
NAME@[952; 963)
IDENT@[952; 963) "address_len"
COLON@[963; 964)
WHITESPACE@[964; 965)
POINTER_TYPE@[965; 979)
STAR@[965; 966)
MUT_KW@[966; 969)
WHITESPACE@[969; 970)
PATH_TYPE@[970; 979)
PATH@[970; 979)
PATH_SEGMENT@[970; 979)
NAME_REF@[970; 979)
IDENT@[970; 979) "socklen_t"
R_PAREN@[979; 980)
WHITESPACE@[980; 981)
RET_TYPE@[981; 991)
THIN_ARROW@[981; 983)
WHITESPACE@[983; 984)
PATH_TYPE@[984; 991)
PATH@[984; 991)
PATH_SEGMENT@[984; 991)
COLONCOLON@[984; 986)
NAME_REF@[986; 991)
IDENT@[986; 991) "c_int"
SEMI@[991; 992)
WHITESPACE@[992; 997)
FN_DEF@[997; 1173)
VISIBILITY@[997; 1000)
PUB_KW@[997; 1000)
WHITESPACE@[1000; 1001)
FN_KW@[1001; 1003)
WHITESPACE@[1003; 1004)
NAME@[1004; 1010)
IDENT@[1004; 1010) "sendto"
PARAM_LIST@[1010; 1159)
L_PAREN@[1010; 1011)
PARAM@[1011; 1026)
BIND_PAT@[1011; 1017)
NAME@[1011; 1017)
IDENT@[1011; 1017) "socket"
COLON@[1017; 1018)
WHITESPACE@[1018; 1019)
PATH_TYPE@[1019; 1026)
PATH@[1019; 1026)
PATH_SEGMENT@[1019; 1026)
COLONCOLON@[1019; 1021)
NAME_REF@[1021; 1026)
IDENT@[1021; 1026) "c_int"
COMMA@[1026; 1027)
WHITESPACE@[1027; 1028)
PARAM@[1028; 1048)
BIND_PAT@[1028; 1031)
NAME@[1028; 1031)
IDENT@[1028; 1031) "buf"
COLON@[1031; 1032)
WHITESPACE@[1032; 1033)
POINTER_TYPE@[1033; 1048)
STAR@[1033; 1034)
CONST_KW@[1034; 1039)
WHITESPACE@[1039; 1040)
PATH_TYPE@[1040; 1048)
PATH@[1040; 1048)
PATH_SEGMENT@[1040; 1048)
COLONCOLON@[1040; 1042)
NAME_REF@[1042; 1048)
IDENT@[1042; 1048) "c_void"
COMMA@[1048; 1049)
WHITESPACE@[1049; 1050)
PARAM@[1050; 1063)
BIND_PAT@[1050; 1053)
NAME@[1050; 1053)
IDENT@[1050; 1053) "len"
COLON@[1053; 1054)
WHITESPACE@[1054; 1055)
PATH_TYPE@[1055; 1063)
PATH@[1055; 1063)
PATH_SEGMENT@[1055; 1063)
COLONCOLON@[1055; 1057)
NAME_REF@[1057; 1063)
IDENT@[1057; 1063) "size_t"
COMMA@[1063; 1064)
WHITESPACE@[1064; 1083)
PARAM@[1083; 1097)
BIND_PAT@[1083; 1088)
NAME@[1083; 1088)
IDENT@[1083; 1088) "flags"
COLON@[1088; 1089)
WHITESPACE@[1089; 1090)
PATH_TYPE@[1090; 1097)
PATH@[1090; 1097)
PATH_SEGMENT@[1090; 1097)
COLONCOLON@[1090; 1092)
NAME_REF@[1092; 1097)
IDENT@[1092; 1097) "c_int"
COMMA@[1097; 1098)
WHITESPACE@[1098; 1099)
PARAM@[1099; 1120)
BIND_PAT@[1099; 1103)
NAME@[1099; 1103)
IDENT@[1099; 1103) "addr"
COLON@[1103; 1104)
WHITESPACE@[1104; 1105)
POINTER_TYPE@[1105; 1120)
STAR@[1105; 1106)
CONST_KW@[1106; 1111)
WHITESPACE@[1111; 1112)
PATH_TYPE@[1112; 1120)
PATH@[1112; 1120)
PATH_SEGMENT@[1112; 1120)
NAME_REF@[1112; 1120)
IDENT@[1112; 1120) "sockaddr"
COMMA@[1120; 1121)
WHITESPACE@[1121; 1140)
PARAM@[1140; 1158)
BIND_PAT@[1140; 1147)
NAME@[1140; 1147)
IDENT@[1140; 1147) "addrlen"
COLON@[1147; 1148)
WHITESPACE@[1148; 1149)
PATH_TYPE@[1149; 1158)
PATH@[1149; 1158)
PATH_SEGMENT@[1149; 1158)
NAME_REF@[1149; 1158)
IDENT@[1149; 1158) "socklen_t"
R_PAREN@[1158; 1159)
WHITESPACE@[1159; 1160)
RET_TYPE@[1160; 1172)
THIN_ARROW@[1160; 1162)
WHITESPACE@[1162; 1163)
PATH_TYPE@[1163; 1172)
PATH@[1163; 1172)
PATH_SEGMENT@[1163; 1172)
COLONCOLON@[1163; 1165)
NAME_REF@[1165; 1172)
IDENT@[1165; 1172) "ssize_t"
SEMI@[1172; 1173)
WHITESPACE@[1173; 1178)
FN_DEF@[1178; 1289)
VISIBILITY@[1178; 1181)
PUB_KW@[1178; 1181)
WHITESPACE@[1181; 1182)
FN_KW@[1182; 1184)
WHITESPACE@[1184; 1185)
NAME@[1185; 1189)
IDENT@[1185; 1189) "send"
PARAM_LIST@[1189; 1275)
L_PAREN@[1189; 1190)
PARAM@[1190; 1205)
BIND_PAT@[1190; 1196)
NAME@[1190; 1196)
IDENT@[1190; 1196) "socket"
COLON@[1196; 1197)
WHITESPACE@[1197; 1198)
PATH_TYPE@[1198; 1205)
PATH@[1198; 1205)
PATH_SEGMENT@[1198; 1205)
COLONCOLON@[1198; 1200)
NAME_REF@[1200; 1205)
IDENT@[1200; 1205) "c_int"
COMMA@[1205; 1206)
WHITESPACE@[1206; 1207)
PARAM@[1207; 1227)
BIND_PAT@[1207; 1210)
NAME@[1207; 1210)
IDENT@[1207; 1210) "buf"
COLON@[1210; 1211)
WHITESPACE@[1211; 1212)
POINTER_TYPE@[1212; 1227)
STAR@[1212; 1213)
CONST_KW@[1213; 1218)
WHITESPACE@[1218; 1219)
PATH_TYPE@[1219; 1227)
PATH@[1219; 1227)
PATH_SEGMENT@[1219; 1227)
COLONCOLON@[1219; 1221)
NAME_REF@[1221; 1227)
IDENT@[1221; 1227) "c_void"
COMMA@[1227; 1228)
WHITESPACE@[1228; 1229)
PARAM@[1229; 1242)
BIND_PAT@[1229; 1232)
NAME@[1229; 1232)
IDENT@[1229; 1232) "len"
COLON@[1232; 1233)
WHITESPACE@[1233; 1234)
PATH_TYPE@[1234; 1242)
PATH@[1234; 1242)
PATH_SEGMENT@[1234; 1242)
COLONCOLON@[1234; 1236)
NAME_REF@[1236; 1242)
IDENT@[1236; 1242) "size_t"
COMMA@[1242; 1243)
WHITESPACE@[1243; 1260)
PARAM@[1260; 1274)
BIND_PAT@[1260; 1265)
NAME@[1260; 1265)
IDENT@[1260; 1265) "flags"
COLON@[1265; 1266)
WHITESPACE@[1266; 1267)
PATH_TYPE@[1267; 1274)
PATH@[1267; 1274)
PATH_SEGMENT@[1267; 1274)
COLONCOLON@[1267; 1269)
NAME_REF@[1269; 1274)
IDENT@[1269; 1274) "c_int"
R_PAREN@[1274; 1275)
WHITESPACE@[1275; 1276)
RET_TYPE@[1276; 1288)
THIN_ARROW@[1276; 1278)
WHITESPACE@[1278; 1279)
PATH_TYPE@[1279; 1288)
PATH@[1279; 1288)
PATH_SEGMENT@[1279; 1288)
COLONCOLON@[1279; 1281)
NAME_REF@[1281; 1288)
IDENT@[1281; 1288) "ssize_t"
SEMI@[1288; 1289)
WHITESPACE@[1289; 1294)
FN_DEF@[1294; 1481)
VISIBILITY@[1294; 1297)
PUB_KW@[1294; 1297)
WHITESPACE@[1297; 1298)
FN_KW@[1298; 1300)
WHITESPACE@[1300; 1301)
NAME@[1301; 1309)
IDENT@[1301; 1309) "recvfrom"
PARAM_LIST@[1309; 1467)
L_PAREN@[1309; 1310)
PARAM@[1310; 1325)
BIND_PAT@[1310; 1316)
NAME@[1310; 1316)
IDENT@[1310; 1316) "socket"
COLON@[1316; 1317)
WHITESPACE@[1317; 1318)
PATH_TYPE@[1318; 1325)
PATH@[1318; 1325)
PATH_SEGMENT@[1318; 1325)
COLONCOLON@[1318; 1320)
NAME_REF@[1320; 1325)
IDENT@[1320; 1325) "c_int"
COMMA@[1325; 1326)
WHITESPACE@[1326; 1327)
PARAM@[1327; 1345)
BIND_PAT@[1327; 1330)
NAME@[1327; 1330)
IDENT@[1327; 1330) "buf"
COLON@[1330; 1331)
WHITESPACE@[1331; 1332)
POINTER_TYPE@[1332; 1345)
STAR@[1332; 1333)
MUT_KW@[1333; 1336)
WHITESPACE@[1336; 1337)
PATH_TYPE@[1337; 1345)
PATH@[1337; 1345)
PATH_SEGMENT@[1337; 1345)
COLONCOLON@[1337; 1339)
NAME_REF@[1339; 1345)
IDENT@[1339; 1345) "c_void"
COMMA@[1345; 1346)
WHITESPACE@[1346; 1347)
PARAM@[1347; 1360)
BIND_PAT@[1347; 1350)
NAME@[1347; 1350)
IDENT@[1347; 1350) "len"
COLON@[1350; 1351)
WHITESPACE@[1351; 1352)
PATH_TYPE@[1352; 1360)
PATH@[1352; 1360)
PATH_SEGMENT@[1352; 1360)
COLONCOLON@[1352; 1354)
NAME_REF@[1354; 1360)
IDENT@[1354; 1360) "size_t"
COMMA@[1360; 1361)
WHITESPACE@[1361; 1382)
PARAM@[1382; 1396)
BIND_PAT@[1382; 1387)
NAME@[1382; 1387)
IDENT@[1382; 1387) "flags"
COLON@[1387; 1388)
WHITESPACE@[1388; 1389)
PATH_TYPE@[1389; 1396)
PATH@[1389; 1396)
PATH_SEGMENT@[1389; 1396)
COLONCOLON@[1389; 1391)
NAME_REF@[1391; 1396)
IDENT@[1391; 1396) "c_int"
COMMA@[1396; 1397)
WHITESPACE@[1397; 1398)
PARAM@[1398; 1419)
BIND_PAT@[1398; 1402)
NAME@[1398; 1402)
IDENT@[1398; 1402) "addr"
COLON@[1402; 1403)
WHITESPACE@[1403; 1404)
POINTER_TYPE@[1404; 1419)
STAR@[1404; 1405)
MUT_KW@[1405; 1408)
WHITESPACE@[1408; 1409)
PATH_TYPE@[1409; 1419)
PATH@[1409; 1419)
PATH_SEGMENT@[1409; 1419)
COLONCOLON@[1409; 1411)
NAME_REF@[1411; 1419)
IDENT@[1411; 1419) "sockaddr"
COMMA@[1419; 1420)
WHITESPACE@[1420; 1441)
PARAM@[1441; 1466)
BIND_PAT@[1441; 1448)
NAME@[1441; 1448)
IDENT@[1441; 1448) "addrlen"
COLON@[1448; 1449)
WHITESPACE@[1449; 1450)
POINTER_TYPE@[1450; 1466)
STAR@[1450; 1451)
MUT_KW@[1451; 1454)
WHITESPACE@[1454; 1455)
PATH_TYPE@[1455; 1466)
PATH@[1455; 1466)
PATH_SEGMENT@[1455; 1466)
COLONCOLON@[1455; 1457)
NAME_REF@[1457; 1466)
IDENT@[1457; 1466) "socklen_t"
R_PAREN@[1466; 1467)
WHITESPACE@[1467; 1468)
RET_TYPE@[1468; 1480)
THIN_ARROW@[1468; 1470)
WHITESPACE@[1470; 1471)
PATH_TYPE@[1471; 1480)
PATH@[1471; 1480)
PATH_SEGMENT@[1471; 1480)
COLONCOLON@[1471; 1473)
NAME_REF@[1473; 1480)
IDENT@[1473; 1480) "ssize_t"
SEMI@[1480; 1481)
WHITESPACE@[1481; 1486)
FN_DEF@[1486; 1595)
VISIBILITY@[1486; 1489)
PUB_KW@[1486; 1489)
WHITESPACE@[1489; 1490)
FN_KW@[1490; 1492)
WHITESPACE@[1492; 1493)
NAME@[1493; 1497)
IDENT@[1493; 1497) "recv"
PARAM_LIST@[1497; 1581)
L_PAREN@[1497; 1498)
PARAM@[1498; 1513)
BIND_PAT@[1498; 1504)
NAME@[1498; 1504)
IDENT@[1498; 1504) "socket"
COLON@[1504; 1505)
WHITESPACE@[1505; 1506)
PATH_TYPE@[1506; 1513)
PATH@[1506; 1513)
PATH_SEGMENT@[1506; 1513)
COLONCOLON@[1506; 1508)
NAME_REF@[1508; 1513)
IDENT@[1508; 1513) "c_int"
COMMA@[1513; 1514)
WHITESPACE@[1514; 1515)
PARAM@[1515; 1533)
BIND_PAT@[1515; 1518)
NAME@[1515; 1518)
IDENT@[1515; 1518) "buf"
COLON@[1518; 1519)
WHITESPACE@[1519; 1520)
POINTER_TYPE@[1520; 1533)
STAR@[1520; 1521)
MUT_KW@[1521; 1524)
WHITESPACE@[1524; 1525)
PATH_TYPE@[1525; 1533)
PATH@[1525; 1533)
PATH_SEGMENT@[1525; 1533)
COLONCOLON@[1525; 1527)
NAME_REF@[1527; 1533)
IDENT@[1527; 1533) "c_void"
COMMA@[1533; 1534)
WHITESPACE@[1534; 1535)
PARAM@[1535; 1548)
BIND_PAT@[1535; 1538)
NAME@[1535; 1538)
IDENT@[1535; 1538) "len"
COLON@[1538; 1539)
WHITESPACE@[1539; 1540)
PATH_TYPE@[1540; 1548)
PATH@[1540; 1548)
PATH_SEGMENT@[1540; 1548)
COLONCOLON@[1540; 1542)
NAME_REF@[1542; 1548)
IDENT@[1542; 1548) "size_t"
COMMA@[1548; 1549)
WHITESPACE@[1549; 1566)
PARAM@[1566; 1580)
BIND_PAT@[1566; 1571)
NAME@[1566; 1571)
IDENT@[1566; 1571) "flags"
COLON@[1571; 1572)
WHITESPACE@[1572; 1573)
PATH_TYPE@[1573; 1580)
PATH@[1573; 1580)
PATH_SEGMENT@[1573; 1580)
COLONCOLON@[1573; 1575)
NAME_REF@[1575; 1580)
IDENT@[1575; 1580) "c_int"
R_PAREN@[1580; 1581)
WHITESPACE@[1581; 1582)
RET_TYPE@[1582; 1594)
THIN_ARROW@[1582; 1584)
WHITESPACE@[1584; 1585)
PATH_TYPE@[1585; 1594)
PATH@[1585; 1594)
PATH_SEGMENT@[1585; 1594)
COLONCOLON@[1585; 1587)
NAME_REF@[1587; 1594)
IDENT@[1587; 1594) "ssize_t"
SEMI@[1594; 1595)
WHITESPACE@[1595; 1596)
R_CURLY@[1596; 1597)
WHITESPACE@[1597; 1598)

View file

@ -26,7 +26,6 @@ fn lexer_tests() {
#[test] #[test]
fn parser_tests() { fn parser_tests() {
dir_tests(&["parser/inline", "parser/ok", "parser/err"], |text| { dir_tests(&["parser/inline", "parser/ok", "parser/err"], |text| {
eprintln!("\n{}\n", text);
let file = File::parse(text); let file = File::parse(text);
dump_tree(file.syntax()) dump_tree(file.syntax())
}) })

View file

@ -126,7 +126,6 @@ fn main_loop_inner(
} }
recv(libdata_receiver, data) => Event::Lib(data.unwrap()) recv(libdata_receiver, data) => Event::Lib(data.unwrap())
}; };
trace!("selected {:?}", event);
let mut state_changed = false; let mut state_changed = false;
match event { match event {
Event::Task(task) => on_task(task, msg_sender, pending_requests), Event::Task(task) => on_task(task, msg_sender, pending_requests),
@ -163,6 +162,7 @@ fn main_loop_inner(
} }
} }
Event::Lib(lib) => { Event::Lib(lib) => {
feedback(internal_mode, "library loaded", msg_sender);
state.add_lib(lib); state.add_lib(lib);
} }
Event::Msg(msg) => { Event::Msg(msg) => {

View file

@ -14,6 +14,7 @@ use m::req::{Runnables, RunnablesParams};
use support::project; use support::project;
const LOG: &'static str = ""; const LOG: &'static str = "";
#[test] #[test]
@ -79,3 +80,20 @@ fn test_eggs() {}
]"# ]"#
); );
} }
// #[test]
// fn test_deps() {
// let server = project(r#"
// //- Cargo.toml
// [package]
// name = "foo"
// version = "0.0.0"
// [dependencies]
// regex = "=1.0.4"
// //- src/lib.rs
// extern crate regex;
// "#);
// server.wait_for_feedback("workspace loaded");
// server.wait_for_feedback_n("library loaded", 1);
// }

View file

@ -155,6 +155,9 @@ impl Server {
panic!("no response"); panic!("no response");
} }
pub fn wait_for_feedback(&self, feedback: &str) { pub fn wait_for_feedback(&self, feedback: &str) {
self.wait_for_feedback_n(feedback, 1)
}
pub fn wait_for_feedback_n(&self, feedback: &str, n: usize) {
let f = |msg: &RawMessage| match msg { let f = |msg: &RawMessage| match msg {
RawMessage::Notification(n) if n.method == "internalFeedback" => { RawMessage::Notification(n) if n.method == "internalFeedback" => {
return n.clone().cast::<req::InternalFeedback>() return n.clone().cast::<req::InternalFeedback>()
@ -162,18 +165,18 @@ impl Server {
} }
_ => false, _ => false,
}; };
let mut total = 0;
for msg in self.messages.borrow().iter() { for msg in self.messages.borrow().iter() {
if f(msg) { if f(msg) {
return; total += 1
} }
} }
while let Some(msg) = self.recv() { while total < n {
let msg = self.recv().expect("no response");
if f(&msg) { if f(&msg) {
return; total += 1;
} }
} }
panic!("no response")
} }
fn recv(&self) -> Option<RawMessage> { fn recv(&self) -> Option<RawMessage> {
let timeout = Duration::from_secs(5); let timeout = Duration::from_secs(5);