diff options
| author | Patrick Walton <[email protected]> | 2011-05-10 14:47:28 -0700 |
|---|---|---|
| committer | Patrick Walton <[email protected]> | 2011-05-10 14:48:24 -0700 |
| commit | 17daf1f9bf4e78c9f3ed8be24ef4bc15d60c744e (patch) | |
| tree | ec00fbd2224c19c7009dae0fbc555d50ca8a368e /src/comp/middle/metadata.rs | |
| parent | Switch memcpy to memmove since we're willing to compile x = x and such. (diff) | |
| download | rust-17daf1f9bf4e78c9f3ed8be24ef4bc15d60c744e.tar.xz rust-17daf1f9bf4e78c9f3ed8be24ef4bc15d60c744e.zip | |
rustc: Cache intermediate results of metadata.Encode.ty_str. Shaves 30% off translation time.
Diffstat (limited to 'src/comp/middle/metadata.rs')
| -rw-r--r-- | src/comp/middle/metadata.rs | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/comp/middle/metadata.rs b/src/comp/middle/metadata.rs index dee9046d..dfc441a9 100644 --- a/src/comp/middle/metadata.rs +++ b/src/comp/middle/metadata.rs @@ -82,7 +82,19 @@ mod Encode { fn enc_ty(&IO.writer w, &@ctxt cx, &ty.t t) { alt (cx.abbrevs) { - case (ac_no_abbrevs) { enc_sty(w, cx, ty.struct(cx.tcx, t)); } + case (ac_no_abbrevs) { + auto result_str; + alt (cx.tcx.short_names_cache.find(t)) { + case (some[str](?s)) { result_str = s; } + case (none[str]) { + auto sw = IO.string_writer(); + enc_sty(sw.get_writer(), cx, ty.struct(cx.tcx, t)); + result_str = sw.get_str(); + cx.tcx.short_names_cache.insert(t, result_str); + } + } + w.write_str(result_str); + } case (ac_use_abbrevs(?abbrevs)) { alt (abbrevs.find(t)) { case (some[ty_abbrev](?a)) { |