Browse Source

Merge pull request #318 from ddobrev/master

Fixed the generation of default argument when a reference is assigned a value
pull/319/head
João Matos 11 years ago
parent
commit
23248be3dc
  1. 12
      src/CppParser/Parser.cpp
  2. 4
      tests/CSharpTemp/CSharpTemp.cpp
  3. 1
      tests/CSharpTemp/CSharpTemp.h

12
src/CppParser/Parser.cpp

@ -2467,12 +2467,16 @@ AST::Expression* Parser::WalkStatement(clang::Stmt* Statement) @@ -2467,12 +2467,16 @@ AST::Expression* Parser::WalkStatement(clang::Stmt* Statement)
case Stmt::ImplicitCastExprClass:
return WalkStatement(cast<CastExpr>(Statement)->getSubExprAsWritten());
case Stmt::CXXConstructExprClass:
case Stmt::CXXTemporaryObjectExprClass:
{
auto ConstructorExpr = cast<CXXConstructExpr>(Statement);
auto Arg = ConstructorExpr->getArg(0);
auto TemporaryExpr = dyn_cast<MaterializeTemporaryExpr>(Arg);
if (TemporaryExpr && isa<CastExpr>(TemporaryExpr->GetTemporaryExpr()))
return WalkStatement(TemporaryExpr->GetTemporaryExpr());
if (ConstructorExpr->getNumArgs() > 0)
{
auto Arg = ConstructorExpr->getArg(0);
auto TemporaryExpr = dyn_cast<MaterializeTemporaryExpr>(Arg);
if (TemporaryExpr && isa<CastExpr>(TemporaryExpr->GetTemporaryExpr()))
return WalkStatement(TemporaryExpr->GetTemporaryExpr());
}
return new AST::Expression(GetStringFromStatement(Statement), StatementClass::CXXConstructExprClass,
WalkDeclaration(ConstructorExpr->getConstructor()));
}

4
tests/CSharpTemp/CSharpTemp.cpp

@ -250,6 +250,10 @@ void MethodsWithDefaultValues::DefaultIntAssignedAnEnum(int i) @@ -250,6 +250,10 @@ void MethodsWithDefaultValues::DefaultIntAssignedAnEnum(int i)
{
}
void MethodsWithDefaultValues::DefaultRefAssignedValue(const Foo &fooRef)
{
}
void HasPrivateOverrideBase::privateOverride(int i)
{
}

1
tests/CSharpTemp/CSharpTemp.h

@ -197,6 +197,7 @@ public: @@ -197,6 +197,7 @@ public:
void DefaultRefTypeAfterOthers(int i = 5, Bar::Items item = Bar::Item2, Foo foo = Foo());
void DefaultRefTypeBeforeAndAfterOthers(int i = 5, Foo foo = Foo(), Bar::Items item = Bar::Item2, Baz baz = Baz());
void DefaultIntAssignedAnEnum(int i = Bar::Item1);
void DefaultRefAssignedValue(const Foo& fooRef = Foo());
};
class DLL_API HasPrivateOverrideBase

Loading…
Cancel
Save