diff --git a/src/AST/Statement.cs b/src/AST/Statement.cs index 630565c9..3f8e1a68 100644 --- a/src/AST/Statement.cs +++ b/src/AST/Statement.cs @@ -3,6 +3,7 @@ public enum StatementClass { Any, + BinaryOperator, DeclarationReference, ConstructorReference, CXXOperatorCall diff --git a/src/Core/Parser/ASTConverter.cs b/src/Core/Parser/ASTConverter.cs index eca866a6..4197a82d 100644 --- a/src/Core/Parser/ASTConverter.cs +++ b/src/Core/Parser/ASTConverter.cs @@ -849,6 +849,9 @@ namespace CppSharp expression.String = statement.String; switch (statement.Class) { + case StatementClass.BinaryOperator: + expression.Class = AST.StatementClass.BinaryOperator; + break; case StatementClass.DeclRefExprClass: expression.Class = AST.StatementClass.DeclarationReference; break; diff --git a/src/CppParser/AST.h b/src/CppParser/AST.h index 05e6ee19..fed306ea 100644 --- a/src/CppParser/AST.h +++ b/src/CppParser/AST.h @@ -458,6 +458,7 @@ public: enum class StatementClass { Any, + BinaryOperator, DeclRefExprClass, CXXConstructExprClass, CXXOperatorCallExpr diff --git a/src/CppParser/Bindings/CLI/AST.h b/src/CppParser/Bindings/CLI/AST.h index da6964c7..47e2c2ef 100644 --- a/src/CppParser/Bindings/CLI/AST.h +++ b/src/CppParser/Bindings/CLI/AST.h @@ -210,9 +210,10 @@ namespace CppSharp public enum struct StatementClass { Any = 0, - DeclRefExprClass = 1, - CXXConstructExprClass = 2, - CXXOperatorCallExpr = 3 + BinaryOperator = 1, + DeclRefExprClass = 2, + CXXConstructExprClass = 3, + CXXOperatorCallExpr = 4 }; public enum struct TemplateSpecializationKind diff --git a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs index 3d80a940..321b67c4 100644 --- a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs +++ b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs @@ -134,9 +134,10 @@ namespace CppSharp public enum StatementClass { Any = 0, - DeclRefExprClass = 1, - CXXConstructExprClass = 2, - CXXOperatorCallExpr = 3 + BinaryOperator = 1, + DeclRefExprClass = 2, + CXXConstructExprClass = 3, + CXXOperatorCallExpr = 4 } public enum TemplateSpecializationKind diff --git a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs index 06c0fc99..559495c1 100644 --- a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs +++ b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs @@ -134,9 +134,10 @@ namespace CppSharp public enum StatementClass { Any = 0, - DeclRefExprClass = 1, - CXXConstructExprClass = 2, - CXXOperatorCallExpr = 3 + BinaryOperator = 1, + DeclRefExprClass = 2, + CXXConstructExprClass = 3, + CXXOperatorCallExpr = 4 } public enum TemplateSpecializationKind diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs index 727d7aae..5afc3b93 100644 --- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs +++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs @@ -134,9 +134,10 @@ namespace CppSharp public enum StatementClass { Any = 0, - DeclRefExprClass = 1, - CXXConstructExprClass = 2, - CXXOperatorCallExpr = 3 + BinaryOperator = 1, + DeclRefExprClass = 2, + CXXConstructExprClass = 3, + CXXOperatorCallExpr = 4 } public enum TemplateSpecializationKind diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index 13934c38..a60873d1 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -2455,6 +2455,8 @@ AST::Expression* Parser::WalkStatement(clang::Stmt* Statement) switch (Statement->getStmtClass()) { + case Stmt::BinaryOperatorClass: + return new AST::Expression(GetStringFromStatement(Statement), StatementClass::BinaryOperator); case Stmt::DeclRefExprClass: return new AST::Expression(GetStringFromStatement(Statement), StatementClass::DeclRefExprClass, WalkDeclaration(cast(Statement)->getDecl())); @@ -2473,7 +2475,7 @@ AST::Expression* Parser::WalkStatement(clang::Stmt* Statement) case Stmt::CXXTemporaryObjectExprClass: { auto ConstructorExpr = cast(Statement); - if (ConstructorExpr->getNumArgs() > 0) + if (ConstructorExpr->getNumArgs() == 1) { auto Arg = ConstructorExpr->getArg(0); auto TemporaryExpr = dyn_cast(Arg); diff --git a/src/Generator/Passes/HandleDefaultParamValuesPass.cs b/src/Generator/Passes/HandleDefaultParamValuesPass.cs index 8dc8a6e5..332a9dff 100644 --- a/src/Generator/Passes/HandleDefaultParamValuesPass.cs +++ b/src/Generator/Passes/HandleDefaultParamValuesPass.cs @@ -121,10 +121,9 @@ namespace CppSharp.Passes } var call = parameter.DefaultArgument.Declaration as Function; - if (call != null) + if (call != null || parameter.DefaultArgument.Class == StatementClass.BinaryOperator) { - string @params = - regexFunctionParams.Match(parameter.DefaultArgument.String).Groups[1].Value; + string @params = regexFunctionParams.Match(parameter.DefaultArgument.String).Groups[1].Value; if (@params.Contains("::")) parameter.DefaultArgument.String = regexDoubleColon.Replace(@params, desugared + "."); else