diff options
| author | Marijn Haverbeke <marijnh@gmail.com> | 2012-03-08 13:30:22 +0100 |
|---|---|---|
| committer | Marijn Haverbeke <marijnh@gmail.com> | 2012-03-15 09:00:21 +0100 |
| commit | 168398bb3dc01f8efecf734342af60a959a74b8d (patch) | |
| tree | 5b4aa5cc1d42cd18771507fd5fc5ad7dc0517f2f /src/rustc/metadata | |
| parent | 47e65403b79a476fe483f8141c0c5937cbaa06a6 (diff) | |
| download | rust-168398bb3dc01f8efecf734342af60a959a74b8d.tar.gz rust-168398bb3dc01f8efecf734342af60a959a74b8d.zip | |
Stop generating generic versions of generic functions
Monomorphic instances are generated on demand.
Diffstat (limited to 'src/rustc/metadata')
| -rw-r--r-- | src/rustc/metadata/encoder.rs | 12 |
1 files changed, 8 insertions, 4 deletions
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_arg>(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(); } |
