private void MarshalRefClass(Class @class) { TypeMap typeMap = null; if (Context.Driver.TypeDatabase.FindTypeMap(@class, out typeMap) && typeMap.DoesMarshalling) { typeMap.CLIMarshalToNative(Context); return; } if (!Context.Parameter.Type.Desugar().SkipPointerRefs().IsPointer()) { Context.Return.Write("*"); if (Context.Parameter.Type.IsReference()) { VarPrefix.Write("&"); } } var method = Context.Function as Method; if (method != null && method.Conversion == MethodConversionKind.FunctionToInstanceMethod && Context.ParameterIndex == 0) { Context.Return.Write("(::{0}*)", @class.QualifiedOriginalName); Context.Return.Write("NativePtr"); return; } Context.Return.Write("(::{0}*)", @class.QualifiedOriginalName); Context.Return.Write("{0}->NativePtr", Context.Parameter.Name); }
public override bool VisitTypedefType(TypedefType typedef, TypeQualifiers quals) { var decl = typedef.Declaration; TypeMap typeMap = null; if (Context.Driver.TypeDatabase.FindTypeMap(decl, out typeMap)) { typeMap.CLIMarshalToNative(Context); return(typeMap.IsValueType); } FunctionType func; if (decl.Type.IsPointerTo(out func)) { VisitDelegateType(func, "::" + typedef.Declaration.QualifiedOriginalName); return(true); } PrimitiveType primitive; if (decl.Type.Desugar().IsPrimitiveType(out primitive)) { Context.Return.Write("(::{0})", typedef.Declaration.QualifiedOriginalName); } return(decl.Type.Visit(this)); }
public override bool VisitTemplateSpecializationType(TemplateSpecializationType template, TypeQualifiers quals) { TypeMap typeMap = null; if (Context.Driver.TypeDatabase.FindTypeMap(template, out typeMap)) { typeMap.Type = template; typeMap.CLIMarshalToNative(Context); return(true); } return(template.Template.Visit(this)); }