Browse Source

Misc changes (#1710)

* Minor code refactoring for re-use.

* Add Class.FindVariable helper method.

* Upgrade to .NET 6.
pull/1712/head
João Matos 2 years ago committed by GitHub
parent
commit
db7949b263
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      build/Helpers.lua
  2. 5
      src/AST/Class.cs
  3. 1
      src/CLI/CppSharp.CLI.csproj
  4. 4
      src/Generator/Generators/C/CppTypePrinter.cs
  5. 6
      src/Generator/Generators/CodeGenerator.cs
  6. 32
      src/Generator/Generators/NAPI/NAPIHelpers.cs
  7. 9
      src/Generator/Generators/NAPI/NAPISources.cs
  8. 2
      src/Generator/Generators/QuickJS/QuickJSSources.cs

2
build/Helpers.lua

@ -61,7 +61,7 @@ msvc_cpp_defines = { }
default_gcc_version = "9.0.0" default_gcc_version = "9.0.0"
generate_build_config = true generate_build_config = true
premake.path = premake.path .. ";" .. path.join(builddir, "modules") premake.path = premake.path .. ";" .. path.join(builddir, "modules")
targetframework = "netcoreapp3.1" targetframework = "net6.0"
function string.starts(str, start) function string.starts(str, start)
if str == nil then return end if str == nil then return end

5
src/AST/Class.cs

@ -286,6 +286,11 @@ namespace CppSharp.AST
.FirstOrDefault(m => m.USR == usr); .FirstOrDefault(m => m.USR == usr);
} }
public Variable FindVariable(string name)
{
return Variables.FirstOrDefault(m => m.Name == name);
}
public override T Visit<T>(IDeclVisitor<T> visitor) public override T Visit<T>(IDeclVisitor<T> visitor)
{ {
return visitor.VisitClassDecl(this); return visitor.VisitClassDecl(this);

1
src/CLI/CppSharp.CLI.csproj

@ -1,6 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

4
src/Generator/Generators/C/CppTypePrinter.cs

@ -584,6 +584,7 @@ namespace CppSharp.Generators.C
args.Add(arg.Type.Visit(this)); args.Add(arg.Type.Visit(this));
break; break;
case TemplateArgument.ArgumentKind.Declaration: case TemplateArgument.ArgumentKind.Declaration:
if (arg.Declaration != null)
args.Add(arg.Declaration.Visit(this)); args.Add(arg.Declaration.Visit(this));
break; break;
case TemplateArgument.ArgumentKind.Integral: case TemplateArgument.ArgumentKind.Integral:
@ -596,6 +597,7 @@ namespace CppSharp.Generators.C
{ {
args.Add(arg.Integral.ToString(CultureInfo.InvariantCulture)); args.Add(arg.Integral.ToString(CultureInfo.InvariantCulture));
} }
break; break;
} }
} }
@ -634,7 +636,7 @@ namespace CppSharp.Generators.C
CppSharp.AST.Type desugared = function.FunctionType.Type.Desugar(); CppSharp.AST.Type desugared = function.FunctionType.Type.Desugar();
if (!desugared.IsPointerTo(out functionType)) if (!desugared.IsPointerTo(out functionType))
functionType = (FunctionType)desugared; functionType = (FunctionType)desugared;
string exceptionType = Print(functionType.ExceptionSpecType); string exceptionType = functionType != null ? Print(functionType.ExceptionSpecType) : "";
var @return = function.OriginalReturnType.Visit(this); var @return = function.OriginalReturnType.Visit(this);
@return.Name = @class + name; @return.Name = @class + name;

6
src/Generator/Generators/CodeGenerator.cs

@ -316,7 +316,7 @@ namespace CppSharp.Generators
property.Visit(this); property.Visit(this);
} }
VisitClassConstructors(@class); VisitClassConstructors(@class.Constructors.Where(c => !ASTUtils.CheckIgnoreMethod(c)));
VisitClassMethods(@class); VisitClassMethods(@class);
return true; return true;
@ -333,9 +333,9 @@ namespace CppSharp.Generators
} }
} }
public virtual void VisitClassConstructors(Class @class) public virtual void VisitClassConstructors(IEnumerable<Method> constructors)
{ {
foreach (var ctor in @class.Constructors.Where(c => !ASTUtils.CheckIgnoreMethod(c))) foreach (var ctor in constructors)
{ {
ctor.Visit(this); ctor.Visit(this);
} }

32
src/Generator/Generators/NAPI/NAPIHelpers.cs

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.IO;
using System.Linq; using System.Linq;
using CppSharp.AST; using CppSharp.AST;
using CppSharp.AST.Extensions; using CppSharp.AST.Extensions;
@ -9,11 +10,9 @@ using CppSharp.Generators.NAPI;
namespace CppSharp.Generators.Cpp namespace CppSharp.Generators.Cpp
{ {
public class NAPICodeGenerator : CCodeGenerator public class MethodGroupCodeGenerator : CCodeGenerator
{ {
public override string FileExtension => "cpp"; protected MethodGroupCodeGenerator(BindingContext context, IEnumerable<TranslationUnit> units)
public NAPICodeGenerator(BindingContext context, IEnumerable<TranslationUnit> units)
: base(context, units) : base(context, units)
{ {
} }
@ -43,9 +42,9 @@ namespace CppSharp.Generators.Cpp
return VisitClassDeclContext(@class); return VisitClassDeclContext(@class);
} }
public override void VisitClassConstructors(Class @class) public override void VisitClassConstructors(IEnumerable<Method> ctors)
{ {
var constructors = @class.Constructors.Where(c => c.IsGenerated && !c.IsCopyConstructor) var constructors = ctors.Where(c => c.IsGenerated && !c.IsCopyConstructor)
.ToList(); .ToList();
if (!constructors.Any()) if (!constructors.Any())
@ -59,7 +58,7 @@ namespace CppSharp.Generators.Cpp
if (!function.IsGenerated) if (!function.IsGenerated)
return false; return false;
if (!(function is Method method)) if (function is not Method method)
return true; return true;
if (method.IsConstructor || method.IsDestructor) if (method.IsConstructor || method.IsDestructor)
@ -88,10 +87,27 @@ namespace CppSharp.Generators.Cpp
foreach (var method in @group) foreach (var method in @group)
{ {
method.Visit(this); method.Visit(this);
return;
} }
} }
public static string GetTranslationUnitName(TranslationUnit unit)
{
var paths = unit.FileRelativePath.Split('/').ToList();
paths = paths.Select(p => Path.GetFileNameWithoutExtension(p.ToLowerInvariant())).ToList();
var name = string.Join('_', paths);
return name;
}
}
public class NAPICodeGenerator : MethodGroupCodeGenerator
{
public override string FileExtension => "cpp";
public NAPICodeGenerator(BindingContext context, IEnumerable<TranslationUnit> units)
: base(context, units)
{
}
public virtual MarshalPrinter<MarshalContext, CppTypePrinter> GetMarshalManagedToNativePrinter(MarshalContext ctx) public virtual MarshalPrinter<MarshalContext, CppTypePrinter> GetMarshalManagedToNativePrinter(MarshalContext ctx)
{ {
return new NAPIMarshalManagedToNativePrinter(ctx); return new NAPIMarshalManagedToNativePrinter(ctx);

9
src/Generator/Generators/NAPI/NAPISources.cs

@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using CppSharp.AST; using CppSharp.AST;
@ -24,14 +23,6 @@ namespace CppSharp.Generators.Cpp
{ {
} }
public static string GetTranslationUnitName(TranslationUnit unit)
{
var paths = unit.FileRelativePath.Split('/').ToList();
paths = paths.Select(p => Path.GetFileNameWithoutExtension(p.ToLowerInvariant())).ToList();
var name = string.Join('_', paths);
return name;
}
public override void Process() public override void Process()
{ {
GenerateFilePreamble(CommentKind.BCPL); GenerateFilePreamble(CommentKind.BCPL);

2
src/Generator/Generators/QuickJS/QuickJSSources.cs

@ -198,7 +198,7 @@ namespace CppSharp.Generators.Cpp
{ {
} }
public override void VisitClassConstructors(Class @class) public override void VisitClassConstructors(IEnumerable<Method> ctors)
{ {
} }

Loading…
Cancel
Save