void readClassAttr(ClassSymbol c, Name attrName, int attrLen) {
        if (attrName == names.SourceFile) {
            Name n = readName(nextChar());
            c.sourcefile = new SourceFileObject(n, c.flatname);
        } else if (attrName == names.InnerClasses) {
            readInnerClasses(c);
        } else if (allowGenerics && attrName == names.Signature) {
            readingClassAttr = true;
            try {
                ClassType ct1 = (ClassType)c.type;
                assert c == currentOwner;
                ct1.typarams_field = readTypeParams(nextChar());
                ct1.supertype_field = sigToType();
                ListBuffer<Type> is = new ListBuffer<Type>();
                while (sigp != siglimit) is.append(sigToType());
                ct1.interfaces_field = is.toList();
            } finally {
                readingClassAttr = false;
            }
        } else {
            readMemberAttr(c, attrName, attrLen);
        }
    }