diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2012-03-21 08:36:21 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2012-04-23 16:50:56 +0200 |
commit | 8d89bf37dd4ef3cb7373e1841ff57a53916fff0d (patch) | |
tree | 704b7de0338eba0e008a96a09b6d57e86846d1b1 /odb/semantics/elements.cxx | |
parent | 68ff21c56fb287790440208907ad2a851a108f89 (diff) |
Polymorphic inheritance support
Diffstat (limited to 'odb/semantics/elements.cxx')
-rw-r--r-- | odb/semantics/elements.cxx | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/odb/semantics/elements.cxx b/odb/semantics/elements.cxx index 85fb203..4b8fcea 100644 --- a/odb/semantics/elements.cxx +++ b/odb/semantics/elements.cxx @@ -322,8 +322,25 @@ namespace semantics void scope:: add_edge_left (names& e) { - names_list::iterator it (names_.insert (names_.end (), &e)); - iterator_map_[&e] = it; + names_list::iterator i (names_.insert (names_.end (), &e)); + iterator_map_[&e] = i; + names_map_[e.name ()].push_back (&e); + } + + void scope:: + add_edge_left (names& e, names_iterator after) + { + names_list::iterator i; + + if (after.base () == names_.end ()) + i = names_.insert (names_.begin (), &e); + else + { + names_list::iterator j (after.base ()); + i = names_.insert (++j, &e); + } + + iterator_map_[&e] = i; names_map_[e.name ()].push_back (&e); } @@ -426,6 +443,14 @@ namespace semantics insert (ti); } + // virtual_data_member + // + { + type_info ti (typeid (virtual_data_member)); + ti.add_base (typeid (data_member)); + insert (ti); + } + // unsupported_type // { |