Browse Source

Add support for C++ character literals (u, U, L) (#1434)

pull/1436/head
josetr 5 years ago committed by GitHub
parent
commit
a92337ba47
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 31
      src/CppParser/Parser.cpp
  2. 2
      tests/CSharp/CSharp.cpp
  3. 2
      tests/CSharp/CSharp.h

31
src/CppParser/Parser.cpp

@ -3654,13 +3654,30 @@ AST::ExpressionObsolete* Parser::WalkExpressionObsolete(const clang::Expr* Expr) @@ -3654,13 +3654,30 @@ AST::ExpressionObsolete* Parser::WalkExpressionObsolete(const clang::Expr* Expr)
break;
}
clang::Expr::EvalResult integer;
if (Expr->getStmtClass() != clang::Stmt::CharacterLiteralClass &&
Expr->getStmtClass() != clang::Stmt::CXXBoolLiteralExprClass &&
Expr->getStmtClass() != clang::Stmt::UnaryExprOrTypeTraitExprClass &&
!Expr->isValueDependent() &&
Expr->EvaluateAsInt(integer, c->getASTContext()))
return new AST::ExpressionObsolete(integer.Val.getInt().toString(10));
if (!Expr->isValueDependent())
{
clang::Expr::EvalResult integer;
if (Expr->getStmtClass() == clang::Stmt::CharacterLiteralClass)
{
auto result = GetStringFromStatement(Expr);
if (!result.empty() &&
result.front() != '\'' &&
Expr->EvaluateAsInt(integer, c->getASTContext()))
{
result = integer.Val.getInt().toString(10);
}
return new AST::ExpressionObsolete(result);
}
else if (Expr->getStmtClass() != clang::Stmt::CXXBoolLiteralExprClass &&
Expr->getStmtClass() != clang::Stmt::UnaryExprOrTypeTraitExprClass &&
Expr->EvaluateAsInt(integer, c->getASTContext())
)
{
return new AST::ExpressionObsolete(integer.Val.getInt().toString(10));
}
}
return new AST::ExpressionObsolete(GetStringFromStatement(Expr));
}

2
tests/CSharp/CSharp.cpp

@ -638,7 +638,7 @@ void MethodsWithDefaultValues::defaultValueType(QGenericArgument valueType) @@ -638,7 +638,7 @@ void MethodsWithDefaultValues::defaultValueType(QGenericArgument valueType)
{
}
void MethodsWithDefaultValues::defaultChar(char c)
void MethodsWithDefaultValues::defaultChar(char c, char uc, char Uc, char Lc)
{
}

2
tests/CSharp/CSharp.h

@ -433,7 +433,7 @@ public: @@ -433,7 +433,7 @@ public:
void defaultVoidStar(void* ptr = 0);
void defaultFunctionPointer(void(*functionPtr)(int p) = nullptr);
void defaultValueType(QGenericArgument valueType = QGenericArgument());
void defaultChar(char c = 'a');
void defaultChar(char c = 'a', char uc = u'u', char Uc = U'U', char Lc = L'L');
void defaultEmptyChar(char c = 0);
void defaultEmptyEnum(Empty e = Empty(-1));
void defaultRefTypeBeforeOthers(Foo foo = Foo(), int i = 5, Bar::Items item = Bar::Item2);

Loading…
Cancel
Save