Browse Source

Worked around a specific default argument construct used in Qt.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/322/head
Dimitar Dobrev 11 years ago
parent
commit
de4c551fda
  1. 8
      src/CppParser/Parser.cpp
  2. 5
      tests/CSharpTemp/CSharpTemp.cpp
  3. 1
      tests/CSharpTemp/CSharpTemp.cs
  4. 9
      tests/CSharpTemp/CSharpTemp.h

8
src/CppParser/Parser.cpp

@ -2479,8 +2479,12 @@ AST::Expression* Parser::WalkStatement(clang::Stmt* Statement) @@ -2479,8 +2479,12 @@ AST::Expression* Parser::WalkStatement(clang::Stmt* Statement)
{
auto Arg = ConstructorExpr->getArg(0);
auto TemporaryExpr = dyn_cast<MaterializeTemporaryExpr>(Arg);
if (TemporaryExpr && isa<CastExpr>(TemporaryExpr->GetTemporaryExpr()))
return WalkStatement(TemporaryExpr->GetTemporaryExpr());
if (TemporaryExpr)
{
auto Cast = dyn_cast<CastExpr>(TemporaryExpr->GetTemporaryExpr());
if (Cast && Cast->getSubExprAsWritten()->getStmtClass() != Stmt::IntegerLiteralClass)
return WalkStatement(Cast->getSubExprAsWritten());
}
}
return new AST::Expression(GetStringFromStatement(Statement), StatementClass::CXXConstructExprClass,
WalkDeclaration(ConstructorExpr->getConstructor()));

5
tests/CSharpTemp/CSharpTemp.cpp

@ -232,6 +232,11 @@ UntypedFlags operator|(UntypedFlags lhs, UntypedFlags rhs) @@ -232,6 +232,11 @@ UntypedFlags operator|(UntypedFlags lhs, UntypedFlags rhs)
return static_cast<UntypedFlags>(static_cast<int>(lhs) | static_cast<int>(rhs));
}
QGenericArgument::QGenericArgument(const char *name)
{
_name = name;
}
void MethodsWithDefaultValues::defaultPointer(Foo *ptr)
{
}

1
tests/CSharpTemp/CSharpTemp.cs

@ -81,6 +81,7 @@ namespace CppSharp.Tests @@ -81,6 +81,7 @@ namespace CppSharp.Tests
public override void Preprocess(Driver driver, ASTContext ctx)
{
ctx.SetClassAsValueType("TestCopyConstructorVal");
ctx.SetClassAsValueType("QGenericArgument");
}
public override void Postprocess(Driver driver, ASTContext ctx)

9
tests/CSharpTemp/CSharpTemp.h

@ -205,6 +205,14 @@ enum UntypedFlags @@ -205,6 +205,14 @@ enum UntypedFlags
UntypedFlags operator|(UntypedFlags lhs, UntypedFlags rhs);
struct QGenericArgument
{
public:
QGenericArgument(const char* name = 0);
private:
const char* _name;
};
class DLL_API MethodsWithDefaultValues
{
public:
@ -219,6 +227,7 @@ public: @@ -219,6 +227,7 @@ public:
void DefaultRefAssignedValue(const Foo& fooRef = Foo());
void defaultEnumAssignedBitwiseOr(Flags flags = Flags::Flag1 | Flags::Flag2);
void defaultEnumAssignedBitwiseOrShort(UntypedFlags flags = Flag1 | Flag2);
void defaultNonEmptyCtor(QGenericArgument arg = QGenericArgument(0));
void defaultMappedToEnum(QFlags<Flags> qFlags = Flags::Flag1);
};

Loading…
Cancel
Save