diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2012-09-07 15:45:11 -0700 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2012-09-07 15:46:08 -0700 |
| commit | 1fcfee674a569b296d0da391af113a3776c749a1 (patch) | |
| tree | c4c956d1cb2f929f13ee6a29b26143a2e1cb535f /src/rustc | |
| parent | 2572e8035522bd2002fab4ef777ad0290312ac71 (diff) | |
| download | rust-1fcfee674a569b296d0da391af113a3776c749a1.tar.gz rust-1fcfee674a569b296d0da391af113a3776c749a1.zip | |
rustc: Add a str_eq lang item for pattern matching
Diffstat (limited to 'src/rustc')
| -rw-r--r-- | src/rustc/metadata/encoder.rs | 1 | ||||
| -rw-r--r-- | src/rustc/middle/lang_items.rs | 55 |
2 files changed, 31 insertions, 25 deletions
diff --git a/src/rustc/metadata/encoder.rs b/src/rustc/metadata/encoder.rs index 803c9967d0c..31f12a4b355 100644 --- a/src/rustc/metadata/encoder.rs +++ b/src/rustc/metadata/encoder.rs @@ -542,6 +542,7 @@ 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, node_id_to_type(tcx, item.id)); encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident)); + encode_attributes(ebml_w, item.attrs); if tps.len() > 0u || should_inline(item.attrs) { ecx.encode_inlined_item(ecx, ebml_w, path, ii_item(item)); } else { diff --git a/src/rustc/middle/lang_items.rs b/src/rustc/middle/lang_items.rs index 033a1c0f0a8..2cf26904b0d 100644 --- a/src/rustc/middle/lang_items.rs +++ b/src/rustc/middle/lang_items.rs @@ -13,8 +13,8 @@ use driver::session::session; use metadata::csearch::{each_path, get_item_attrs}; use metadata::cstore::{iter_crate_data}; use metadata::decoder::{dl_def, dl_field, dl_impl}; -use syntax::ast::{crate, def_id, def_ty, lit_str, meta_item, meta_list}; -use syntax::ast::{meta_name_value, meta_word}; +use syntax::ast::{crate, def_fn, def_id, def_ty, lit_str, meta_item}; +use syntax::ast::{meta_list, meta_name_value, meta_word}; use syntax::ast_util::{local_def}; use syntax::visit::{default_simple_visitor, mk_simple_visitor}; use syntax::visit::{visit_crate, visit_item}; @@ -23,26 +23,28 @@ use std::map::{hashmap, str_hash}; use str_eq = str::eq; struct LanguageItems { - mut const_trait: Option<def_id>; - mut copy_trait: Option<def_id>; - mut send_trait: Option<def_id>; - mut owned_trait: Option<def_id>; - - mut add_trait: Option<def_id>; - mut sub_trait: Option<def_id>; - mut mul_trait: Option<def_id>; - mut div_trait: Option<def_id>; - mut modulo_trait: Option<def_id>; - mut neg_trait: Option<def_id>; - mut bitxor_trait: Option<def_id>; - mut bitand_trait: Option<def_id>; - mut bitor_trait: Option<def_id>; - mut shl_trait: Option<def_id>; - mut shr_trait: Option<def_id>; - mut index_trait: Option<def_id>; - - mut eq_trait: Option<def_id>; - mut ord_trait: Option<def_id>; + mut const_trait: Option<def_id>, + mut copy_trait: Option<def_id>, + mut send_trait: Option<def_id>, + mut owned_trait: Option<def_id>, + + mut add_trait: Option<def_id>, + mut sub_trait: Option<def_id>, + mut mul_trait: Option<def_id>, + mut div_trait: Option<def_id>, + mut modulo_trait: Option<def_id>, + mut neg_trait: Option<def_id>, + mut bitxor_trait: Option<def_id>, + mut bitand_trait: Option<def_id>, + mut bitor_trait: Option<def_id>, + mut shl_trait: Option<def_id>, + mut shr_trait: Option<def_id>, + mut index_trait: Option<def_id>, + + mut eq_trait: Option<def_id>, + mut ord_trait: Option<def_id>, + + mut str_eq_fn: Option<def_id> } mod LanguageItems { @@ -67,7 +69,9 @@ mod LanguageItems { index_trait: None, eq_trait: None, - ord_trait: None + ord_trait: None, + + str_eq_fn: None } } } @@ -99,6 +103,8 @@ fn LanguageItemCollector(crate: @crate, session: session, item_refs.insert(~"eq", &mut items.eq_trait); item_refs.insert(~"ord", &mut items.ord_trait); + item_refs.insert(~"str_eq", &mut items.str_eq_fn); + LanguageItemCollector { crate: crate, session: session, @@ -117,7 +123,6 @@ struct LanguageItemCollector { fn match_and_collect_meta_item(item_def_id: def_id, meta_item: meta_item) { - match meta_item.node { meta_name_value(key, literal) => { match literal.node { @@ -183,7 +188,7 @@ struct LanguageItemCollector { for each_path(crate_store, crate_number) |path_entry| { let def_id; match path_entry.def_like { - dl_def(def_ty(did)) => { + dl_def(def_ty(did)) | dl_def(def_fn(did, _)) => { def_id = did; } dl_def(_) | dl_impl(_) | dl_field => { |
