From 17daf1f9bf4e78c9f3ed8be24ef4bc15d60c744e Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Tue, 10 May 2011 14:47:28 -0700 Subject: rustc: Cache intermediate results of metadata.Encode.ty_str. Shaves 30% off translation time. --- src/comp/middle/metadata.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/comp/middle/metadata.rs') 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)) { -- cgit v1.2.3