diff options
| author | Tim Chevalier <chevalier@alum.wellesley.edu> | 2012-05-15 17:59:55 -0700 |
|---|---|---|
| committer | Tim Chevalier <chevalier@alum.wellesley.edu> | 2012-05-15 18:00:41 -0700 |
| commit | fa5cc5bcd0e370a677de141d46455d4ee518dcfc (patch) | |
| tree | b918a6d1643f41eb4f17b65eca80b283c6cefbd7 /src/rustc/metadata/decoder.rs | |
| parent | 5d625af9f944c7b6567c443a6f796e30dbb01bf2 (diff) | |
| download | rust-fa5cc5bcd0e370a677de141d46455d4ee518dcfc.tar.gz rust-fa5cc5bcd0e370a677de141d46455d4ee518dcfc.zip | |
Generate drop glue correctly for classes with destructors
Diffstat (limited to 'src/rustc/metadata/decoder.rs')
| -rw-r--r-- | src/rustc/metadata/decoder.rs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/rustc/metadata/decoder.rs b/src/rustc/metadata/decoder.rs index 1c8caa0f4aa..832dda817e3 100644 --- a/src/rustc/metadata/decoder.rs +++ b/src/rustc/metadata/decoder.rs @@ -16,6 +16,7 @@ import util::ppaux::ty_to_str; import ebml::deserializer; import syntax::diagnostic::span_handler; +export class_dtor; export get_class_fields; export get_symbol; export get_enum_variants; @@ -331,6 +332,19 @@ fn get_class_method(cdata: cmd, id: ast::node_id, name: str) -> ast::def_id { } } +fn class_dtor(cdata: cmd, id: ast::node_id) -> option<ast::def_id> { + let items = ebml::get_doc(ebml::doc(cdata.data), tag_items); + let cls_items = alt maybe_find_item(id, items) { + some(it) { it } + none { ret none; }}; + let mut rslt = none; + ebml::tagged_docs(cls_items, tag_item_dtor) {|f| + let did = parse_def_id(ebml::doc_data(f)); + rslt = some(translate_def_id(cdata, did)); + } + rslt +} + fn get_symbol(data: @[u8], id: ast::node_id) -> str { ret item_symbol(lookup_item(id, data)); } |
