Browse Source

Handled built-in binary operators in default arguments.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/322/head
Dimitar Dobrev 12 years ago
parent
commit
3b8873022b
  1. 1
      src/AST/Statement.cs
  2. 3
      src/Core/Parser/ASTConverter.cs
  3. 1
      src/CppParser/AST.h
  4. 7
      src/CppParser/Bindings/CLI/AST.h
  5. 7
      src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs
  6. 7
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs
  7. 7
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs
  8. 4
      src/CppParser/Parser.cpp
  9. 5
      src/Generator/Passes/HandleDefaultParamValuesPass.cs

1
src/AST/Statement.cs

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
public enum StatementClass
{
Any,
BinaryOperator,
DeclarationReference,
ConstructorReference,
CXXOperatorCall

3
src/Core/Parser/ASTConverter.cs

@ -849,6 +849,9 @@ namespace CppSharp @@ -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;

1
src/CppParser/AST.h

@ -458,6 +458,7 @@ public: @@ -458,6 +458,7 @@ public:
enum class StatementClass
{
Any,
BinaryOperator,
DeclRefExprClass,
CXXConstructExprClass,
CXXOperatorCallExpr

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

@ -210,9 +210,10 @@ namespace CppSharp @@ -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

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

@ -134,9 +134,10 @@ namespace CppSharp @@ -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

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

@ -134,9 +134,10 @@ namespace CppSharp @@ -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

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

@ -134,9 +134,10 @@ namespace CppSharp @@ -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

4
src/CppParser/Parser.cpp

@ -2455,6 +2455,8 @@ AST::Expression* Parser::WalkStatement(clang::Stmt* Statement) @@ -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<DeclRefExpr>(Statement)->getDecl()));
@ -2473,7 +2475,7 @@ AST::Expression* Parser::WalkStatement(clang::Stmt* Statement) @@ -2473,7 +2475,7 @@ AST::Expression* Parser::WalkStatement(clang::Stmt* Statement)
case Stmt::CXXTemporaryObjectExprClass:
{
auto ConstructorExpr = cast<CXXConstructExpr>(Statement);
if (ConstructorExpr->getNumArgs() > 0)
if (ConstructorExpr->getNumArgs() == 1)
{
auto Arg = ConstructorExpr->getArg(0);
auto TemporaryExpr = dyn_cast<MaterializeTemporaryExpr>(Arg);

5
src/Generator/Passes/HandleDefaultParamValuesPass.cs

@ -121,10 +121,9 @@ namespace CppSharp.Passes @@ -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

Loading…
Cancel
Save