Browse Source

Fixed regression when parsing class templates.

First introduced in f2de736f81.

Thanks to @golddranks for providing the test case.

Closes issue #409.
pull/413/head
triton 10 years ago
parent
commit
bf9fb64120
  1. 5
      src/CppParser/Parser.cpp
  2. 6
      tests/CSharpTemp/CSharpTemp.Tests.cs
  3. 35
      tests/CSharpTemp/CSharpTemp.h

5
src/CppParser/Parser.cpp

@ -983,8 +983,9 @@ ClassTemplate* Parser::WalkClassTemplate(clang::ClassTemplateDecl* TD) @@ -983,8 +983,9 @@ ClassTemplate* Parser::WalkClassTemplate(clang::ClassTemplateDecl* TD)
NS->Templates.push_back(CT);
bool Process;
CT->TemplatedDecl = GetRecord(TD->getTemplatedDecl(), Process);
WalkRecordCXX(TD->getTemplatedDecl());
auto RC = GetRecord(TD->getTemplatedDecl(), Process);
CT->TemplatedDecl = RC;
WalkRecordCXX(TD->getTemplatedDecl(), RC);
CT->Parameters = WalkTemplateParameterList(TD->getTemplateParameters());

6
tests/CSharpTemp/CSharpTemp.Tests.cs

@ -200,4 +200,10 @@ public class CSharpTempTests : GeneratorTestFixture @@ -200,4 +200,10 @@ public class CSharpTempTests : GeneratorTestFixture
var res = c.Get();
Assert.That(res, Is.EqualTo(50));
}
[Test]
public void TestInnerClasses()
{
QMap.Iterator test_iter;
}
}

35
tests/CSharpTemp/CSharpTemp.h

@ -359,3 +359,38 @@ private: @@ -359,3 +359,38 @@ private:
int simplePrivateField;
Foo complexPrivateField;
};
template <class Key, class T>
class QMap
{
struct Node
{
Key key;
T value;
};
public:
QMap(const QMap<Key, T> &other);
class const_iterator;
class iterator
{
public:
int test() {
return 1;
}
friend class const_iterator;
friend class QMap<Key, T>;
};
friend class iterator;
class const_iterator
{
friend class iterator;
friend class QMap<Key, T>;
};
friend class const_iterator;
};
Loading…
Cancel
Save