             classcount++;
             if (cls.destructor) destructors++;
             if (cls.isExact) exacts++;
-            var d = " " + (cls.destructor ? "D" : " ") + (cls.isExact ? "E" : " ") + (cls.defcount > 1 ? "M" : " ") + (cls.external ? "X" : " ") + "  ";
+            var d = " " + (cls.destructor ? "D" : " ") + (cls.isExact ? "E" : " ") + (cls.extraBases.length > 0 ? "m" : " ") + (cls.defcount > 1 ? "M" : " ") + (cls.external ? "X" : " ") + "  ";
             print(d + padTo50(spaces(indent) + cls.derived) + " " + cls.filename + ":" + cls.lineno);
             if (cls.defcount > 1) {
                 var locs = cls.otherlines;
                 for ( var l=0 ; l < locs.length ; l++ )
-                    print("   #    " + padTo50("") + locs[l].filename + ":" + locs[l].lineno);
+                    print("    #    " + padTo50("") + locs[l].filename + ":" + locs[l].lineno);
             }
             if (cls.external) {
                 var locs = cls.exolines;
                 for ( var l=0 ; l < locs.length ; l++ )
-                    print("    @   " + padTo50("") + locs[l].filename + ":" + locs[l].lineno);
+                    print("     @   " + padTo50("") + locs[l].filename + ":" + locs[l].lineno);
             }
         }
         cls.subrefs.sort(function (a,b) { return strcmp(a.derived, b.derived); })

    print("  E - at least one of the definitions is exactly traced");
    print("  M - multiple definitions in the tree (in different namespaces or nested within classes)");
    print("  # - continuation line for M with additional locations");
    print("  X - definitions of the same name exist outside the tree");
    print("  @ - continuation line for @ with locations");
    print("");


class LineInfo
{
    function LineInfo(_derived, _base, _isExact, _extraBases, _filename, _lineno) {
        derived = _derived;
        base = _base;
        isExact = _isExact;
        extraBases = _extraBases;
        filename = _filename;
        lineno = _lineno;
    }
