[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/bindings/smokegenerator
From:       Arno Rehn <kde () arnorehn ! de>
Date:       2009-05-31 19:46:04
Message-ID: 1243799164.850334.3084.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 976067 by arnorehn:

some fixes for resolving types


 M  +23 -6     generatorvisitor.cpp  


--- trunk/playground/bindings/smokegenerator/generatorvisitor.cpp #976066:976067
@@ -59,14 +59,31 @@
 
 QPair<Class*, Typedef*> GeneratorVisitor::resolveType(const QString & name)
 {
+    // check for nested classes
+    for (int i = klass.count() - 1; i >= 0; i--) {
+        QString name = klass[i]->toString() + "::" + name;
+        if (classes.contains(name))
+            return qMakePair<Class*, Typedef*>(&classes[name], 0);
+        else if (typedefs.contains(name))
+            return qMakePair<Class*, Typedef*>(0, &typedefs[name]);
+    }
+    
     // check for 'using type;'
+    // if we use 'type', we can also access type::nested, take care of that
+    int index = name.indexOf("::");
+    QString first = name, rest;
+    if (index > -1) {
+        first = name.mid(0, index);
+        rest = name.mid(index);
+    }
     foreach (const QStringList& list, usingTypes) {
         foreach (const QString& string, list) {
-            if (string.endsWith(name)) {
-                if (classes.contains(string))
-                    return qMakePair<Class*, Typedef*>(&classes[string], 0);
-                else if (typedefs.contains(string))
-                    return qMakePair<Class*, Typedef*>(0, &typedefs[string]);
+            QString complete = string + rest;
+            if (string.endsWith(first)) {
+                if (classes.contains(complete))
+                    return qMakePair<Class*, Typedef*>(&classes[complete], 0);
+                else if (typedefs.contains(complete))
+                    return qMakePair<Class*, Typedef*>(0, &typedefs[complete]);
             }
         }
     }
@@ -391,7 +408,7 @@
         return;
     }
     // resolve the type in the current context
-    QPair<Class*, Typedef*> klass = resolveType(tc->qualifiedName().last());
+    QPair<Class*, Typedef*> klass = resolveType(tc->qualifiedName().join("::"));
     if (klass.first) {
         // it's a class
         currentType = Type(klass.first, tc->isConstant(), tc->isVolatile());

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic