本文整理汇总了C#中Boo.Lang.Compiler.Ast.BlockExpression.ContainsAnnotation方法的典型用法代码示例。如果您正苦于以下问题:C# BlockExpression.ContainsAnnotation方法的具体用法?C# BlockExpression.ContainsAnnotation怎么用?C# BlockExpression.ContainsAnnotation使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Boo.Lang.Compiler.Ast.BlockExpression
的用法示例。
在下文中一共展示了BlockExpression.ContainsAnnotation方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: OnBlockExpression
public override void OnBlockExpression(BlockExpression node)
{
AnonymousMethodReturnType amrt = new AnonymousMethodReturnType(cu);
if (node.ReturnType != null) {
amrt.MethodReturnType = ConvertType(node.ReturnType);
} else {
amrt.MethodReturnType = new BooInferredReturnType(node.Body, resolver.CallingClass,
node.ContainsAnnotation("inline"));
}
amrt.MethodParameters = new List<IParameter>();
ConvertVisitor.AddParameters(node.Parameters, amrt.MethodParameters, resolver.CallingMember, resolver.CallingClass ?? new DefaultClass(resolver.CompilationUnit, "__Dummy"));
MakeResult(amrt);
}
示例2: ProcessClosureBody
void ProcessClosureBody(BlockExpression node)
{
MarkVisited(node);
if (node.ContainsAnnotation("inline"))
AddOptionalReturnStatement(node.Body);
var explicitClosureName = node[BlockExpression.ClosureNameAnnotation] as string;
Method closure = CodeBuilder.CreateMethod(
ClosureName(explicitClosureName),
node.ReturnType ?? CodeBuilder.CreateTypeReference(Unknown.Default),
ClosureModifiers());
MarkVisited(closure);
var closureEntity = (InternalMethod)closure.Entity;
closure.LexicalInfo = node.LexicalInfo;
closure.Parameters = node.Parameters;
closure.Body = node.Body;
CurrentMethod.DeclaringType.Members.Add(closure);
CodeBuilder.BindParameterDeclarations(_currentMethod.IsStatic, closure);
// check for invalid names and
// resolve parameter types
Visit(closure.Parameters);
// Inside the closure, connect the closure method namespace with the current namespace
var ns = new NamespaceDelegator(CurrentNamespace, closureEntity);
// Allow closure body to reference itself using its explicit name (BOO-1085)
if (explicitClosureName != null)
ns.DelegateTo(new AliasedNamespace(explicitClosureName, closureEntity));
ProcessMethodBody(closureEntity, ns);
if (closureEntity.ReturnType is Unknown)
TryToResolveReturnType(closureEntity);
node.ExpressionType = closureEntity.Type;
node.Entity = closureEntity;
}
示例3: OnBlockExpression
public override void OnBlockExpression(BlockExpression node)
{
if (WasVisited(node)) return;
MarkVisited(node);
Method closure = CodeBuilder.CreateMethod(
ClosureNameFor(node),
Unknown.Default,
ClosureModifiers());
MarkVisited(closure);
InternalMethod closureEntity = (InternalMethod)closure.Entity;
closure.LexicalInfo = node.LexicalInfo;
closure.Parameters = node.Parameters;
closure.Body = node.Body;
_currentMethod.Method.DeclaringType.Members.Add(closure);
CodeBuilder.BindParameterDeclarations(_currentMethod.IsStatic, closure);
// check for invalid names and
// resolve parameter types
Visit(closure.Parameters);
if (node.ContainsAnnotation("inline"))
{
AddOptionalReturnStatement(node.Body);
}
// Connects the closure method namespace with the current
NamespaceDelegator ns = new NamespaceDelegator(CurrentNamespace, closureEntity);
ProcessMethodBody(closureEntity, ns);
TryToResolveReturnType(closureEntity);
node.ExpressionType = closureEntity.Type;
node.Entity = closureEntity;
}