diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-02-23 21:06:12 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-02-23 21:52:41 -0800 |
| commit | 9982a2a8416cb263f875e5cec7a5c5b6e2b7b1fe (patch) | |
| tree | 7fdbe4c99c1dcac99a88d13426e65e0cb95d5184 | |
| parent | cb7022cfc20b89947ff3fa96d4617f9fe64d2f3e (diff) | |
| download | rust-9982a2a8416cb263f875e5cec7a5c5b6e2b7b1fe.tar.gz rust-9982a2a8416cb263f875e5cec7a5c5b6e2b7b1fe.zip | |
rustc: Don't add duplicate entries to exp_map
| -rw-r--r-- | src/comp/middle/resolve.rs | 8 | ||||
| -rw-r--r-- | src/rustdoc/reexport_pass.rs | 13 |
2 files changed, 19 insertions, 2 deletions
diff --git a/src/comp/middle/resolve.rs b/src/comp/middle/resolve.rs index a35de9997f9..0a070f75b20 100644 --- a/src/comp/middle/resolve.rs +++ b/src/comp/middle/resolve.rs @@ -2021,7 +2021,13 @@ fn check_exports(e: @env) { alt def { some(def) { alt e.exp_map.find(path) { - some(v) { *v += [def]; } + some(v) { + // If there are multiple reexports of the same def + // using the same path, then we only need one copy + if !vec::contains(*v, def) { + *v += [def]; + } + } none { e.exp_map.insert(path, @mutable [def]); } } } diff --git a/src/rustdoc/reexport_pass.rs b/src/rustdoc/reexport_pass.rs index 0e9c251991b..b397767b03b 100644 --- a/src/rustdoc/reexport_pass.rs +++ b/src/rustdoc/reexport_pass.rs @@ -144,7 +144,6 @@ fn build_reexport_path_map(srv: astsrv::srv, -def_map: def_map) -> path_map { let name = option::get(vec::last(path)); let reexportdocs = []; - for def in *defs { let def_id = ast_util::def_id_of_def(def); alt def_map.find(def_id) { @@ -337,6 +336,18 @@ fn should_reexport_in_topmod() { assert doc.topmod.enums()[0].name() == "option"; } +#[test] +fn should_not_reexport_multiple_times() { + let source = "import option = option::t; \ + export option; \ + export option; \ + mod option { \ + enum t { none, some } \ + }"; + let doc = test::mk_doc(source); + assert vec::len(doc.topmod.enums()) == 1u; +} + #[cfg(test)] mod test { fn mk_doc(source: str) -> doc::cratedoc { |
