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)
case Stmt::ImplicitCastExprClass: case Stmt::ImplicitCastExprClass:
return WalkStatement(cast<CastExpr>(Statement)->getSubExprAsWritten()); return WalkStatement(cast<CastExpr>(Statement)->getSubExprAsWritten());
case Stmt::CXXConstructExprClass: case Stmt::CXXConstructExprClass:
case Stmt::CXXTemporaryObjectExprClass:
{ {
auto ConstructorExpr = cast<CXXConstructExpr>(Statement); auto ConstructorExpr = cast<CXXConstructExpr>(Statement);
auto Arg = ConstructorExpr->getArg(0); if (ConstructorExpr->getNumArgs() > 0)
auto TemporaryExpr = dyn_cast<MaterializeTemporaryExpr>(Arg); {
if (TemporaryExpr && isa<CastExpr>(TemporaryExpr->GetTemporaryExpr())) auto Arg = ConstructorExpr->getArg(0);
return WalkStatement(TemporaryExpr->GetTemporaryExpr()); auto TemporaryExpr = dyn_cast<MaterializeTemporaryExpr>(Arg);
if (TemporaryExpr && isa<CastExpr>(TemporaryExpr->GetTemporaryExpr()))
return WalkStatement(TemporaryExpr->GetTemporaryExpr());
}
return new AST::Expression(GetStringFromStatement(Statement), StatementClass::CXXConstructExprClass, return new AST::Expression(GetStringFromStatement(Statement), StatementClass::CXXConstructExprClass,
WalkDeclaration(ConstructorExpr->getConstructor())); WalkDeclaration(ConstructorExpr->getConstructor()));
} }

4
tests/CSharpTemp/CSharpTemp.cpp

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

1
tests/CSharpTemp/CSharpTemp.h

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

Loading…
Cancel
Save