public override List <CodeGenerator> Generate(IEnumerable <TranslationUnit> units) { var outputs = new List <CodeGenerator>(); var source = new NAPISources(Context, units); outputs.Add(source); return(outputs); }
public override bool VisitClassDecl(Class @class) { if (@class.CompleteDeclaration != null) { return(VisitClassDecl(@class.CompleteDeclaration as Class)); } var ctor = @class.Constructors.FirstOrDefault(); var ctorRef = $"ctor_{NAPISources.GetCIdentifier(Context.Context, ctor)}"; var ctorId = $"__{Context.ReturnVarName}_ctor"; Context.Before.WriteLine($"napi_value {ctorId};"); Context.Before.WriteLine($"status = napi_get_reference_value(env, {ctorRef}, &{ctorId});"); Context.Before.WriteLine("assert(status == napi_ok);"); Context.Before.NewLine(); var instanceId = $"__{Context.ReturnVarName}_instance"; Context.Before.WriteLine($"napi_value {instanceId};"); Context.Before.WriteLine($"status = napi_new_instance(env, {ctorId}, 0, nullptr, &{instanceId});"); Context.Before.WriteLine("assert(status == napi_ok);"); Context.Before.NewLine(); /* * var refId = $"__{Context.ReturnVarName}_ref"; * Context.Before.WriteLine($"napi_ref {refId};"); * * var dtorId = $"dtor_{NAPISources.GetCIdentifier(Context.Context, ctor)}"; * Context.Before.WriteLine($"status = napi_wrap(env, _this, {instanceId}, {dtorId}" + * $", nullptr, &{refId});"); * Context.Before.WriteLine("assert(status == napi_ok);"); */ Context.Return.Write($"{instanceId}"); return(true); }