diff options
| author | Tim Chevalier <chevalier@alum.wellesley.edu> | 2012-05-17 22:15:07 -0700 |
|---|---|---|
| committer | Tim Chevalier <chevalier@alum.wellesley.edu> | 2012-05-17 22:15:07 -0700 |
| commit | cdcce3ed5d0e2944e71a1660b52535c6c43e2ef2 (patch) | |
| tree | 78f11bd0ebbc0da9dc6348396c0dd768fbe39680 /src/rustc | |
| parent | c97b29afd1de3370cd895d6e4fe7d7ef1b5c286f (diff) | |
| download | rust-cdcce3ed5d0e2944e71a1660b52535c6c43e2ef2.tar.gz rust-cdcce3ed5d0e2944e71a1660b52535c6c43e2ef2.zip | |
Refactoring, annotating FIXMEs in remainder of metadata code
Diffstat (limited to 'src/rustc')
| -rw-r--r-- | src/rustc/metadata/loader.rs | 2 | ||||
| -rw-r--r-- | src/rustc/metadata/tydecode.rs | 42 | ||||
| -rw-r--r-- | src/rustc/metadata/tyencode.rs | 42 |
3 files changed, 40 insertions, 46 deletions
diff --git a/src/rustc/metadata/loader.rs b/src/rustc/metadata/loader.rs index 4ef60c4a8cc..8d0294efcc8 100644 --- a/src/rustc/metadata/loader.rs +++ b/src/rustc/metadata/loader.rs @@ -125,7 +125,7 @@ fn crate_name_from_metas(metas: [@ast::meta_item]) -> str { alt attr::get_meta_item_value_str(i) { some(n) { n } // FIXME: Probably want a warning here since the user - // is using the wrong type of meta item + // is using the wrong type of meta item (#2406) _ { fail } } } diff --git a/src/rustc/metadata/tydecode.rs b/src/rustc/metadata/tydecode.rs index aae0f7c3924..d5b149d4e36 100644 --- a/src/rustc/metadata/tydecode.rs +++ b/src/rustc/metadata/tydecode.rs @@ -63,35 +63,29 @@ fn parse_ret_ty(st: @pstate, conv: conv_did) -> (ast::ret_style, ty::t) { } } -fn parse_constrs(st: @pstate, conv: conv_did) -> [@ty::constr] { - let mut rslt: [@ty::constr] = []; +fn parse_constrs_gen<T: copy>(st: @pstate, conv: conv_did, + pser: fn(@pstate) + -> ast::constr_arg_general_<T>) -> [@ty::constr_general<T>] { + let mut rslt: [@ty::constr_general<T>] = []; alt peek(st) { ':' { loop { - next(st); - rslt += [parse_constr(st, conv, parse_constr_arg)]; - if peek(st) != ';' { break; } + next(st); + rslt += [parse_constr(st, conv, pser)]; + if peek(st) != ';' { break; } } } - _ { } + _ {} } - ret rslt; + rslt +} + +fn parse_constrs(st: @pstate, conv: conv_did) -> [@ty::constr] { + parse_constrs_gen(st, conv, parse_constr_arg) } -// FIXME less copy-and-paste fn parse_ty_constrs(st: @pstate, conv: conv_did) -> [@ty::type_constr] { - let mut rslt: [@ty::type_constr] = []; - alt peek(st) { - ':' { - loop { - next(st); - rslt += [parse_constr(st, conv, parse_ty_constr_arg)]; - if peek(st) != ';' { break; } - } - } - _ { } - } - ret rslt; + parse_constrs_gen(st, conv, parse_ty_constr_arg) } fn parse_path(st: @pstate) -> @ast::path { @@ -121,11 +115,11 @@ fn parse_constr_arg(st: @pstate) -> ast::fn_constr_arg { an arg index and a lit argument? */ if c >= '0' && c <= '9' { next(st); - // FIXME + // FIXME #877 ret ast::carg_ident((c as uint) - 48u); } else { #error("Lit args are unimplemented"); - fail; // FIXME + fail; // FIXME #877 } /* else { @@ -147,7 +141,8 @@ fn parse_ty_constr_arg(st: @pstate) -> ast::constr_arg_general_<@path> { fn parse_constr<T: copy>(st: @pstate, conv: conv_did, pser: fn(@pstate) -> ast::constr_arg_general_<T>) -> @ty::constr_general<T> { - let sp = ast_util::dummy_sp(); // FIXME: use a real span + // FIXME: use real spans and not a bogus one (#2407) + let sp = ast_util::dummy_sp(); let mut args: [@sp_constr_arg<T>] = []; let pth = parse_path(st); let mut ignore: char = next(st); @@ -156,7 +151,6 @@ fn parse_constr<T: copy>(st: @pstate, conv: conv_did, let mut an_arg: constr_arg_general_<T>; loop { an_arg = pser(st); - // FIXME use a real span args += [@respan(sp, an_arg)]; ignore = next(st); if ignore != ';' { break; } diff --git a/src/rustc/metadata/tyencode.rs b/src/rustc/metadata/tyencode.rs index ee60b297cb8..67f9e5bc0af 100644 --- a/src/rustc/metadata/tyencode.rs +++ b/src/rustc/metadata/tyencode.rs @@ -352,8 +352,9 @@ fn enc_ty_fn(w: io::writer, cx: @ctxt, ft: ty::fn_ty) { } } -// FIXME less copy-and-paste -fn enc_constr(w: io::writer, cx: @ctxt, c: @ty::constr) { +fn enc_constr_gen<T>(w: io::writer, cx: @ctxt, + c: @ty::constr_general<T>, + write_arg: fn(@sp_constr_arg<T>)) { w.write_str(path_to_str(c.node.path)); w.write_char('('); w.write_str(cx.ds(c.node.id)); @@ -361,30 +362,29 @@ fn enc_constr(w: io::writer, cx: @ctxt, c: @ty::constr) { let mut semi = false; for c.node.args.each {|a| if semi { w.write_char(';'); } else { semi = true; } - alt a.node { - carg_base { w.write_char('*'); } - carg_ident(i) { w.write_uint(i); } - carg_lit(l) { w.write_str(lit_to_str(l)); } - } + write_arg(a); } w.write_char(')'); } +fn enc_constr(w: io::writer, cx: @ctxt, c: @ty::constr) { + enc_constr_gen(w, cx, c, {|a| + alt a.node { + carg_base { w.write_char('*'); } + carg_ident(i) { w.write_uint(i); } + carg_lit(l) { w.write_str(lit_to_str(l)); } + } + }); +} + fn enc_ty_constr(w: io::writer, cx: @ctxt, c: @ty::type_constr) { - w.write_str(path_to_str(c.node.path)); - w.write_char('('); - w.write_str(cx.ds(c.node.id)); - w.write_char('|'); - let mut semi = false; - for c.node.args.each {|a| - if semi { w.write_char(';'); } else { semi = true; } - alt a.node { - carg_base { w.write_char('*'); } - carg_ident(p) { w.write_str(path_to_str(p)); } - carg_lit(l) { w.write_str(lit_to_str(l)); } - } - } - w.write_char(')'); + enc_constr_gen(w, cx, c, {|a| + alt a.node { + carg_base { w.write_char('*'); } + carg_ident(p) { w.write_str(path_to_str(p)); } + carg_lit(l) { w.write_str(lit_to_str(l)); } + } + }); } fn enc_bounds(w: io::writer, cx: @ctxt, bs: @[ty::param_bound]) { |
