ICG produces non-compilable io_* code for this weird example #334

When saving the list of namespaces and classes a particular type is contained in
we have to save the class name and any template args it includes separately.  This
allows us to mangle the names easier.  And we now search for type names to see
if they follow this pattern template_name<template_args>::embedded_class.  If
we are using a template embedded class we need to create attributes for the embedded class.
This commit is contained in:
Alex Lin
2016-11-02 13:56:40 -05:00
parent 8ad462cd1c
commit d875f837f2
9 changed files with 200 additions and 126 deletions

View File

@ -280,14 +280,10 @@ std::ostream & operator << (std::ostream & ostream, ClassValues & cv) {
ostream << " mangled_name = " << cv.mangled_type_name << std::endl ;
ostream << " file_name = " << cv.file_name << std::endl ;
ostream << " namespaces =" ;
for (auto& name : cv.getNamespaces()) {
ostream << " " << name ;
}
cv.printNamespaces(ostream) ;
ostream << std::endl ;
ostream << " parent classes =" ;
for (auto& clazz : cv.getContainerClasses()) {
ostream << " " << clazz ;
}
cv.printContainerClasses(ostream) ;
ostream << std::endl ;
ostream << " has_init_attr_friend = " << cv.has_init_attr_friend << std::endl ;
ostream << " is_pod = " << cv.is_pod << std::endl ;