本文整理汇总了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;
}
示例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;
}
示例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;
}
示例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;
}
示例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);
}
示例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;
}
示例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;
}