Skip to content

Commit b619954

Browse files
committed
Start parsing pub/priv on regular items
Issue #1893
1 parent df3bf7c commit b619954

File tree

15 files changed

+100
-77
lines changed

15 files changed

+100
-77
lines changed

Diff for: src/librustsyntax/ast.rs

+8-7
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,7 @@ enum ret_style {
557557
type method = {ident: ident, attrs: [attribute],
558558
tps: [ty_param], decl: fn_decl, body: blk,
559559
id: node_id, span: span, self_id: node_id,
560-
privacy: privacy}; // privacy is always public, unless it's a
560+
vis: visibility}; // always public, unless it's a
561561
// class method
562562

563563
#[auto_serialize]
@@ -580,7 +580,7 @@ type variant_arg = {ty: @ty, id: node_id};
580580

581581
#[auto_serialize]
582582
type variant_ = {name: ident, attrs: [attribute], args: [variant_arg],
583-
id: node_id, disr_expr: option<@expr>};
583+
id: node_id, disr_expr: option<@expr>, vis: visibility};
584584

585585
#[auto_serialize]
586586
type variant = spanned<variant_>;
@@ -641,9 +641,13 @@ type attribute_ = {style: attr_style, value: meta_item};
641641
#[auto_serialize]
642642
type iface_ref = {path: @path, id: node_id};
643643

644+
#[auto_serialize]
645+
enum visibility { public, private }
646+
644647
#[auto_serialize]
645648
type item = {ident: ident, attrs: [attribute],
646-
id: node_id, node: item_, span: span};
649+
id: node_id, node: item_,
650+
vis: visibility, span: span};
647651

648652
#[auto_serialize]
649653
enum region_param {
@@ -679,16 +683,13 @@ type class_member = spanned<class_member_>;
679683

680684
#[auto_serialize]
681685
enum class_member_ {
682-
instance_var(ident, @ty, class_mutability, node_id, privacy),
686+
instance_var(ident, @ty, class_mutability, node_id, visibility),
683687
class_method(@method)
684688
}
685689

686690
#[auto_serialize]
687691
enum class_mutability { class_mutable, class_immutable }
688692

689-
#[auto_serialize]
690-
enum privacy { priv, pub }
691-
692693
#[auto_serialize]
693694
type class_ctor = spanned<class_ctor_>;
694695

Diff for: src/librustsyntax/ast_util.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -276,31 +276,31 @@ pure fn class_item_ident(ci: @class_member) -> ident {
276276
}
277277

278278
type ivar = {ident: ident, ty: @ty, cm: class_mutability,
279-
id: node_id, privacy: privacy};
279+
id: node_id, vis: visibility};
280280

281281
fn public_methods(ms: [@method]) -> [@method] {
282-
vec::filter(ms, {|m| alt m.privacy {
283-
pub { true }
282+
vec::filter(ms, {|m| alt m.vis {
283+
public { true }
284284
_ { false }}})
285285
}
286286

287287
fn split_class_items(cs: [@class_member]) -> ([ivar], [@method]) {
288288
let mut vs = [], ms = [];
289289
for cs.each {|c|
290290
alt c.node {
291-
instance_var(i, t, cm, id, privacy) {
292-
vs += [{ident: i, ty: t, cm: cm, id: id, privacy: privacy}];
291+
instance_var(i, t, cm, id, vis) {
292+
vs += [{ident: i, ty: t, cm: cm, id: id, vis: vis}];
293293
}
294294
class_method(m) { ms += [m]; }
295295
}
296296
};
297297
(vs, ms)
298298
}
299299

300-
pure fn class_member_privacy(ci: @class_member) -> privacy {
300+
pure fn class_member_visibility(ci: @class_member) -> visibility {
301301
alt ci.node {
302-
instance_var(_, _, _, _, p) { p }
303-
class_method(m) { m.privacy }
302+
instance_var(_, _, _, _, vis) { vis }
303+
class_method(m) { m.vis }
304304
}
305305
}
306306

Diff for: src/librustsyntax/ext/auto_serialize.rs

+2
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,7 @@ fn mk_ser_fn(cx: ext_ctxt, span: span, name: str, tps: [ast::ty_param],
546546
constraints: []},
547547
ser_tps,
548548
ser_blk),
549+
vis: ast::public,
549550
span: span}
550551
}
551552

@@ -744,6 +745,7 @@ fn mk_deser_fn(cx: ext_ctxt, span: span, name: str, tps: [ast::ty_param],
744745
constraints: []},
745746
deser_tps,
746747
deser_blk),
748+
vis: ast::public,
747749
span: span}
748750
}
749751

Diff for: src/librustsyntax/ext/qquote.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ fn parse_stmt(p: parser) -> @ast::stmt {
173173
}
174174

175175
fn parse_item(p: parser) -> @ast::item {
176-
alt (parser::parse_item(p, [])) {
176+
alt parser::parse_item(p, [], ast::public) {
177177
some(item) { item }
178178
none { fail "parse_item: parsing an item failed"; }
179179
}

Diff for: src/librustsyntax/fold.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,7 @@ fn noop_fold_item(&&i: @item, fld: ast_fold) -> @item {
241241
attrs: vec::map(i.attrs, fold_attribute),
242242
id: fld.new_id(i.id),
243243
node: fld.fold_item_underscore(i.node),
244+
vis: i.vis,
244245
span: fld.new_span(i.span)};
245246
}
246247

@@ -323,7 +324,7 @@ fn noop_fold_method(&&m: @method, fld: ast_fold) -> @method {
323324
id: fld.new_id(m.id),
324325
span: fld.new_span(m.span),
325326
self_id: fld.new_id(m.self_id),
326-
privacy: m.privacy};
327+
vis: m.vis};
327328
}
328329

329330

@@ -564,7 +565,8 @@ fn noop_fold_variant(v: variant_, fld: ast_fold) -> variant_ {
564565
ret {name: v.name,
565566
attrs: attrs,
566567
args: args, id: fld.new_id(v.id),
567-
disr_expr: de};
568+
disr_expr: de,
569+
vis: v.vis};
568570
}
569571

570572
fn noop_fold_ident(&&i: ident, _fld: ast_fold) -> ident { ret i; }

Diff for: src/librustsyntax/parse/eval.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ fn eval_crate_directive(cx: ctx, cdir: @ast::crate_directive, prefix: str,
107107

108108
let i =
109109
parser::mk_item(p0, cdir.span.lo, cdir.span.hi, id,
110-
ast::item_mod(m0), mod_attrs);
110+
ast::item_mod(m0), ast::public, mod_attrs);
111111
// Thread defids, chpos and byte_pos through the parsers
112112
cx.sess.chpos = p0.reader.chpos;
113113
cx.sess.byte_pos = cx.sess.byte_pos + p0.reader.pos;
@@ -126,6 +126,7 @@ fn eval_crate_directive(cx: ctx, cdir: @ast::crate_directive, prefix: str,
126126
attrs: attrs + a0,
127127
id: cx.sess.next_id,
128128
node: ast::item_mod(m0),
129+
vis: ast::public,
129130
span: cdir.span};
130131
cx.sess.next_id += 1;
131132
items += [i];

Diff for: src/librustsyntax/parse/parser.rs

+34-21
Original file line numberDiff line numberDiff line change
@@ -1485,7 +1485,7 @@ fn parse_let(p: parser) -> @ast::decl {
14851485
}
14861486

14871487
/* assumes "let" token has already been consumed */
1488-
fn parse_instance_var(p:parser, pr: ast::privacy) -> @ast::class_member {
1488+
fn parse_instance_var(p:parser, pr: ast::visibility) -> @ast::class_member {
14891489
let mut is_mutbl = ast::class_immutable;
14901490
let lo = p.span.lo;
14911491
if eat_keyword(p, "mut") {
@@ -1527,7 +1527,7 @@ fn parse_stmt(p: parser, +first_item_attrs: [ast::attribute]) -> @ast::stmt {
15271527

15281528
let item_attrs = first_item_attrs + item_attrs;
15291529

1530-
alt parse_item(p, item_attrs) {
1530+
alt parse_item(p, item_attrs, ast::public) {
15311531
some(i) {
15321532
let mut hi = i.span.hi;
15331533
let decl = @spanned(lo, hi, ast::decl_item(i));
@@ -1789,11 +1789,13 @@ fn parse_fn_header(p: parser) -> {ident: ast::ident, tps: [ast::ty_param]} {
17891789
}
17901790

17911791
fn mk_item(p: parser, lo: uint, hi: uint, +ident: ast::ident,
1792-
+node: ast::item_, +attrs: [ast::attribute]) -> @ast::item {
1792+
+node: ast::item_, vis: ast::visibility,
1793+
+attrs: [ast::attribute]) -> @ast::item {
17931794
ret @{ident: ident,
17941795
attrs: attrs,
17951796
id: p.get_id(),
17961797
node: node,
1798+
vis: vis,
17971799
span: mk_sp(lo, hi)};
17981800
}
17991801

@@ -1819,7 +1821,7 @@ fn parse_method_name(p: parser) -> ast::ident {
18191821
}
18201822
}
18211823

1822-
fn parse_method(p: parser, pr: ast::privacy) -> @ast::method {
1824+
fn parse_method(p: parser, pr: ast::visibility) -> @ast::method {
18231825
let attrs = parse_outer_attributes(p);
18241826
let lo = p.span.lo, pur = parse_fn_purity(p);
18251827
let ident = parse_method_name(p);
@@ -1829,7 +1831,7 @@ fn parse_method(p: parser, pr: ast::privacy) -> @ast::method {
18291831
let attrs = attrs + inner_attrs;
18301832
@{ident: ident, attrs: attrs, tps: tps, decl: decl, body: body,
18311833
id: p.get_id(), span: mk_sp(lo, body.span.hi),
1832-
self_id: p.get_id(), privacy: pr}
1834+
self_id: p.get_id(), vis: pr}
18331835
}
18341836

18351837
fn parse_item_iface(p: parser) -> item_info {
@@ -1877,7 +1879,7 @@ fn parse_item_impl(p: parser) -> item_info {
18771879
let ty = parse_ty(p, false);
18781880
let mut meths = [];
18791881
expect(p, token::LBRACE);
1880-
while !eat(p, token::RBRACE) { meths += [parse_method(p, ast::pub)]; }
1882+
while !eat(p, token::RBRACE) { meths += [parse_method(p, ast::public)]; }
18811883
(ident, ast::item_impl(tps, rp, ifce, ty, meths), none)
18821884
}
18831885

@@ -1978,15 +1980,15 @@ fn parse_item_class(p: parser) -> item_info {
19781980
}
19791981
}
19801982

1981-
fn parse_single_class_item(p: parser, privcy: ast::privacy)
1983+
fn parse_single_class_item(p: parser, vis: ast::visibility)
19821984
-> @ast::class_member {
19831985
if eat_keyword(p, "let") {
1984-
let a_var = parse_instance_var(p, privcy);
1986+
let a_var = parse_instance_var(p, vis);
19851987
expect(p, token::SEMI);
19861988
ret a_var;
19871989
}
19881990
else {
1989-
let m = parse_method(p, privcy);
1991+
let m = parse_method(p, vis);
19901992
ret @{node: ast::class_method(m), span: m.span};
19911993
}
19921994
}
@@ -2014,17 +2016,23 @@ fn parse_class_item(p:parser, class_name_with_tps: @ast::path)
20142016
expect(p, token::LBRACE);
20152017
let mut results = [];
20162018
while p.token != token::RBRACE {
2017-
results += [parse_single_class_item(p, ast::priv)];
2019+
results += [parse_single_class_item(p, ast::private)];
20182020
}
20192021
p.bump();
20202022
ret members(results);
20212023
}
20222024
else {
20232025
// Probably need to parse attrs
2024-
ret members([parse_single_class_item(p, ast::pub)]);
2026+
ret members([parse_single_class_item(p, ast::public)]);
20252027
}
20262028
}
20272029

2030+
fn parse_visibility(p: parser, def: ast::visibility) -> ast::visibility {
2031+
if eat_keyword(p, "pub") { ast::public }
2032+
else if eat_keyword(p, "priv") { ast::private }
2033+
else { def }
2034+
}
2035+
20282036
fn parse_mod_items(p: parser, term: token::token,
20292037
+first_item_attrs: [ast::attribute]) -> ast::_mod {
20302038
// Shouldn't be any view items since we've already parsed an item attr
@@ -2035,7 +2043,8 @@ fn parse_mod_items(p: parser, term: token::token,
20352043
let mut attrs = parse_outer_attributes(p);
20362044
if first { attrs = first_item_attrs + attrs; first = false; }
20372045
#debug["parse_mod_items: parse_item(attrs=%?)", attrs];
2038-
alt parse_item(p, attrs) {
2046+
let vis = parse_visibility(p, ast::private);
2047+
alt parse_item(p, attrs, vis) {
20392048
some(i) { items += [i]; }
20402049
_ {
20412050
p.fatal("expected item but found '" +
@@ -2154,7 +2163,7 @@ fn parse_region_param(p: parser) -> ast::region_param {
21542163
}
21552164
}
21562165

2157-
fn parse_item_enum(p: parser) -> item_info {
2166+
fn parse_item_enum(p: parser, default_vis: ast::visibility) -> item_info {
21582167
let id = parse_ident(p);
21592168
let rp = parse_region_param(p);
21602169
let ty_params = parse_ty_params(p);
@@ -2171,7 +2180,8 @@ fn parse_item_enum(p: parser) -> item_info {
21712180
attrs: [],
21722181
args: [{ty: ty, id: p.get_id()}],
21732182
id: p.get_id(),
2174-
disr_expr: none});
2183+
disr_expr: none,
2184+
vis: ast::public});
21752185
ret (id, ast::item_enum([variant], ty_params, rp), none);
21762186
}
21772187
expect(p, token::LBRACE);
@@ -2181,6 +2191,7 @@ fn parse_item_enum(p: parser) -> item_info {
21812191
while p.token != token::RBRACE {
21822192
let variant_attrs = parse_outer_attributes(p);
21832193
let vlo = p.span.lo;
2194+
let vis = parse_visibility(p, default_vis);
21842195
let ident = parse_value_ident(p);
21852196
let mut args = [], disr_expr = none;
21862197
if p.token == token::LPAREN {
@@ -2198,7 +2209,7 @@ fn parse_item_enum(p: parser) -> item_info {
21982209

21992210
let vr = {name: ident, attrs: variant_attrs,
22002211
args: args, id: p.get_id(),
2201-
disr_expr: disr_expr};
2212+
disr_expr: disr_expr, vis: vis};
22022213
variants += [spanned(vlo, p.last_span.hi, vr)];
22032214

22042215
if !eat(p, token::COMMA) { break; }
@@ -2241,7 +2252,8 @@ fn fn_expr_lookahead(tok: token::token) -> bool {
22412252
}
22422253
}
22432254

2244-
fn parse_item(p: parser, +attrs: [ast::attribute]) -> option<@ast::item> {
2255+
fn parse_item(p: parser, +attrs: [ast::attribute], vis: ast::visibility)
2256+
-> option<@ast::item> {
22452257
let lo = p.span.lo;
22462258
let (ident, item_, extra_attrs) = if eat_keyword(p, "const") {
22472259
parse_item_const(p)
@@ -2265,7 +2277,7 @@ fn parse_item(p: parser, +attrs: [ast::attribute]) -> option<@ast::item> {
22652277
} else if eat_keyword(p, "type") {
22662278
parse_item_type(p)
22672279
} else if eat_keyword(p, "enum") {
2268-
parse_item_enum(p)
2280+
parse_item_enum(p, vis)
22692281
} else if eat_keyword(p, "iface") {
22702282
parse_item_iface(p)
22712283
} else if eat_keyword(p, "impl") {
@@ -2275,10 +2287,11 @@ fn parse_item(p: parser, +attrs: [ast::attribute]) -> option<@ast::item> {
22752287
} else if eat_keyword(p, "class") {
22762288
parse_item_class(p)
22772289
} else { ret none; };
2278-
some(mk_item(p, lo, p.last_span.hi, ident, item_, alt extra_attrs {
2279-
some(as) { attrs + as }
2280-
none { attrs }
2281-
}))
2290+
some(mk_item(p, lo, p.last_span.hi, ident, item_, vis,
2291+
alt extra_attrs {
2292+
some(as) { attrs + as }
2293+
none { attrs }
2294+
}))
22822295
}
22832296

22842297
fn parse_use(p: parser) -> ast::view_item_ {

Diff for: src/librustsyntax/parse/token.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ fn contextual_keyword_table() -> hashmap<str, ()> {
229229
"implements",
230230
"move",
231231
"of",
232-
"priv",
232+
"priv", "pub",
233233
"self", "send", "static",
234234
"to",
235235
"use",

Diff for: src/librustsyntax/print/pprust.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -533,9 +533,9 @@ fn print_item(s: ps, &&item: @ast::item) {
533533
*/
534534
hardbreak_if_not_bol(s);
535535
maybe_print_comment(s, ci.span.lo);
536-
let pr = ast_util::class_member_privacy(ci);
536+
let pr = ast_util::class_member_visibility(ci);
537537
alt pr {
538-
ast::priv {
538+
ast::private {
539539
head(s, "priv");
540540
bopen(s);
541541
hardbreak_if_not_bol(s);
@@ -559,7 +559,7 @@ fn print_item(s: ps, &&item: @ast::item) {
559559
}
560560
}
561561
alt pr {
562-
ast::priv { bclose(s, ci.span); }
562+
ast::private { bclose(s, ci.span); }
563563
_ {}
564564
}
565565
}

Diff for: src/rustc/front/test.rs

+3
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ fn mk_test_module(cx: test_ctxt) -> @ast::item {
195195
attrs: [resolve_unexported_attr],
196196
id: cx.sess.next_node_id(),
197197
node: item_,
198+
vis: ast::public,
198199
span: dummy_sp()};
199200

200201
#debug("Synthetic test module:\n%s\n", pprust::item_to_str(@item));
@@ -233,6 +234,7 @@ fn mk_tests(cx: test_ctxt) -> @ast::item {
233234
attrs: [],
234235
id: cx.sess.next_node_id(),
235236
node: item_,
237+
vis: ast::public,
236238
span: dummy_sp()};
237239
ret @item;
238240
}
@@ -415,6 +417,7 @@ fn mk_main(cx: test_ctxt) -> @ast::item {
415417
attrs: [],
416418
id: cx.sess.next_node_id(),
417419
node: item_,
420+
vis: ast::public,
418421
span: dummy_sp()};
419422
ret @item;
420423
}

0 commit comments

Comments
 (0)