Browse Source

Fix clang assert

pull/1919/head
duckdoom5 4 months ago
parent
commit
b2786f8d9d
  1. 16
      src/CppParser/Bootstrap/StmtCodeGenerators.cs
  2. 3
      src/CppParser/ParseExpr.cpp

16
src/CppParser/Bootstrap/StmtCodeGenerators.cs

@ -341,8 +341,20 @@ namespace CppSharp @@ -341,8 +341,20 @@ namespace CppSharp
WriteLine($"_S->{fieldName} = static_cast<AST::{typeName}>(" +
$"WalkStatement(S->{methodName}()));");
else if (typeName.Contains("Expr"))
WriteLine($"_S->{fieldName} = static_cast<AST::{typeName}>(" +
$"WalkExpression(S->{methodName}()));");
{
var expr = $"_S->{fieldName} = static_cast<AST::{typeName}>(WalkExpression(S->{methodName}()));";
if (fieldName == "base" && typeName is "CXXDependentScopeMemberExpr")
{
// Clang asserts that 'getBase()' is not called when 'isImplicitAccess()' returns true
WriteLine("if (!S->isImplicitAccess())");
WriteLineIndent(expr);
}
else
{
WriteLine(expr);
}
}
else if (fieldName == "guidDecl")
WriteLine($"_S->{fieldName} = S->getGuidDecl()->getNameAsString();");
else if (typeName.Contains("Decl") || typeName.Contains("Method") ||

3
src/CppParser/ParseExpr.cpp

@ -2426,7 +2426,8 @@ AST::Expr* Parser::WalkExpression(const clang::Expr* Expr) @@ -2426,7 +2426,8 @@ AST::Expr* Parser::WalkExpression(const clang::Expr* Expr)
_S->refersToMatrixElement = S->refersToMatrixElement();
_S->hasPlaceholderType = S->hasPlaceholderType();
_S->isImplicitAccess = S->isImplicitAccess();
_S->base = static_cast<AST::Expr*>(WalkExpression(S->getBase()));
if (!S->isImplicitAccess())
_S->base = static_cast<AST::Expr*>(WalkExpression(S->getBase()));
_S->baseType = GetQualifiedType(S->getBaseType());
_S->isArrow = S->isArrow();
_S->firstQualifierFoundInScope = static_cast<AST::Declaration*>(WalkDeclaration(S->getFirstQualifierFoundInScope()));

Loading…
Cancel
Save