Example #1
0
        public override bool VisitClassDecl(Class @class)
        {
            var arg    = IsByRefParameter ? $"(*{Context.ArgName})" : Context.ArgName;
            var handle = CSources.GetMonoObjectField(Options, CSources.MonoObjectFieldUsage.Parameter,
                                                     arg, "_handle");

            var @object = $"{arg} ? mono_gchandle_get_target({handle}) : 0";

            if (@class.IsValueType)
            {
                @object = $"mono_object_unbox({@object})";
            }

            if (IsByRefParameter)
            {
                var argId = GenParamId(Context);
                var objId = $"{argId}_obj";

                Context.SupportBefore.WriteLine($"MonoObject* {objId} = {@object};");
                Context.SupportBefore.WriteLine($"MonoObject* {argId} = {objId};");

                Context.SupportAfter.WriteLine($"if ({objId} != {argId})");
                Context.SupportAfter.WriteStartBraceIndent();
                Context.SupportAfter.WriteLine($"mono_embeddinator_destroy_object({arg});");
                Context.SupportAfter.WriteLine($"{arg} = ({argId} != 0) ? mono_embeddinator_create_object({argId}) : 0;");
                Context.SupportAfter.WriteCloseBraceIndent();

                Context.Return.Write($"&{argId}");
                return(true);
            }

            Context.Return.Write($"{@object}");
            return(true);
        }
Example #2
0
        public override bool VisitClassDecl(Class @class)
        {
            var instanceId = CGenerator.GenId($"{Context.ArgName}_instance");
            var handle     = CSources.GetMonoObjectField(Options, Context.ArgName, "_handle");

            Context.SupportBefore.WriteLine($"MonoObject* {instanceId} = mono_gchandle_get_target({handle});");
            Context.Return.Write("{0}", instanceId);
            return(true);
        }
Example #3
0
        public override bool VisitClassDecl(Class @class)
        {
            var handle = CSources.GetMonoObjectField(Options, CSources.MonoObjectFieldUsage.Parameter,
                Context.ArgName, "_handle");

            var @object = $"{Context.ArgName} ? mono_gchandle_get_target({handle}) : 0";

            if (@class.IsValueType)
                @object = $"mono_object_unbox({@object})";

            Context.Return.Write("{0}", @object);
            return true;
        }