当前位置: 首页>>代码示例>>C#>>正文


C# Function.ExplicitlyIgnore方法代码示例

本文整理汇总了C#中Function.ExplicitlyIgnore方法的典型用法代码示例。如果您正苦于以下问题:C# Function.ExplicitlyIgnore方法的具体用法?C# Function.ExplicitlyIgnore怎么用?C# Function.ExplicitlyIgnore使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Function的用法示例。


在下文中一共展示了Function.ExplicitlyIgnore方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: VisitFunctionDecl

        public override bool VisitFunctionDecl(Function function)
        {
            if (!base.VisitFunctionDecl(function))
                return false;

            if (function.TranslationUnit.IsSystemHeader)
                function.ExplicitlyIgnore();

            return true;
        }
开发者ID:ddobrev,项目名称:CppSharp,代码行数:10,代码来源:IgnoreSystemDeclarationsPass.cs

示例2: VisitFunctionDecl

        public override bool VisitFunctionDecl(Function function)
        {
            if (!function.IsGenerated)
                return false;

            // Check if this function can be converted.
            if (function.Parameters.Count == 0)
                return false;

            var classParam = function.Parameters[0];

            Class @class;
            if (!GetClassParameter(classParam, out @class))
                return false;

            // If we reach here, it means the first parameter is of class type.
            // This means we can change the function to be an instance method.

            // Clean up the name of the function now that it will be an instance method.
            if (!function.Name.StartsWith(@class.Name))
                return false;

            function.Name = function.Name.Substring(@class.Name.Length);
            function.ExplicitlyIgnore();

            // Create a new fake method so it acts as an instance method.
            var method = new Method
                {
                    Namespace = @class,
                    OriginalNamespace = function.Namespace,
                    Name = function.Name,
                    OriginalName = function.OriginalName,
                    Mangled = function.Mangled,
                    Access = AccessSpecifier.Public,
                    Kind = CXXMethodKind.Normal,
                    ReturnType = function.ReturnType,
                    Parameters = function.Parameters,
                    CallingConvention = function.CallingConvention,
                    IsVariadic = function.IsVariadic,
                    IsInline = function.IsInline,
                    Conversion = MethodConversionKind.FunctionToInstanceMethod
                };

            if (Options.GeneratorKind == GeneratorKind.CSharp)
                method.Parameters = method.Parameters.Skip(1).ToList();

            @class.Methods.Add(method);

            Diagnostics.Debug("Function converted to instance method: {0}::{1}", @class.Name,
                function.Name);

            return true;
        }
开发者ID:ddobrev,项目名称:CppSharp,代码行数:53,代码来源:FunctionToInstanceMethodPass.cs

示例3: VisitFunctionDecl

        public override bool VisitFunctionDecl(Function function)
        {
            if (!function.IsGenerated)
                return false;

            var types = StringHelpers.SplitCamelCase(function.Name);
            if (types.Length == 0)
                return false;

            var @class = ASTContext.FindCompleteClass(types[0]);
            if (@class == null)
                return false;

            // TODO: If the translation units of the declarations are different,
            // and we apply the pass, we might need additional includes in the
            // generated translation unit of the class.
            if (@class.TranslationUnit != function.TranslationUnit)
                return false;

            // Clean up the name of the function now that it will be a static method.
            var name = function.Name.Substring(@class.Name.Length);
            function.ExplicitlyIgnore();

            // Create a new fake method so it acts as a static method.
            var method = new Method
            {
                Namespace = @class,
                OriginalNamespace = function.Namespace,
                Name = name,
                OriginalName = function.OriginalName,
                Mangled = function.Mangled,
                Access = AccessSpecifier.Public,
                Kind = CXXMethodKind.Normal,
                ReturnType = function.ReturnType,
                Parameters = function.Parameters,
                CallingConvention = function.CallingConvention,
                IsVariadic = function.IsVariadic,
                IsInline = function.IsInline,
                IsStatic = true,
                Conversion = MethodConversionKind.FunctionToStaticMethod
            };

            @class.Methods.Add(method);

            Diagnostics.Debug("Function converted to static method: {0}::{1}",
                @class.Name, function.Name);

            return true;
        }
开发者ID:ddobrev,项目名称:CppSharp,代码行数:49,代码来源:FunctionToStaticMethodPass.cs

示例4: VisitFunctionDecl

        public override bool VisitFunctionDecl(Function function)
        {
            if (!VisitDeclaration(function))
                return false;

            if (!function.IsGenerated || function.Namespace is Class)
                return false;

            var @class = FindClassToMoveFunctionTo(function.Namespace);
            if (@class != null && @class.TranslationUnit.Module == function.TranslationUnit.Module)
            {
                MoveFunction(function, @class);
                Log.Debug("Function moved to class: {0}::{1}", @class.Name, function.Name);
            }

            if (function.IsOperator)
                function.ExplicitlyIgnore();

            return true;
        }
开发者ID:tritao,项目名称:CppSharp,代码行数:20,代码来源:MoveFunctionToClassPass.cs

示例5: MoveFunction

        private static void MoveFunction(Function function, Class @class)
        {
            var method = new Method(function)
            {
                Namespace = @class,
                IsStatic = true
            };

            function.ExplicitlyIgnore();

            if (method.OperatorKind != CXXOperatorKind.None)
            {
                var param = function.Parameters[0];
                Class type;
                if (!FunctionToInstanceMethodPass.GetClassParameter(param, out type))
                    return;
                method.Kind = CXXMethodKind.Operator;
                method.IsNonMemberOperator = true;
                method.OriginalFunction = null;
            }

            @class.Methods.Add(method);
        }
开发者ID:tritao,项目名称:CppSharp,代码行数:23,代码来源:MoveFunctionToClassPass.cs

示例6: VisitFunctionDecl

        public override bool VisitFunctionDecl(Function function)
        {
            if (!function.IsGenerated || !function.IsOperator)
                return false;

            Class @class = null;
            foreach (var param in function.Parameters)
            {
                FunctionToInstanceMethodPass.GetClassParameter(
                    param, out @class);

                if (@class != null) break;
            }

            if (@class == null)
                return false;

            // Create a new fake method so it acts as a static method.
            var method = new Method(function)
            {
                Namespace = @class,
                Kind = CXXMethodKind.Operator,
                OperatorKind = function.OperatorKind,
                SynthKind = FunctionSynthKind.NonMemberOperator,
                OriginalFunction = null,
                IsStatic = true
            };

            function.ExplicitlyIgnore();

            @class.Methods.Add(method);

            Driver.Diagnostics.Debug("Function converted to operator: {0}::{1}",
                @class.Name, function.Name);

            return true;
        }
开发者ID:kitsilanosoftware,项目名称:CppSharp,代码行数:37,代码来源:MoveOperatorToClassPass.cs

示例7: VisitFunctionDecl

        public override bool VisitFunctionDecl(Function function)
        {
            if (!VisitDeclaration(function))
                return false;

            var ret = function.ReturnType;

            string msg;
            if (HasInvalidType(ret.Type, out msg))
            {
                function.ExplicitlyIgnore();
                Log.Debug("Function '{0}' was ignored due to {1} return decl",
                    function.Name, msg);
                return false;
            }

            foreach (var param in function.Parameters)
            {
                if (HasInvalidDecl(param, out msg))
                {
                    function.ExplicitlyIgnore();
                    Log.Debug("Function '{0}' was ignored due to {1} param",
                        function.Name, msg);
                    return false;
                }

                if (HasInvalidType(param.Type, out msg))
                {
                    function.ExplicitlyIgnore();
                    Log.Debug("Function '{0}' was ignored due to {1} param",
                        function.Name, msg);
                    return false;
                }

                var decayedType = param.Type.Desugar() as DecayedType;
                if (decayedType != null)
                {
                    function.ExplicitlyIgnore();
                    Log.Debug("Function '{0}' was ignored due to unsupported decayed type param",
                        function.Name);
                    return false;
                }

                if (param.Kind == ParameterKind.IndirectReturnType)
                {
                    Class retClass;
                    param.Type.Desugar().TryGetClass(out retClass);
                    if (retClass == null)
                    {
                        function.ExplicitlyIgnore();
                        Log.Debug(
                            "Function '{0}' was ignored due to an indirect return param not of a tag type",
                            function.Name);
                        return false;
                    }
                }
            }

            return true;
        }
开发者ID:daxiazh,项目名称:CppSharp,代码行数:60,代码来源:CheckIgnoredDecls.cs


注:本文中的Function.ExplicitlyIgnore方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。