public override List <CodeGenerator> Generate(IEnumerable <TranslationUnit> units)
        {
            var outputs = new List <CodeGenerator>();

            var source = new NAPISources(Context, units);

            outputs.Add(source);

            return(outputs);
        }
Exemple #2
0
        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);
        }