diff options
| author | Tim Chevalier <chevalier@alum.wellesley.edu> | 2012-01-20 19:44:38 -0800 |
|---|---|---|
| committer | Tim Chevalier <chevalier@alum.wellesley.edu> | 2012-01-20 19:48:33 -0800 |
| commit | ba5cc236f7596148ad560b0bb651d82d15f0fc7f (patch) | |
| tree | 6fc876ee1034498409e53e3a5d5534b2bc1e60ca /src/comp/syntax/parse | |
| parent | ae4c139144d45bedb985afa093dee57d91fdb0ef (diff) | |
| download | rust-ba5cc236f7596148ad560b0bb651d82d15f0fc7f.tar.gz rust-ba5cc236f7596148ad560b0bb651d82d15f0fc7f.zip | |
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.
Diffstat (limited to 'src/comp/syntax/parse')
| -rw-r--r-- | src/comp/syntax/parse/parser.rs | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/comp/syntax/parse/parser.rs b/src/comp/syntax/parse/parser.rs index 46b6c474363..d020c46c6a0 100644 --- a/src/comp/syntax/parse/parser.rs +++ b/src/comp/syntax/parse/parser.rs @@ -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 { |
