本文整理汇总了C#中ICallableType类的典型用法代码示例。如果您正苦于以下问题:C# ICallableType类的具体用法?C# ICallableType怎么用?C# ICallableType使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
ICallableType类属于命名空间,在下文中一共展示了ICallableType类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: VisitCallableType
public virtual void VisitCallableType(ICallableType callableType)
{
CallableSignature sig = callableType.GetSignature();
foreach (IParameter parameter in sig.Parameters)
{
Visit(parameter.Type);
}
Visit(sig.ReturnType);
}
开发者ID:0xb1dd1e,项目名称:boo,代码行数:9,代码来源:TypeVisitor.cs
示例2: CreateEndInvokeMethod
public Method CreateEndInvokeMethod(ICallableType anonymousType)
{
CallableSignature signature = anonymousType.GetSignature();
Method method = CodeBuilder.CreateRuntimeMethod("EndInvoke", signature.ReturnType);
int delta = 1;
foreach (IParameter p in signature.Parameters)
{
if (p.IsByRef)
{
method.Parameters.Add(
CodeBuilder.CreateParameterDeclaration(++delta,
p.Name,
p.Type,
true));
}
}
delta = method.Parameters.Count;
method.Parameters.Add(
CodeBuilder.CreateParameterDeclaration(delta + 1, "result", TypeSystemServices.Map(typeof(IAsyncResult))));
return method;
}
开发者ID:Rfvgyhn,项目名称:boo,代码行数:22,代码来源:AnonymousCallablesManager.cs
示例3: ProcessCallableTypeInvocation
void ProcessCallableTypeInvocation(MethodInvocationExpression node, ICallableType type)
{
NamedArgumentsNotAllowed(node);
if (node.Arguments.Count == 1)
{
AssertTypeCompatibility(node.Arguments[0], type, GetExpressionType(node.Arguments[0]));
node.ParentNode.Replace(
node,
CodeBuilder.CreateCast(
type,
node.Arguments[0]));
}
else
{
IConstructor ctor = GetCorrectConstructor(node, type, node.Arguments);
if (null != ctor)
{
BindConstructorInvocation(node, ctor);
}
else
{
Error(node);
}
}
}
开发者ID:stuman08,项目名称:boo,代码行数:26,代码来源:ProcessMethodBodies.cs
示例4: AssertParameterTypes
bool AssertParameterTypes(ICallableType method, ExpressionCollection args, int count, bool reportErrors)
{
IParameter[] parameters = method.GetSignature().Parameters;
for (int i=0; i<count; ++i)
{
IParameter param = parameters[i];
IType parameterType = param.Type;
IType argumentType = GetExpressionType(args[i]);
if (param.IsByRef)
{
if (!(args[i] is ReferenceExpression
|| args[i] is SlicingExpression
|| (args[i] is SelfLiteralExpression && argumentType.IsValueType)))
{
if (reportErrors)
Error(CompilerErrorFactory.RefArgTakesLValue(args[i]));
return false;
}
if (!CallableResolutionService.IsValidByRefArg(param, parameterType, argumentType, args[i]))
{
return false;
}
}
else
{
if (!CanBeReachedFrom(args[i], parameterType, argumentType))
return false;
}
}
return true;
}
开发者ID:stuman08,项目名称:boo,代码行数:31,代码来源:ProcessMethodBodies.cs
示例5: AddInferredClosureParameterTypes
private void AddInferredClosureParameterTypes(BlockExpression node, ICallableType callableType)
{
IParameter[] parameters = (callableType == null ? null : callableType.GetSignature().Parameters);
for (int i = 0; i < node.Parameters.Count; i++)
{
ParameterDeclaration pd = node.Parameters[i];
if (pd.Type != null) continue;
IType inferredType;
if (parameters != null && i < parameters.Length)
{
inferredType = parameters[i].Type;
}
else if (pd.IsParamArray)
{
inferredType = TypeSystemServices.ObjectArrayType;
}
else
{
inferredType = TypeSystemServices.ObjectType;
}
pd.Type = CodeBuilder.CreateTypeReference(inferredType);
}
}
开发者ID:stuman08,项目名称:boo,代码行数:25,代码来源:ProcessMethodBodies.cs
示例6: CheckVarArgsParameters
protected bool CheckVarArgsParameters(ICallableType method, ExpressionCollection args)
{
return CallableResolutionService.IsValidVargsInvocation(method.GetSignature().Parameters, args);
}
开发者ID:stuman08,项目名称:boo,代码行数:4,代码来源:ProcessMethodBodies.cs
示例7: CheckExactArgsParameters
protected bool CheckExactArgsParameters(ICallableType method, ExpressionCollection args, bool reportErrors)
{
if (method.GetSignature().Parameters.Length != args.Count) return false;
return AssertParameterTypes(method, args, args.Count, reportErrors);
}
开发者ID:stuman08,项目名称:boo,代码行数:5,代码来源:ProcessMethodBodies.cs
示例8: InferCallableType
private bool InferCallableType(ICallableType formalType, IType actualType, TypeInference inference)
{
ICallableType callableActualType = actualType as ICallableType;
if (callableActualType == null) return false;
CallableSignature formalSignature = formalType.GetSignature();
CallableSignature actualSignature = callableActualType.GetSignature();
if (formalSignature.AcceptVarArgs)
{
if (actualSignature.Parameters.Length < formalSignature.Parameters.Length)
return false;
}
else if (formalSignature.Parameters.Length != actualSignature.Parameters.Length)
{
return false;
}
// Infer return type, maintaining inference direction
if (!Infer(formalSignature.ReturnType, actualSignature.ReturnType, inference))
{
return false;
}
// Infer parameter types, inverting inference direction
for (int i = 0; i < formalSignature.Parameters.Length; ++i)
{
bool inferenceSuccessful = Infer(
formalSignature.Parameters[i].Type,
actualSignature.Parameters[i].Type,
Invert(inference));
if (!inferenceSuccessful) return false;
}
return true;
}
开发者ID:0xb1dd1e,项目名称:boo,代码行数:36,代码来源:TypeInferrer.cs
示例9: GenericConstructedCallableType
public GenericConstructedCallableType(ICallableType definition, IType[] arguments)
: base(definition, arguments)
{
}
开发者ID:0xb1dd1e,项目名称:boo,代码行数:4,代码来源:GenericConstructedType.cs
示例10: CreateBeginInvokeMethod
Method CreateBeginInvokeMethod(ICallableType anonymousType)
{
Method method = CodeBuilder.CreateRuntimeMethod("BeginInvoke", TypeSystemServices.Map(typeof(IAsyncResult)),
anonymousType.GetSignature().Parameters, false);
int delta = method.Parameters.Count;
method.Parameters.Add(
CodeBuilder.CreateParameterDeclaration(delta + 1, "callback", TypeSystemServices.Map(typeof(AsyncCallback))));
method.Parameters.Add(
CodeBuilder.CreateParameterDeclaration(delta + 1, "asyncState", TypeSystemServices.ObjectType));
return method;
}
开发者ID:transformersprimeabcxyz,项目名称:boo,代码行数:12,代码来源:AnonymousCallablesManager.cs
示例11: GetAdaptor
ClassDefinition GetAdaptor(ICallableType to, ICallableType from)
{
ClassDefinition adaptor = FindAdaptor(to, from);
if (null == adaptor)
adaptor = CreateAdaptor(to, from);
return adaptor;
}
开发者ID:Bombadil77,项目名称:boo,代码行数:7,代码来源:InjectCallableConversions.cs
示例12: CheckParameters
private bool CheckParameters(ICallableType method, ExpressionCollection args, bool reportErrors)
{
return AcceptVarArgs(method)
? CheckVarArgsParameters(method, args)
: CheckExactArgsParameters(method, args, reportErrors);
}
开发者ID:w4x,项目名称:boolangstudio,代码行数:6,代码来源:ProcessMethodBodies.cs
示例13: AssertParameters
bool AssertParameters(Node sourceNode, IEntity sourceEntity, ICallableType method, ExpressionCollection args)
{
if (CheckParameters(method, args, true)) return true;
Error(CompilerErrorFactory.MethodSignature(sourceNode, sourceEntity.ToString(), GetSignature(args)));
return false;
}
开发者ID:w4x,项目名称:boolangstudio,代码行数:7,代码来源:ProcessMethodBodies.cs
示例14: CalculateCallableScore
private static int CalculateCallableScore(ICallableType parameterType, ICallableType argType)
{
// upcast
// parameterType == ICallableType, "ThreadStart"
// argumentType == ICallableType, "Anonymous Closure"
// RULES:
// Number of arguments for argumentType && parameterType == same
// Either: all arguments "IsAssignableFrom"
// OR
// all arguments == exactly (best case scenario)
// ExactMatch -- (best case)
// UpCast -- "not exact match, but very close" (this is OK)
// ImplicitConversion -- "assignable, but wrong number of parameters / whatever" (boo does the normal thing)
CallableSignature siggyType = parameterType.GetSignature();
CallableSignature siggyArg = argType.GetSignature();
// Ensuring that these callables have same number of arguments.
// def foo(a, b,c) == { a, b, c| print foobar }
if (siggyType.Parameters.Length != siggyArg.Parameters.Length)
{
return CallableUpCastScore;
}
for (int i = 0; i < siggyType.Parameters.Length; i++)
{
if (siggyType.Parameters[i].Type != siggyArg.Parameters[i].Type)
{
return CallableImplicitConversionScore;
}
}
return siggyType.ReturnType == siggyArg.ReturnType
? CallableExactMatchScore : CallableUpCastScore;
}
开发者ID:w4x,项目名称:boolangstudio,代码行数:32,代码来源:CallableResolutionService.cs
示例15: RegisterAdaptor
void RegisterAdaptor(ICallableType to, ICallableType from, ClassDefinition adaptor)
{
_adaptors.Add(new AdaptorRecord(to, from, adaptor));
TypeSystemServices.GetCompilerGeneratedTypesModule().Members.Add(adaptor);
}
开发者ID:rmartinho,项目名称:boo,代码行数:5,代码来源:InjectCallableConversions.cs
示例16: ProcessDelegateInvocation
void ProcessDelegateInvocation(MethodInvocationExpression node, ICallableType delegateType)
{
if (!AssertParameters(node.Target, delegateType, delegateType, node.Arguments))
{
Error(node);
return;
}
var invoke = ResolveMethod(delegateType, "Invoke");
node.Target = CodeBuilder.CreateMemberReference(node.Target, invoke);
BindExpressionType(node, invoke.ReturnType);
}
开发者ID:boo-lang,项目名称:boo,代码行数:12,代码来源:ProcessMethodBodies.cs
示例17: AdaptorRecord
public AdaptorRecord(ICallableType to, ICallableType from, ClassDefinition adaptor)
{
To = to;
From = from;
Adaptor = adaptor;
}
开发者ID:rmartinho,项目名称:boo,代码行数:6,代码来源:InjectCallableConversions.cs
示例18: IsCallableTypeAssignableFrom
public bool IsCallableTypeAssignableFrom(ICallableType lhs, IType rhs)
{
if (lhs == rhs) return true;
if (Null.Default == rhs) return true;
var other = rhs as ICallableType;
if (null == other) return false;
CallableSignature lvalue = lhs.GetSignature();
CallableSignature rvalue = other.GetSignature();
if (lvalue == rvalue) return true;
IParameter[] lparams = lvalue.Parameters;
IParameter[] rparams = rvalue.Parameters;
if (lparams.Length < rparams.Length) return false;
for (int i = 0; i < rparams.Length; ++i)
if (!CanBeReachedFrom(lparams[i].Type, rparams[i].Type))
return false;
return CompatibleReturnTypes(lvalue, rvalue);
}
开发者ID:HaKDMoDz,项目名称:GNet,代码行数:22,代码来源:TypeSystemServices.cs
示例19: InferInputTypesFromContextType
private void InferInputTypesFromContextType(ICallableType type)
{
CallableSignature sig = type.GetSignature();
for (int i = 0; i < Math.Min(ParameterTypes.Length, sig.Parameters.Length); i++)
{
if (ParameterTypes[i] != null) continue;
ParameterTypes[i] = sig.Parameters[i].Type;
}
}
开发者ID:BITechnologies,项目名称:boo,代码行数:9,代码来源:ClosureSignatureInferrer.cs
示例20: Adapt
Expression Adapt(ICallableType expected, Expression callable)
{
ICallableType actual = GetExpressionType(callable) as ICallableType;
if (null == actual)
{
// TODO: should we adapt System.Object, System.Delegate,
// System.MulticastDelegate and ICallable as well?
return null;
}
ClassDefinition adaptor = GetAdaptor(expected, actual);
Method adapt = (Method)adaptor.Members["Adapt"];
return CodeBuilder.CreateMethodInvocation((IMethod)adapt.Entity, callable);
}
开发者ID:rmartinho,项目名称:boo,代码行数:13,代码来源:InjectCallableConversions.cs
注:本文中的ICallableType类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论