Browse Source

Remove useless creation of managed std::strings

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1241/head
Dimitar Dobrev 6 years ago
parent
commit
6e963c1033
  1. 5
      src/CppParser/Parser.cpp
  2. 22
      src/Generator/Types/Std/Stdlib.cs

5
src/CppParser/Parser.cpp

@ -934,11 +934,10 @@ bool Parser::IsSupported(const clang::CXXMethodDecl* MD) @@ -934,11 +934,10 @@ bool Parser::IsSupported(const clang::CXXMethodDecl* MD)
auto CopyCtor = llvm::dyn_cast<CXXConstructorDecl>(MD);
return !c->getSourceManager().isInSystemHeader(MD->getBeginLoc()) ||
(CopyCtor && (MD->getNumParams() == 0 ||
(CopyCtor->isCopyConstructor() && !CopyCtor->isTrivial()))) ||
(isa<CXXConstructorDecl>(MD) && MD->getNumParams() == 0) ||
isa<CXXDestructorDecl>(MD) ||
(MD->getDeclName().isIdentifier() &&
((MD->getName() == "c_str" && MD->getNumParams() == 0) ||
((MD->getName() == "data" && MD->getNumParams() == 0) ||
(MD->getName() == "assign" && MD->getNumParams() == 1 &&
MD->parameters()[0]->getType()->isPointerType())) &&
supportedStdTypes.find(MD->getParent()->getName()) !=

22
src/Generator/Types/Std/Stdlib.cs

@ -374,27 +374,17 @@ namespace CppSharp.Types.Std @@ -374,27 +374,17 @@ namespace CppSharp.Types.Std
{
var type = Type.Desugar(resolveTemplateSubstitution: false);
ClassTemplateSpecialization basicString = GetBasicString(type);
var c_str = basicString.Methods.First(m => m.OriginalName == "c_str");
var data = basicString.Methods.First(m => m.OriginalName == "data");
var typePrinter = new CSharpTypePrinter(ctx.Context);
string qualifiedBasicString = GetQualifiedBasicString(basicString);
string varBasicString = $"__basicStringRet{ctx.ParameterIndex}";
bool usePointer = type.IsAddress() || ctx.MarshalKind == MarshalKind.NativeField;
ctx.Before.WriteLine($@"var {varBasicString} = {
basicString.Visit(typePrinter)}.{Helpers.CreateInstanceIdentifier}({
ctx.ReturnVarName});");
if (type.IsAddress())
{
ctx.Return.Write($@"{qualifiedBasicString}Extensions.{c_str.Name}({
varBasicString})");
}
else
{
string varString = $"__stringRet{ctx.ParameterIndex}";
ctx.Before.WriteLine($@"var {varString} = {
qualifiedBasicString}Extensions.{c_str.Name}({varBasicString});");
ctx.Before.WriteLine($@"{varBasicString}.Dispose({
(ctx.MarshalKind == MarshalKind.NativeField ? "false" : string.Empty)});");
ctx.Return.Write(varString);
}
(usePointer ? string.Empty : $"new {typePrinter.IntPtrType}(&")}{
ctx.ReturnVarName}{(usePointer ? string.Empty : ")")});");
ctx.Return.Write($@"{qualifiedBasicString}Extensions.{data.Name}({
varBasicString})");
}
private static string GetQualifiedBasicString(ClassTemplateSpecialization basicString)

Loading…
Cancel
Save