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); }
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); }
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; }