Browse Source

Add initial NAPI and JS generator.

pull/1517/head
Joao Matos 5 years ago committed by João Matos
parent
commit
b4cece4601
  1. 2
      src/Generator/Driver.cs
  2. 3
      src/Generator/Generator.cs
  3. 72
      src/Generator/Generators/C/NAPI/NAPIGenerator.cs
  4. 23
      src/Generator/Generators/C/NAPI/NAPIHeaders.cs
  5. 43
      src/Generator/Generators/C/NAPI/NAPIModule.cs
  6. 23
      src/Generator/Generators/C/NAPI/NAPISources.cs
  7. 1
      src/Generator/Passes/CheckDuplicatedNamesPass.cs

2
src/Generator/Driver.cs

@ -47,6 +47,8 @@ namespace CppSharp @@ -47,6 +47,8 @@ namespace CppSharp
return new CSharpGenerator(Context);
case GeneratorKind.QuickJS:
return new QuickJSGenerator(Context);
case GeneratorKind.NAPI:
return new NAPIGenerator(Context);
}
throw new NotImplementedException();

3
src/Generator/Generator.cs

@ -17,7 +17,8 @@ namespace CppSharp.Generators @@ -17,7 +17,8 @@ namespace CppSharp.Generators
ObjectiveC,
Java,
Swift,
QuickJS
QuickJS,
NAPI
}
/// <summary>

72
src/Generator/Generators/C/NAPI/NAPIGenerator.cs

@ -0,0 +1,72 @@ @@ -0,0 +1,72 @@
using System.Collections.Generic;
using CppSharp.AST;
using CppSharp.Generators.Cpp;
namespace CppSharp.Generators.C
{
/// <summary>
/// N-API generator responsible for driving the generation of binding files.
/// N-API documentation: https://nodejs.org/api/n-api.html
/// </summary>
public class NAPIGenerator : CppGenerator
{
public NAPIGenerator(BindingContext context) : base(context)
{
}
public override List<GeneratorOutput> Generate()
{
var outputs = base.Generate();
foreach (var module in Context.Options.Modules)
{
if (module == Context.Options.SystemModule)
continue;
var output = GenerateModule(module);
if (output != null)
{
OnUnitGenerated(output);
outputs.Add(output);
}
}
return outputs;
}
public override List<CodeGenerator> Generate(IEnumerable<TranslationUnit> units)
{
var outputs = new List<CodeGenerator>();
var header = new NAPIHeaders(Context, units);
outputs.Add(header);
var source = new NAPISources(Context, units);
outputs.Add(source);
return outputs;
}
public override GeneratorOutput GenerateModule(Module module)
{
if (module == Context.Options.SystemModule)
return null;
var moduleGen = new NAPIModule(Context, module);
var output = new GeneratorOutput
{
TranslationUnit = new TranslationUnit
{
FilePath = $"{module.LibraryName}.cpp",
Module = module
},
Outputs = new List<CodeGenerator> { moduleGen }
};
output.Outputs[0].Process();
return output;
}
}
}

23
src/Generator/Generators/C/NAPI/NAPIHeaders.cs

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
using System.Collections.Generic;
using CppSharp.AST;
namespace CppSharp.Generators.Cpp
{
/// <summary>
/// Generates Node N-API C/C++ header files.
/// N-API documentation: https://nodejs.org/api/n-api.html
/// </summary>
public class NAPIHeaders : CppHeaders
{
public NAPIHeaders(BindingContext context, IEnumerable<TranslationUnit> units)
: base(context, units)
{
CTypePrinter.PushContext(TypePrinterContextKind.Managed);
}
public override void Process()
{
base.Process();
}
}
}

43
src/Generator/Generators/C/NAPI/NAPIModule.cs

@ -0,0 +1,43 @@ @@ -0,0 +1,43 @@
using System.Collections.Generic;
using CppSharp.AST;
using CppSharp.Generators.C;
namespace CppSharp.Generators.Cpp
{
/// <summary>
/// Generates Node N-API C/C++ module init files.
/// N-API documentation: https://nodejs.org/api/n-api.html
/// </summary>
public class NAPIModule : CCodeGenerator
{
public NAPIModule(BindingContext context, Module module)
: base(context, module.Units.GetGenerated())
{
CTypePrinter.PushContext(TypePrinterContextKind.Managed);
}
public override string FileExtension { get; } = "cpp";
public override void Process()
{
var include = new CInclude()
{
File = "node/node_api.h",
Kind = CInclude.IncludeKind.Angled
};
WriteInclude(include);
NewLine();
WriteLine("NAPI_MODULE_INIT()");
WriteOpenBraceAndIndent();
WriteLine("napi_value result;");
WriteLine("NAPI_CALL(env, napi_create_object(env, &result));");
WriteLine("return result;");
UnindentAndWriteCloseBrace();
}
}
}

23
src/Generator/Generators/C/NAPI/NAPISources.cs

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
using System.Collections.Generic;
using CppSharp.AST;
namespace CppSharp.Generators.Cpp
{
/// <summary>
/// Generates Node N-API C/C++ source files.
/// N-API documentation: https://nodejs.org/api/n-api.html
/// </summary>
public class NAPISources : CppSources
{
public NAPISources(BindingContext context, IEnumerable<TranslationUnit> units)
: base(context, units)
{
CTypePrinter.PushContext(TypePrinterContextKind.Managed);
}
public override void Process()
{
base.Process();
}
}
}

1
src/Generator/Passes/CheckDuplicatedNamesPass.cs

@ -219,6 +219,7 @@ namespace CppSharp.Passes @@ -219,6 +219,7 @@ namespace CppSharp.Passes
break;
case GeneratorKind.CPlusPlus:
case GeneratorKind.QuickJS:
case GeneratorKind.NAPI:
typePrinter = new CppTypePrinter(Context);
break;
case GeneratorKind.CLI:

Loading…
Cancel
Save