rustc: Introduce a lang_items pass, part of coherence and operator overloading.
This will also help us remove kinds.
This commit is contained in:
parent
e1d4bd463c
commit
da80bd17c3
8 changed files with 242 additions and 0 deletions
|
|
@ -25,6 +25,7 @@ export get_enum_variants;
|
|||
export get_impls_for_mod;
|
||||
export get_trait_methods;
|
||||
export get_method_names_if_trait;
|
||||
export get_item_attrs;
|
||||
export each_path;
|
||||
export get_type;
|
||||
export get_impl_traits;
|
||||
|
|
@ -149,6 +150,14 @@ fn get_method_names_if_trait(cstore: cstore::cstore, def: ast::def_id)
|
|||
ret decoder::get_method_names_if_trait(cdata, def.node);
|
||||
}
|
||||
|
||||
fn get_item_attrs(cstore: cstore::cstore,
|
||||
def_id: ast::def_id,
|
||||
f: fn(~[@ast::meta_item])) {
|
||||
|
||||
let cdata = cstore::get_crate_data(cstore, def_id.crate);
|
||||
decoder::get_item_attrs(cdata, def_id.node, f)
|
||||
}
|
||||
|
||||
fn get_class_fields(tcx: ty::ctxt, def: ast::def_id) -> ~[ty::field_ty] {
|
||||
let cstore = tcx.cstore;
|
||||
let cdata = cstore::get_crate_data(cstore, def.crate);
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ export get_crate_vers;
|
|||
export get_impls_for_mod;
|
||||
export get_trait_methods;
|
||||
export get_method_names_if_trait;
|
||||
export get_item_attrs;
|
||||
export get_crate_module_paths;
|
||||
export def_like;
|
||||
export dl_def;
|
||||
|
|
@ -659,6 +660,18 @@ fn get_method_names_if_trait(cdata: cmd, node_id: ast::node_id)
|
|||
ret some(resulting_method_names);
|
||||
}
|
||||
|
||||
fn get_item_attrs(cdata: cmd,
|
||||
node_id: ast::node_id,
|
||||
f: fn(~[@ast::meta_item])) {
|
||||
|
||||
let item = lookup_item(node_id, cdata.data);
|
||||
do ebml::tagged_docs(item, tag_attributes) |attributes| {
|
||||
do ebml::tagged_docs(attributes, tag_attribute) |attribute| {
|
||||
f(get_meta_items(attribute));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Helper function that gets either fields or methods
|
||||
fn get_class_members(cdata: cmd, id: ast::node_id,
|
||||
p: fn(char) -> bool) -> ~[ty::field_ty] {
|
||||
|
|
|
|||
|
|
@ -759,6 +759,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_name(ebml_w, item.ident);
|
||||
encode_attributes(ebml_w, item.attrs);
|
||||
let mut i = 0u;
|
||||
for vec::each(*ty::trait_methods(tcx, local_def(item.id))) |mty| {
|
||||
alt ms[i] {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue