WIP on issue 1426 (exporting all tags)
Support Lenny222's proposed syntax for exporting a tag without its variants, or selected tags from a variant, in the AST and parser. No support further down the line yet. Tests are xfailed.
This commit is contained in:
parent
ae4c139144
commit
ba5cc236f7
@ -439,6 +439,10 @@ enum view_item_ {
|
||||
view_item_import_glob(@simple_path, node_id),
|
||||
view_item_import_from(@simple_path, [import_ident], node_id),
|
||||
view_item_export([ident], node_id),
|
||||
// export foo::{}
|
||||
view_item_export_tag_none(ident, node_id),
|
||||
// export foo::{bar, baz, blat}
|
||||
view_item_export_tag_some(ident, [ident], node_id)
|
||||
}
|
||||
|
||||
// Meta-data associated with an item
|
||||
|
@ -2391,11 +2391,35 @@ fn parse_import(p: parser) -> ast::view_item_ {
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_tag_export(p:parser, tyname:ast::ident) -> ast::view_item_ {
|
||||
let tagnames:[ast::ident] =
|
||||
parse_seq(token::LBRACE, token::RBRACE,
|
||||
seq_sep(token::COMMA), {|p| parse_ident(p) }, p).node;
|
||||
let id = p.get_id();
|
||||
if vec::is_empty(tagnames) {
|
||||
ret ast::view_item_export_tag_none(tyname, id);
|
||||
}
|
||||
else {
|
||||
ret ast::view_item_export_tag_some(tyname, tagnames, id);
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_export(p: parser) -> ast::view_item_ {
|
||||
let ids =
|
||||
parse_seq_to_before_end(token::SEMI, seq_sep(token::COMMA),
|
||||
parse_ident, p);
|
||||
ret ast::view_item_export(ids, p.get_id());
|
||||
let first = parse_ident(p);
|
||||
alt p.token {
|
||||
token::COLON {
|
||||
p.bump();
|
||||
expect(p, token::COLON);
|
||||
ret parse_tag_export(p, first);
|
||||
}
|
||||
t {
|
||||
if t == token::COMMA { p.bump(); }
|
||||
let ids =
|
||||
parse_seq_to_before_end(token::SEMI, seq_sep(token::COMMA),
|
||||
parse_ident, p);
|
||||
ret ast::view_item_export(vec::concat([[first], ids]), p.get_id());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_view_item(p: parser) -> @ast::view_item {
|
||||
|
18
src/test/compile-fail/tag-exports-2.rs
Normal file
18
src/test/compile-fail/tag-exports-2.rs
Normal file
@ -0,0 +1,18 @@
|
||||
// xfail-test
|
||||
mod alder {
|
||||
export burnside;
|
||||
export everett::{flanders};
|
||||
export irving::{johnson, kearney};
|
||||
export marshall::{};
|
||||
|
||||
tag burnside { couch, davis }
|
||||
tag everett { flanders, glisan, hoyt }
|
||||
tag irving { johnson, kearney, lovejoy }
|
||||
tag marshall { northrup, overton }
|
||||
}
|
||||
|
||||
import alder::*;
|
||||
|
||||
fn main() {
|
||||
let raleigh: irving = lovejoy;
|
||||
}
|
19
src/test/compile-fail/tag-exports-3.rs
Normal file
19
src/test/compile-fail/tag-exports-3.rs
Normal file
@ -0,0 +1,19 @@
|
||||
// xfail-test
|
||||
mod alder {
|
||||
export burnside;
|
||||
export everett::{flanders};
|
||||
export irving::{johnson, kearney};
|
||||
export marshall::{};
|
||||
|
||||
tag burnside { couch, davis }
|
||||
tag everett { flanders, glisan, hoyt }
|
||||
tag irving { johnson, kearney, lovejoy }
|
||||
tag marshall { northrup, overton }
|
||||
}
|
||||
|
||||
import alder::*;
|
||||
|
||||
fn main() {
|
||||
let savier: marshall = northrup;
|
||||
|
||||
}
|
18
src/test/compile-fail/tag-exports.rs
Normal file
18
src/test/compile-fail/tag-exports.rs
Normal file
@ -0,0 +1,18 @@
|
||||
// xfail-test
|
||||
mod alder {
|
||||
export burnside;
|
||||
export everett::{flanders};
|
||||
export irving::{johnson, kearney};
|
||||
export marshall::{};
|
||||
|
||||
tag burnside { couch, davis }
|
||||
tag everett { flanders, glisan, hoyt }
|
||||
tag irving { johnson, kearney, lovejoy }
|
||||
tag marshall { northrup, overton }
|
||||
}
|
||||
|
||||
import alder::*;
|
||||
|
||||
fn main() {
|
||||
let quimby: everett = glisan;
|
||||
}
|
21
src/test/run-pass/tag-exports.rs
Normal file
21
src/test/run-pass/tag-exports.rs
Normal file
@ -0,0 +1,21 @@
|
||||
// xfail-test
|
||||
mod alder {
|
||||
export burnside;
|
||||
export everett::{flanders};
|
||||
export irving::{johnson, kearney};
|
||||
export marshall::{};
|
||||
|
||||
tag burnside { couch, davis }
|
||||
tag everett { flanders, glisan, hoyt }
|
||||
tag irving { johnson, kearney, lovejoy }
|
||||
tag marshall { northrup, overton }
|
||||
}
|
||||
|
||||
import alder::*;
|
||||
|
||||
fn main() {
|
||||
let pettygrove: burnside = couch;
|
||||
let quimby: everett = flanders;
|
||||
let raleigh: irving = johnson;
|
||||
let savier: marshall;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user