Skip to content

Commit cdcce3e

Browse files
committed
Refactoring, annotating FIXMEs in remainder of metadata code
1 parent c97b29a commit cdcce3e

File tree

4 files changed

+41
-47
lines changed

4 files changed

+41
-47
lines changed

src/librustsyntax/ast.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,7 @@ type constr_arg = spanned<fn_constr_arg>;
503503

504504
#[auto_serialize]
505505
type constr_general_<ARG, ID> =
506-
{path: @path, args: [@spanned<constr_arg_general_<ARG>>], id: ID};
506+
{path: @path, args: [@sp_constr_arg<ARG>], id: ID};
507507

508508
// In the front end, constraints have a node ID attached.
509509
// Typeck turns this to a def_id, using the output of resolve.

src/rustc/metadata/loader.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ fn crate_name_from_metas(metas: [@ast::meta_item]) -> str {
125125
alt attr::get_meta_item_value_str(i) {
126126
some(n) { n }
127127
// FIXME: Probably want a warning here since the user
128-
// is using the wrong type of meta item
128+
// is using the wrong type of meta item (#2406)
129129
_ { fail }
130130
}
131131
}

src/rustc/metadata/tydecode.rs

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -63,35 +63,29 @@ fn parse_ret_ty(st: @pstate, conv: conv_did) -> (ast::ret_style, ty::t) {
6363
}
6464
}
6565

66-
fn parse_constrs(st: @pstate, conv: conv_did) -> [@ty::constr] {
67-
let mut rslt: [@ty::constr] = [];
66+
fn parse_constrs_gen<T: copy>(st: @pstate, conv: conv_did,
67+
pser: fn(@pstate)
68+
-> ast::constr_arg_general_<T>) -> [@ty::constr_general<T>] {
69+
let mut rslt: [@ty::constr_general<T>] = [];
6870
alt peek(st) {
6971
':' {
7072
loop {
71-
next(st);
72-
rslt += [parse_constr(st, conv, parse_constr_arg)];
73-
if peek(st) != ';' { break; }
73+
next(st);
74+
rslt += [parse_constr(st, conv, pser)];
75+
if peek(st) != ';' { break; }
7476
}
7577
}
76-
_ { }
78+
_ {}
7779
}
78-
ret rslt;
80+
rslt
81+
}
82+
83+
fn parse_constrs(st: @pstate, conv: conv_did) -> [@ty::constr] {
84+
parse_constrs_gen(st, conv, parse_constr_arg)
7985
}
8086

81-
// FIXME less copy-and-paste
8287
fn parse_ty_constrs(st: @pstate, conv: conv_did) -> [@ty::type_constr] {
83-
let mut rslt: [@ty::type_constr] = [];
84-
alt peek(st) {
85-
':' {
86-
loop {
87-
next(st);
88-
rslt += [parse_constr(st, conv, parse_ty_constr_arg)];
89-
if peek(st) != ';' { break; }
90-
}
91-
}
92-
_ { }
93-
}
94-
ret rslt;
88+
parse_constrs_gen(st, conv, parse_ty_constr_arg)
9589
}
9690

9791
fn parse_path(st: @pstate) -> @ast::path {
@@ -121,11 +115,11 @@ fn parse_constr_arg(st: @pstate) -> ast::fn_constr_arg {
121115
an arg index and a lit argument? */
122116
if c >= '0' && c <= '9' {
123117
next(st);
124-
// FIXME
118+
// FIXME #877
125119
ret ast::carg_ident((c as uint) - 48u);
126120
} else {
127121
#error("Lit args are unimplemented");
128-
fail; // FIXME
122+
fail; // FIXME #877
129123
}
130124
/*
131125
else {
@@ -147,7 +141,8 @@ fn parse_ty_constr_arg(st: @pstate) -> ast::constr_arg_general_<@path> {
147141
fn parse_constr<T: copy>(st: @pstate, conv: conv_did,
148142
pser: fn(@pstate) -> ast::constr_arg_general_<T>)
149143
-> @ty::constr_general<T> {
150-
let sp = ast_util::dummy_sp(); // FIXME: use a real span
144+
// FIXME: use real spans and not a bogus one (#2407)
145+
let sp = ast_util::dummy_sp();
151146
let mut args: [@sp_constr_arg<T>] = [];
152147
let pth = parse_path(st);
153148
let mut ignore: char = next(st);
@@ -156,7 +151,6 @@ fn parse_constr<T: copy>(st: @pstate, conv: conv_did,
156151
let mut an_arg: constr_arg_general_<T>;
157152
loop {
158153
an_arg = pser(st);
159-
// FIXME use a real span
160154
args += [@respan(sp, an_arg)];
161155
ignore = next(st);
162156
if ignore != ';' { break; }

src/rustc/metadata/tyencode.rs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -352,39 +352,39 @@ fn enc_ty_fn(w: io::writer, cx: @ctxt, ft: ty::fn_ty) {
352352
}
353353
}
354354

355-
// FIXME less copy-and-paste
356-
fn enc_constr(w: io::writer, cx: @ctxt, c: @ty::constr) {
355+
fn enc_constr_gen<T>(w: io::writer, cx: @ctxt,
356+
c: @ty::constr_general<T>,
357+
write_arg: fn(@sp_constr_arg<T>)) {
357358
w.write_str(path_to_str(c.node.path));
358359
w.write_char('(');
359360
w.write_str(cx.ds(c.node.id));
360361
w.write_char('|');
361362
let mut semi = false;
362363
for c.node.args.each {|a|
363364
if semi { w.write_char(';'); } else { semi = true; }
364-
alt a.node {
365-
carg_base { w.write_char('*'); }
366-
carg_ident(i) { w.write_uint(i); }
367-
carg_lit(l) { w.write_str(lit_to_str(l)); }
368-
}
365+
write_arg(a);
369366
}
370367
w.write_char(')');
371368
}
372369

370+
fn enc_constr(w: io::writer, cx: @ctxt, c: @ty::constr) {
371+
enc_constr_gen(w, cx, c, {|a|
372+
alt a.node {
373+
carg_base { w.write_char('*'); }
374+
carg_ident(i) { w.write_uint(i); }
375+
carg_lit(l) { w.write_str(lit_to_str(l)); }
376+
}
377+
});
378+
}
379+
373380
fn enc_ty_constr(w: io::writer, cx: @ctxt, c: @ty::type_constr) {
374-
w.write_str(path_to_str(c.node.path));
375-
w.write_char('(');
376-
w.write_str(cx.ds(c.node.id));
377-
w.write_char('|');
378-
let mut semi = false;
379-
for c.node.args.each {|a|
380-
if semi { w.write_char(';'); } else { semi = true; }
381-
alt a.node {
382-
carg_base { w.write_char('*'); }
383-
carg_ident(p) { w.write_str(path_to_str(p)); }
384-
carg_lit(l) { w.write_str(lit_to_str(l)); }
385-
}
386-
}
387-
w.write_char(')');
381+
enc_constr_gen(w, cx, c, {|a|
382+
alt a.node {
383+
carg_base { w.write_char('*'); }
384+
carg_ident(p) { w.write_str(path_to_str(p)); }
385+
carg_lit(l) { w.write_str(lit_to_str(l)); }
386+
}
387+
});
388388
}
389389

390390
fn enc_bounds(w: io::writer, cx: @ctxt, bs: @[ty::param_bound]) {

0 commit comments

Comments
 (0)