parent
62939e41b2
commit
ffae642663
3 changed files with 19 additions and 6 deletions
|
@ -10,7 +10,7 @@ import ast::ident;
|
||||||
import front::parser::parser;
|
import front::parser::parser;
|
||||||
import front::parser::spanned;
|
import front::parser::spanned;
|
||||||
import front::parser::new_parser;
|
import front::parser::new_parser;
|
||||||
import front::parser::parse_inner_attributes;
|
import front::parser::parse_inner_attrs_and_next;
|
||||||
import front::parser::parse_mod_items;
|
import front::parser::parse_mod_items;
|
||||||
import util::common;
|
import util::common;
|
||||||
import util::common::filename;
|
import util::common::filename;
|
||||||
|
@ -288,7 +288,7 @@ fn eval_crate_directive(ctx cx, env e, @ast::crate_directive cdir, str prefix,
|
||||||
auto p0 =
|
auto p0 =
|
||||||
new_parser(cx.sess, e, start_id, full_path, cx.chpos,
|
new_parser(cx.sess, e, start_id, full_path, cx.chpos,
|
||||||
cx.next_ann);
|
cx.next_ann);
|
||||||
auto inner_attrs = parse_inner_attributes(p0);
|
auto inner_attrs = parse_inner_attrs_and_next(p0);
|
||||||
auto first_item_outer_attrs = inner_attrs._1;
|
auto first_item_outer_attrs = inner_attrs._1;
|
||||||
auto m0 = parse_mod_items(p0, token::EOF,
|
auto m0 = parse_mod_items(p0, token::EOF,
|
||||||
first_item_outer_attrs);
|
first_item_outer_attrs);
|
||||||
|
|
|
@ -1838,7 +1838,7 @@ fn parse_item_mod(&parser p, vec[ast::attribute] attrs) -> @ast::item {
|
||||||
auto lo = p.get_last_lo_pos();
|
auto lo = p.get_last_lo_pos();
|
||||||
auto id = parse_ident(p);
|
auto id = parse_ident(p);
|
||||||
expect(p, token::LBRACE);
|
expect(p, token::LBRACE);
|
||||||
auto inner_attrs = parse_inner_attributes(p);
|
auto inner_attrs = parse_inner_attrs_and_next(p);
|
||||||
auto first_item_outer_attrs = inner_attrs._1;
|
auto first_item_outer_attrs = inner_attrs._1;
|
||||||
auto m = parse_mod_items(p, token::RBRACE,
|
auto m = parse_mod_items(p, token::RBRACE,
|
||||||
first_item_outer_attrs);
|
first_item_outer_attrs);
|
||||||
|
@ -2095,7 +2095,7 @@ fn parse_attribute_naked(&parser p, ast::attr_style style,
|
||||||
// next item (since we can't know whether the attribute is an inner attribute
|
// next item (since we can't know whether the attribute is an inner attribute
|
||||||
// of the containing item or an outer attribute of the first contained item
|
// of the containing item or an outer attribute of the first contained item
|
||||||
// until we see the semi).
|
// until we see the semi).
|
||||||
fn parse_inner_attributes(&parser p) -> tup(vec[ast::attribute],
|
fn parse_inner_attrs_and_next(&parser p) -> tup(vec[ast::attribute],
|
||||||
vec[ast::attribute]) {
|
vec[ast::attribute]) {
|
||||||
let vec[ast::attribute] inner_attrs = [];
|
let vec[ast::attribute] inner_attrs = [];
|
||||||
let vec[ast::attribute] next_outer_attrs = [];
|
let vec[ast::attribute] next_outer_attrs = [];
|
||||||
|
@ -2117,6 +2117,14 @@ fn parse_inner_attributes(&parser p) -> tup(vec[ast::attribute],
|
||||||
ret tup(inner_attrs, next_outer_attrs);
|
ret tup(inner_attrs, next_outer_attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn parse_inner_attrs(&parser p) -> vec[ast::attribute] {
|
||||||
|
auto attrs_and_next = parse_inner_attrs_and_next(p);
|
||||||
|
if (vec::len(attrs_and_next._1) > 0u) {
|
||||||
|
// FIXME: Don't drop this dangling attr on the ground
|
||||||
|
}
|
||||||
|
ret attrs_and_next._0;
|
||||||
|
}
|
||||||
|
|
||||||
fn parse_meta_item(&parser p) -> @ast::meta_item {
|
fn parse_meta_item(&parser p) -> @ast::meta_item {
|
||||||
auto lo = p.get_lo_pos();
|
auto lo = p.get_lo_pos();
|
||||||
auto ident = parse_ident(p);
|
auto ident = parse_ident(p);
|
||||||
|
@ -2369,6 +2377,8 @@ fn parse_crate_directives(&parser p, token::token term) ->
|
||||||
fn parse_crate_from_crate_file(&parser p) -> @ast::crate {
|
fn parse_crate_from_crate_file(&parser p) -> @ast::crate {
|
||||||
auto lo = p.get_lo_pos();
|
auto lo = p.get_lo_pos();
|
||||||
auto prefix = std::fs::dirname(p.get_filemap().name);
|
auto prefix = std::fs::dirname(p.get_filemap().name);
|
||||||
|
// FIXME (issue #487): Do something with these attrs
|
||||||
|
auto attrs = parse_inner_attrs(p);
|
||||||
auto cdirs = parse_crate_directives(p, token::EOF);
|
auto cdirs = parse_crate_directives(p, token::EOF);
|
||||||
let vec[str] deps = [];
|
let vec[str] deps = [];
|
||||||
auto cx =
|
auto cx =
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
#[name = "crate-attributes"];
|
||||||
|
#[vers = "1.0"];
|
||||||
|
|
||||||
mod m = "crate-attributes-src" {
|
mod m = "crate-attributes-src" {
|
||||||
mod foo;
|
mod foo;
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue