Browse Source

Fixed the wrapping of bit masks in default arguments.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>

Conflicts:
	src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs
pull/322/head
Dimitar Dobrev 12 years ago
parent
commit
88a88599e7
  1. 3
      src/AST/Statement.cs
  2. 3
      src/Core/Parser/ASTConverter.cs
  3. 3
      src/CppParser/AST.h
  4. 3
      src/CppParser/Bindings/CLI/AST.h
  5. 3
      src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs
  6. 3
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs
  7. 3
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs
  8. 3
      src/CppParser/Parser.cpp
  9. 6
      src/Generator/Passes/HandleDefaultParamValuesPass.cs
  10. 10
      tests/CSharpTemp/CSharpTemp.cpp
  11. 20
      tests/CSharpTemp/CSharpTemp.h

3
src/AST/Statement.cs

@ -4,7 +4,8 @@
{ {
Any, Any,
DeclarationReference, DeclarationReference,
ConstructorReference ConstructorReference,
CXXOperatorCall
} }
public abstract class Statement public abstract class Statement

3
src/Core/Parser/ASTConverter.cs

@ -855,6 +855,9 @@ namespace CppSharp
case StatementClass.CXXConstructExprClass: case StatementClass.CXXConstructExprClass:
expression.Class = AST.StatementClass.ConstructorReference; expression.Class = AST.StatementClass.ConstructorReference;
break; break;
case StatementClass.CXXOperatorCallExpr:
expression.Class = AST.StatementClass.CXXOperatorCall;
break;
} }
return expression; return expression;
} }

3
src/CppParser/AST.h

@ -459,7 +459,8 @@ enum class StatementClass
{ {
Any, Any,
DeclRefExprClass, DeclRefExprClass,
CXXConstructExprClass CXXConstructExprClass,
CXXOperatorCallExpr
}; };
class CS_API Statement class CS_API Statement

3
src/CppParser/Bindings/CLI/AST.h

@ -211,7 +211,8 @@ namespace CppSharp
{ {
Any = 0, Any = 0,
DeclRefExprClass = 1, DeclRefExprClass = 1,
CXXConstructExprClass = 2 CXXConstructExprClass = 2,
CXXOperatorCallExpr = 3
}; };
public enum struct TemplateSpecializationKind public enum struct TemplateSpecializationKind

3
src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs

@ -135,7 +135,8 @@ namespace CppSharp
{ {
Any = 0, Any = 0,
DeclRefExprClass = 1, DeclRefExprClass = 1,
CXXConstructExprClass = 2 CXXConstructExprClass = 2,
CXXOperatorCallExpr = 3
} }
public enum TemplateSpecializationKind public enum TemplateSpecializationKind

3
src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs

@ -135,7 +135,8 @@ namespace CppSharp
{ {
Any = 0, Any = 0,
DeclRefExprClass = 1, DeclRefExprClass = 1,
CXXConstructExprClass = 2 CXXConstructExprClass = 2,
CXXOperatorCallExpr = 3
} }
public enum TemplateSpecializationKind public enum TemplateSpecializationKind

3
src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs

@ -135,7 +135,8 @@ namespace CppSharp
{ {
Any = 0, Any = 0,
DeclRefExprClass = 1, DeclRefExprClass = 1,
CXXConstructExprClass = 2 CXXConstructExprClass = 2,
CXXOperatorCallExpr = 3
} }
public enum TemplateSpecializationKind public enum TemplateSpecializationKind

3
src/CppParser/Parser.cpp

@ -2466,6 +2466,9 @@ AST::Expression* Parser::WalkStatement(clang::Stmt* Statement)
case Stmt::CXXStaticCastExprClass: case Stmt::CXXStaticCastExprClass:
case Stmt::ImplicitCastExprClass: case Stmt::ImplicitCastExprClass:
return WalkStatement(cast<CastExpr>(Statement)->getSubExprAsWritten()); return WalkStatement(cast<CastExpr>(Statement)->getSubExprAsWritten());
case Stmt::CXXOperatorCallExprClass:
return new AST::Expression(GetStringFromStatement(Statement), StatementClass::CXXOperatorCallExpr,
WalkDeclaration(cast<CXXOperatorCallExpr>(Statement)->getCalleeDecl()));
case Stmt::CXXConstructExprClass: case Stmt::CXXConstructExprClass:
case Stmt::CXXTemporaryObjectExprClass: case Stmt::CXXTemporaryObjectExprClass:
{ {

6
src/Generator/Passes/HandleDefaultParamValuesPass.cs

@ -13,7 +13,7 @@ namespace CppSharp.Passes
{ {
public class HandleDefaultParamValuesPass : TranslationUnitPass public class HandleDefaultParamValuesPass : TranslationUnitPass
{ {
private static readonly Regex regexFunctionParams = new Regex(@"\((.+)\)", RegexOptions.Compiled); private static readonly Regex regexFunctionParams = new Regex(@"\(?(.+)\)?", RegexOptions.Compiled);
private static readonly Regex regexDoubleColon = new Regex(@"\w+::", RegexOptions.Compiled); private static readonly Regex regexDoubleColon = new Regex(@"\w+::", RegexOptions.Compiled);
private static readonly Regex regexName = new Regex(@"(\w+)", RegexOptions.Compiled); private static readonly Regex regexName = new Regex(@"(\w+)", RegexOptions.Compiled);
@ -120,8 +120,8 @@ namespace CppSharp.Passes
return true; return true;
} }
var call = parameter.DefaultArgument.Declaration as Method; var call = parameter.DefaultArgument.Declaration as Function;
if (call != null && call.IsConstructor) if (call != null)
{ {
string @params = string @params =
regexFunctionParams.Match(parameter.DefaultArgument.String).Groups[1].Value; regexFunctionParams.Match(parameter.DefaultArgument.String).Groups[1].Value;

10
tests/CSharpTemp/CSharpTemp.cpp

@ -222,6 +222,16 @@ TestCopyConstructorVal::TestCopyConstructorVal(const TestCopyConstructorVal& oth
B = other.B; B = other.B;
} }
Flags operator|(Flags lhs, Flags rhs)
{
return static_cast<Flags>(static_cast<int>(lhs) | static_cast<int>(rhs));
}
UntypedFlags operator|(UntypedFlags lhs, UntypedFlags rhs)
{
return static_cast<UntypedFlags>(static_cast<int>(lhs) | static_cast<int>(rhs));
}
void MethodsWithDefaultValues::DefaultPointer(Foo *ptr) void MethodsWithDefaultValues::DefaultPointer(Foo *ptr)
{ {
} }

20
tests/CSharpTemp/CSharpTemp.h

@ -187,6 +187,24 @@ struct DLL_API ValueType
{ {
}; };
enum class Flags
{
Flag1 = 1,
Flag2 = 2,
Flag3 = 4
};
DLL_API Flags operator|(Flags lhs, Flags rhs);
enum UntypedFlags
{
Flag1 = 1,
Flag2 = 2,
Flag3 = 4
};
UntypedFlags operator|(UntypedFlags lhs, UntypedFlags rhs);
class DLL_API MethodsWithDefaultValues class DLL_API MethodsWithDefaultValues
{ {
public: public:
@ -198,6 +216,8 @@ public:
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()); void DefaultRefAssignedValue(const Foo& fooRef = Foo());
void DefaultEnumAssignedBitwiseOr(Flags flags = Flags::Flag1 | Flags::Flag2);
void DefaultEnumAssignedBitwiseOrShort(UntypedFlags flags = Flag1 | Flag2);
}; };
class DLL_API HasPrivateOverrideBase class DLL_API HasPrivateOverrideBase

Loading…
Cancel
Save