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 @@
public enum StatementClass public enum StatementClass
{ {
Any, Any,
BinaryOperator,
DeclarationReference, DeclarationReference,
ConstructorReference, ConstructorReference,
CXXOperatorCall CXXOperatorCall

3
src/Core/Parser/ASTConverter.cs

@ -849,6 +849,9 @@ namespace CppSharp
expression.String = statement.String; expression.String = statement.String;
switch (statement.Class) switch (statement.Class)
{ {
case StatementClass.BinaryOperator:
expression.Class = AST.StatementClass.BinaryOperator;
break;
case StatementClass.DeclRefExprClass: case StatementClass.DeclRefExprClass:
expression.Class = AST.StatementClass.DeclarationReference; expression.Class = AST.StatementClass.DeclarationReference;
break; break;

1
src/CppParser/AST.h

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

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

@ -210,9 +210,10 @@ namespace CppSharp
public enum struct StatementClass public enum struct StatementClass
{ {
Any = 0, Any = 0,
DeclRefExprClass = 1, BinaryOperator = 1,
CXXConstructExprClass = 2, DeclRefExprClass = 2,
CXXOperatorCallExpr = 3 CXXConstructExprClass = 3,
CXXOperatorCallExpr = 4
}; };
public enum struct TemplateSpecializationKind public enum struct TemplateSpecializationKind

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

@ -134,9 +134,10 @@ namespace CppSharp
public enum StatementClass public enum StatementClass
{ {
Any = 0, Any = 0,
DeclRefExprClass = 1, BinaryOperator = 1,
CXXConstructExprClass = 2, DeclRefExprClass = 2,
CXXOperatorCallExpr = 3 CXXConstructExprClass = 3,
CXXOperatorCallExpr = 4
} }
public enum TemplateSpecializationKind public enum TemplateSpecializationKind

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

@ -134,9 +134,10 @@ namespace CppSharp
public enum StatementClass public enum StatementClass
{ {
Any = 0, Any = 0,
DeclRefExprClass = 1, BinaryOperator = 1,
CXXConstructExprClass = 2, DeclRefExprClass = 2,
CXXOperatorCallExpr = 3 CXXConstructExprClass = 3,
CXXOperatorCallExpr = 4
} }
public enum TemplateSpecializationKind public enum TemplateSpecializationKind

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

@ -134,9 +134,10 @@ namespace CppSharp
public enum StatementClass public enum StatementClass
{ {
Any = 0, Any = 0,
DeclRefExprClass = 1, BinaryOperator = 1,
CXXConstructExprClass = 2, DeclRefExprClass = 2,
CXXOperatorCallExpr = 3 CXXConstructExprClass = 3,
CXXOperatorCallExpr = 4
} }
public enum TemplateSpecializationKind public enum TemplateSpecializationKind

4
src/CppParser/Parser.cpp

@ -2455,6 +2455,8 @@ AST::Expression* Parser::WalkStatement(clang::Stmt* Statement)
switch (Statement->getStmtClass()) switch (Statement->getStmtClass())
{ {
case Stmt::BinaryOperatorClass:
return new AST::Expression(GetStringFromStatement(Statement), StatementClass::BinaryOperator);
case Stmt::DeclRefExprClass: case Stmt::DeclRefExprClass:
return new AST::Expression(GetStringFromStatement(Statement), StatementClass::DeclRefExprClass, return new AST::Expression(GetStringFromStatement(Statement), StatementClass::DeclRefExprClass,
WalkDeclaration(cast<DeclRefExpr>(Statement)->getDecl())); WalkDeclaration(cast<DeclRefExpr>(Statement)->getDecl()));
@ -2473,7 +2475,7 @@ AST::Expression* Parser::WalkStatement(clang::Stmt* Statement)
case Stmt::CXXTemporaryObjectExprClass: case Stmt::CXXTemporaryObjectExprClass:
{ {
auto ConstructorExpr = cast<CXXConstructExpr>(Statement); auto ConstructorExpr = cast<CXXConstructExpr>(Statement);
if (ConstructorExpr->getNumArgs() > 0) if (ConstructorExpr->getNumArgs() == 1)
{ {
auto Arg = ConstructorExpr->getArg(0); auto Arg = ConstructorExpr->getArg(0);
auto TemporaryExpr = dyn_cast<MaterializeTemporaryExpr>(Arg); auto TemporaryExpr = dyn_cast<MaterializeTemporaryExpr>(Arg);

5
src/Generator/Passes/HandleDefaultParamValuesPass.cs

@ -121,10 +121,9 @@ namespace CppSharp.Passes
} }
var call = parameter.DefaultArgument.Declaration as Function; var call = parameter.DefaultArgument.Declaration as Function;
if (call != null) if (call != null || parameter.DefaultArgument.Class == StatementClass.BinaryOperator)
{ {
string @params = string @params = regexFunctionParams.Match(parameter.DefaultArgument.String).Groups[1].Value;
regexFunctionParams.Match(parameter.DefaultArgument.String).Groups[1].Value;
if (@params.Contains("::")) if (@params.Contains("::"))
parameter.DefaultArgument.String = regexDoubleColon.Replace(@params, desugared + "."); parameter.DefaultArgument.String = regexDoubleColon.Replace(@params, desugared + ".");
else else

Loading…
Cancel
Save