Пример #1
0
        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);
        }
Пример #2
0
        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));
        }
Пример #3
0
        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));
        }