Ignore:
Timestamp:
Aug 2, 2010, 9:27:30 PM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.6.3 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/tools/linguist/lupdate/cpp.cpp

    r651 r769  
    6666class HashString {
    6767public:
    68     HashString() : m_hashed(false) {}
    69     explicit HashString(const QString &str) : m_str(str), m_hashed(false) {}
    70     void setValue(const QString &str) { m_str = str; m_hashed = false; }
     68    HashString() : m_hash) {}
     69    explicit HashString(const QString &str) : m_str(str), m_hash) {}
     70    void setValue(const QString &str) { m_str = str; m_hash; }
    7171    const QString &value() const { return m_str; }
    7272    bool operator==(const HashString &other) const { return m_str == other.m_str; }
    7373private:
    7474    QString m_str;
     75
     76
    7577    mutable uint m_hash;
    76     mutable bool m_hashed;
    7778    friend uint qHash(const HashString &str);
    7879};
     
    8081uint qHash(const HashString &str)
    8182{
    82     if (!str.m_hashed) {
    83         str.m_hashed = true;
     83    if (str.m_hash & 0x80000000)
    8484        str.m_hash = qHash(str.m_str);
    85     }
    8685    return str.m_hash;
    8786}
     
    8988class HashStringList {
    9089public:
    91     explicit HashStringList(const QList<HashString> &list) : m_list(list), m_hashed(false) {}
     90    explicit HashStringList(const QList<HashString> &list) : m_list(list), m_hash) {}
    9291    const QList<HashString> &value() const { return m_list; }
    9392    bool operator==(const HashStringList &other) const { return m_list == other.m_list; }
     
    9594    QList<HashString> m_list;
    9695    mutable uint m_hash;
    97     mutable bool m_hashed;
    9896    friend uint qHash(const HashStringList &list);
    9997};
     
    10199uint qHash(const HashStringList &list)
    102100{
    103     if (!list.m_hashed) {
    104         list.m_hashed = true;
     101    if (list.m_hash & 0x80000000) {
    105102        uint hash = 0;
    106103        foreach (const HashString &qs, list.m_list) {
    107             hash ^= qHash(qs) ^ 0xa09df22f;
    108             hash = (hash << 13) | (hash >> 19);
     104            hash ^= qHash(qs) ^ 0x;
     105            hash = ();
    109106        }
    110107        list.m_hash = hash;
     
    216213    struct IfdefState {
    217214        IfdefState() {}
    218         IfdefState(int _braceDepth, int _parenDepth) :
     215        IfdefState(int _bracketDepth, int _braceDepth, int _parenDepth) :
     216            bracketDepth(_bracketDepth),
    219217            braceDepth(_braceDepth),
    220218            parenDepth(_parenDepth),
     
    223221
    224222        SavedState state;
     223
    225224        int braceDepth, braceDepth1st;
    226225        int parenDepth, parenDepth1st;
     
    260259    bool qualifyOneCallbackOwn(const Namespace *ns, void *context) const;
    261260    bool qualifyOneCallbackUsing(const Namespace *ns, void *context) const;
     261
     262
    262263    bool qualifyOne(const NamespaceList &namespaces, int nsCnt, const HashString &segment,
    263264                    NamespaceList *resolved) const;
     
    279280    enum {
    280281        Tok_Eof, Tok_class, Tok_friend, Tok_namespace, Tok_using, Tok_return,
    281         Tok_tr = 10, Tok_trUtf8, Tok_translate, Tok_translateUtf8, Tok_trid,
    282         Tok_Q_OBJECT = 20, Tok_Q_DECLARE_TR_FUNCTIONS,
     282        Tok_tr, Tok_trUtf8, Tok_translate, Tok_translateUtf8, Tok_trid,
     283        Tok_Q_OBJECT, Tok_Q_DECLARE_TR_FUNCTIONS,
    283284        Tok_Ident, Tok_Comment, Tok_String, Tok_Arrow, Tok_Colon, Tok_ColonColon,
    284         Tok_Equals,
    285         Tok_LeftBrace = 30, Tok_RightBrace, Tok_LeftParen, Tok_RightParen, Tok_Comma, Tok_Semicolon,
    286         Tok_Null = 40, Tok_Integer,
    287         Tok_QuotedInclude = 50, Tok_AngledInclude,
    288         Tok_Other = 99
     285        Tok_Equals,
     286        Tok_LeftBrace, Tok_RightBrace, Tok_LeftParen, Tok_RightParen, Tok_Comma, Tok_Semicolon,
     287        Tok_Null, Tok_Integer,
     288        Tok_QuotedInclude, Tok_AngledInclude,
     289        Tok_Other
    289290    };
    290291
     
    298299    qlonglong yyInteger;
    299300    QStack<IfdefState> yyIfdefStack;
     301
    300302    int yyBraceDepth;
    301303    int yyParenDepth;
    302304    int yyLineNo;
    303305    int yyCurLineNo;
     306
    304307    int yyBraceLineNo;
    305308    int yyParenLineNo;
     
    338341        directInclude = false;
    339342    }
     343
    340344    yyBraceDepth = 0;
    341345    yyParenDepth = 0;
    342346    yyCurLineNo = 1;
     347
    343348    yyBraceLineNo = 1;
    344349    yyParenLineNo = 1;
     
    567572                if (yyCh == 'f') {
    568573                    // if, ifdef, ifndef
    569                     yyIfdefStack.push(IfdefState(yyBraceDepth, yyParenDepth));
     574                    yyIfdefStack.push(IfdefState(yyBraceDepth, yyParenDepth));
    570575                    yyCh = getChar();
    571576                } else if (yyCh == 'n') {
     
    606611                        IfdefState &is = yyIfdefStack.top();
    607612                        if (is.elseLine != -1) {
    608                             if (yyBraceDepth != is.braceDepth1st || yyParenDepth != is.parenDepth1st)
    609                                 qWarning("%s:%d: Parenthesis/brace mismatch between "
     613                            if (yyBracketDepth != is.bracketDepth1st
     614                                || yyBraceDepth != is.braceDepth1st
     615                                || yyParenDepth != is.parenDepth1st)
     616                                qWarning("%s:%d: Parenthesis/bracket/brace mismatch between "
    610617                                         "#if and #else branches; using #if branch\n",
    611618                                         qPrintable(yyFileName), is.elseLine);
    612619                        } else {
     620
    613621                            is.braceDepth1st = yyBraceDepth;
    614622                            is.parenDepth1st = yyParenDepth;
     
    616624                        }
    617625                        is.elseLine = yyLineNo;
     626
    618627                        yyBraceDepth = is.braceDepth;
    619628                        yyParenDepth = is.parenDepth;
     
    625634                        IfdefState is = yyIfdefStack.pop();
    626635                        if (is.elseLine != -1) {
    627                             if (yyBraceDepth != is.braceDepth1st || yyParenDepth != is.parenDepth1st)
     636                            if (yyBracketDepth != is.bracketDepth1st
     637                                || yyBraceDepth != is.braceDepth1st
     638                                || yyParenDepth != is.parenDepth1st)
    628639                                qWarning("%s:%d: Parenthesis/brace mismatch between "
    629640                                         "#if and #else branches; using #if branch\n",
    630641                                         qPrintable(yyFileName), is.elseLine);
     642
    631643                            yyBraceDepth = is.braceDepth1st;
    632644                            yyParenDepth = is.parenDepth1st;
     
    901913                yyCh = getChar();
    902914                return Tok_RightParen;
     915
     916
     917
     918
     919
     920
     921
     922
     923
     924
     925
     926
     927
     928
     929
    903930            case ',':
    904931                yyCh = getChar();
     
    10371064
    10381065struct QualifyOneData {
    1039     QualifyOneData(const NamespaceList &ns, int nsc, const HashString &seg, NamespaceList *rslvd)
    1040         : namespaces(ns), nsCount(nsc), segment(seg), resolved(rslvd)
     1066    QualifyOneData(const NamespaceList &ns, int nsc, const HashString &seg, NamespaceList *rslvd,
     1067                   QSet<HashStringList> *visited)
     1068        : namespaces(ns), nsCount(nsc), segment(seg), resolved(rslvd), visitedUsings(visited)
    10411069    {}
    10421070
     
    10451073    const HashString &segment;
    10461074    NamespaceList *resolved;
    1047     QSet<HashStringList> visitedUsings;
     1075    QSet<HashStringList> visitedUsings;
    10481076};
    10491077
     
    10791107    QualifyOneData *data = (QualifyOneData *)context;
    10801108    foreach (const HashStringList &use, ns->usings)
    1081         if (!data->visitedUsings.contains(use)) {
    1082             data->visitedUsings.insert(use);
    1083             if (qualifyOne(use.value(), use.value().count(), data->segment, data->resolved))
     1109        if (!data->visitedUsings->contains(use)) {
     1110            data->visitedUsings->insert(use);
     1111            if (qualifyOne(use.value(), use.value().count(), data->segment, data->resolved,
     1112                           data->visitedUsings))
    10841113                return true;
    10851114        }
     
    10881117
    10891118bool CppParser::qualifyOne(const NamespaceList &namespaces, int nsCnt, const HashString &segment,
    1090                            NamespaceList *resolved) const
    1091 {
    1092     QualifyOneData data(namespaces, nsCnt, segment, resolved);
     1119                           NamespaceList *resolved) const
     1120{
     1121    QualifyOneData data(namespaces, nsCnt, segment, resolved);
    10931122
    10941123    if (visitNamespace(namespaces, nsCnt, &CppParser::qualifyOneCallbackOwn, &data))
     
    10961125
    10971126    return visitNamespace(namespaces, nsCnt, &CppParser::qualifyOneCallbackUsing, &data);
     1127
     1128
     1129
     1130
     1131
     1132
     1133
     1134
    10981135}
    10991136
     
    15261563    yyTok = getToken();
    15271564    while (yyTok != Tok_Eof) {
     1565
     1566
     1567
     1568
     1569
     1570
    15281571        //qDebug() << "TOKEN: " << yyTok;
    15291572        switch (yyTok) {
     
    19932036                        context = comment.left(k);
    19942037                        comment.remove(0, k + 1);
    1995                         recordMessage(yyLineNo, context, QString(), comment, extracomment,
    1996                                       QString(), TranslatorMessage::ExtraData(), false, false);
     2038                        TranslatorMessage msg(
     2039                                transcode(context, false), QString(),
     2040                                transcode(comment, false), QString(),
     2041                                yyFileName, yyLineNo, QStringList(),
     2042                                TranslatorMessage::Finished, false);
     2043                        msg.setExtraComment(transcode(extracomment.simplified(), false));
    19972044                        extracomment.clear();
     2045
    19982046                        tor->setExtras(extra);
    19992047                        extra.clear();
     
    20662114            if (!yyParenDepth)
    20672115                prospectiveContext.clear();
     2116
     2117
     2118
    20682119        case_default:
    20692120            yyTok = getToken();
     
    20802131                 " (or abuse of the C++ preprocessor)\n",
    20812132                 qPrintable(yyFileName), yyParenLineNo);
     2133
     2134
     2135
     2136
    20822137}
    20832138
Note: See TracChangeset for help on using the changeset viewer.