Browse Source

Added support for decltype types.

pull/232/merge
triton 12 years ago
parent
commit
6edcb8dd44
  1. 6
      src/CppParser/Parser.cpp
  2. 6
      src/Parser/Parser.cpp
  3. 7
      tests/Basic/Basic.Tests.cs
  4. 7
      tests/Basic/Basic.h

6
src/CppParser/Parser.cpp

@ -1685,6 +1685,12 @@ Type* Parser::WalkType(clang::QualType QualType, clang::TypeLoc* TL, @@ -1685,6 +1685,12 @@ Type* Parser::WalkType(clang::QualType QualType, clang::TypeLoc* TL,
// TODO: stubbed
Ty = new PackExpansionType();
}
case clang::Type::Decltype:
{
auto DT = Type->getAs<clang::DecltypeType>();
Ty = WalkType(DT->getUnderlyingType());
break;
}
default:
{
Debug("Unhandled type class '%s'\n", Type->getTypeClassName());

6
src/Parser/Parser.cpp

@ -1693,6 +1693,12 @@ CppSharp::AST::Type^ Parser::WalkType(clang::QualType QualType, clang::TypeLoc* @@ -1693,6 +1693,12 @@ CppSharp::AST::Type^ Parser::WalkType(clang::QualType QualType, clang::TypeLoc*
Ty = gcnew CppSharp::AST::PackExpansionType();
break;
}
case Type::Decltype:
{
auto DT = Type->getAs<clang::DecltypeType>();
Ty = WalkType(DT->getUnderlyingType());
break;
}
default:
{
Debug("Unhandled type class '%s'\n", Type->getTypeClassName());

7
tests/Basic/Basic.Tests.cs

@ -301,6 +301,13 @@ public class BasicTests : GeneratorTestFixture @@ -301,6 +301,13 @@ public class BasicTests : GeneratorTestFixture
Assert.AreEqual(classA.Value, classB.Value);
ClassC classC = (ClassC)classB;
Assert.AreEqual(classB.Value, classC.Value);
}
[Test]
public unsafe void TestDecltype()
{
var ret = basic.TestDecltype();
Assert.AreEqual(0, ret);
}
}

7
tests/Basic/Basic.h

@ -447,3 +447,10 @@ public: @@ -447,3 +447,10 @@ public:
explicit ClassC(const ClassB& x) { Value = x.Value; }
int Value;
};
// Test decltype
int Expr = 0;
DLL_API decltype(Expr) TestDecltype()
{
return Expr;
}
Loading…
Cancel
Save