From 168398bb3dc01f8efecf734342af60a959a74b8d Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Thu, 8 Mar 2012 13:30:22 +0100 Subject: Stop generating generic versions of generic functions Monomorphic instances are generated on demand. --- src/rustc/metadata/encoder.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/rustc/metadata') diff --git a/src/rustc/metadata/encoder.rs b/src/rustc/metadata/encoder.rs index 38509ec7024..56e7ab47f60 100644 --- a/src/rustc/metadata/encoder.rs +++ b/src/rustc/metadata/encoder.rs @@ -263,7 +263,7 @@ fn encode_enum_variant_info(ecx: @encode_ctxt, ebml_w: ebml::writer, encode_enum_id(ebml_w, local_def(id)); encode_type(ecx, ebml_w, node_id_to_type(ecx.ccx.tcx, variant.node.id)); - if vec::len::(variant.node.args) > 0u { + if vec::len(variant.node.args) > 0u && ty_params.len() == 0u { encode_symbol(ecx, ebml_w, variant.node.id); } encode_discriminant(ecx, ebml_w, variant.node.id); @@ -361,10 +361,11 @@ fn encode_info_for_item(ecx: @encode_ctxt, ebml_w: ebml::writer, item: @item, encode_family(ebml_w, purity_fn_family(decl.purity)); encode_type_param_bounds(ebml_w, ecx, tps); encode_type(ecx, ebml_w, node_id_to_type(tcx, item.id)); - encode_symbol(ecx, ebml_w, item.id); encode_path(ebml_w, path, ast_map::path_name(item.ident)); if tps.len() > 0u || should_inline(item.attrs) { astencode::encode_inlined_item(ecx, ebml_w, path, ii_item(item)); + } else { + encode_symbol(ecx, ebml_w, item.id); } ebml_w.end_tag(); } @@ -416,7 +417,9 @@ fn encode_info_for_item(ecx: @encode_ctxt, ebml_w: ebml::writer, item: @item, encode_type_param_bounds(ebml_w, ecx, tps); encode_type(ecx, ebml_w, ty::ty_fn_ret(fn_ty)); encode_name(ebml_w, item.ident); - encode_symbol(ecx, ebml_w, item.id); + if tps.len() == 0u { + encode_symbol(ecx, ebml_w, item.id); + } encode_path(ebml_w, path, ast_map::path_name(item.ident)); ebml_w.end_tag(); @@ -466,12 +469,13 @@ fn encode_info_for_item(ecx: @encode_ctxt, ebml_w: ebml::writer, item: @item, encode_type_param_bounds(ebml_w, ecx, tps + m.tps); encode_type(ecx, ebml_w, node_id_to_type(tcx, m.id)); encode_name(ebml_w, m.ident); - encode_symbol(ecx, ebml_w, m.id); encode_path(ebml_w, impl_path, ast_map::path_name(m.ident)); if tps.len() > 0u || m.tps.len() > 0u || should_inline(m.attrs) { astencode::encode_inlined_item( ecx, ebml_w, impl_path, ii_method(local_def(item.id), m)); + } else { + encode_symbol(ecx, ebml_w, m.id); } ebml_w.end_tag(); } -- cgit 1.4.1-3-g733a5