private void MarshalRefClass(Class @class) { var method = Context.Function as Method; if (method != null && method.Conversion == MethodConversionKind.FunctionToInstanceMethod && Context.ParameterIndex == 0) { Context.Return.Write("{0}", Helpers.InstanceIdentifier); return; } string param = Context.Parameter.Name; Type type = Context.Parameter.Type.Desugar(); if (type.IsAddress()) { Class decl; if (type.TryGetClass(out decl) && decl.IsValueType) { Context.Return.Write("{0}.{1}", param, Helpers.InstanceIdentifier); } else { Context.Return.Write("{0}{1}.{2}", method != null && method.OperatorKind == CXXOperatorKind.EqualEqual ? string.Empty : string.Format("ReferenceEquals({0}, null) ? global::System.IntPtr.Zero : ", param), param, Helpers.InstanceIdentifier, type); } return; } var qualifiedIdentifier = CSharpMarshalNativeToManagedPrinter.QualifiedIdentifier( @class.OriginalClass ?? @class); Context.Return.Write( "ReferenceEquals({0}, null) ? new {1}.Internal() : *({1}.Internal*) ({0}.{2})", param, qualifiedIdentifier, Helpers.InstanceIdentifier); }
private void MarshalRefClass(Class @class) { var method = Context.Function as Method; if (method != null && method.Conversion == MethodConversionKind.FunctionToInstanceMethod && Context.ParameterIndex == 0) { Context.Return.Write("{0}", Helpers.InstanceIdentifier); return; } if (Context.Parameter.Type.IsPointer() || Context.Parameter.Type.IsReference()) { Context.Return.Write("{0}.{1}", Helpers.SafeIdentifier(Context.Parameter.Name), Helpers.InstanceIdentifier); return; } Context.Return.Write("*({0}.Internal*){1}.{2}", CSharpMarshalNativeToManagedPrinter.QualifiedIdentifier(@class), Helpers.SafeIdentifier(Context.Parameter.Name), Helpers.InstanceIdentifier); }
private void MarshalRefClass(Class @class) { var method = Context.Function as Method; if (method != null && method.Conversion == MethodConversionKind.FunctionToInstanceMethod && Context.ParameterIndex == 0) { Context.Return.Write("{0}", Helpers.InstanceIdentifier); return; } string param = Helpers.SafeIdentifier(Context.Parameter.Name); Type type = Context.Parameter.Type.Desugar(); if (type.IsAddress()) { Class decl; if (type.IsTagDecl(out decl) && decl.IsValueType) { Context.Return.Write("{0}.{1}", param, Helpers.InstanceIdentifier); } else { Context.Return.Write("{0} == ({2}) null ? global::System.IntPtr.Zero : {0}.{1}", param, Helpers.InstanceIdentifier, type); } return; } var qualifiedIdentifier = CSharpMarshalNativeToManagedPrinter.QualifiedIdentifier( @class.OriginalClass ?? @class); Context.Return.Write( "{1} == ({0}) null ? new {0}.Internal() : *({0}.Internal*) ({1}.{2})", qualifiedIdentifier, param, Helpers.InstanceIdentifier); }