本文整理汇总了C#中Boo.Lang.Compiler.Ast.BlockExpression.CloneNode方法的典型用法代码示例。如果您正苦于以下问题:C# BlockExpression.CloneNode方法的具体用法?C# BlockExpression.CloneNode怎么用?C# BlockExpression.CloneNode使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Boo.Lang.Compiler.Ast.BlockExpression
的用法示例。
在下文中一共展示了BlockExpression.CloneNode方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ProcessClosureBody
void ProcessClosureBody(BlockExpression node, bool isExpression = false)
{
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;
if (!isExpression)
{
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));
var nodeToConvert = node.CloneNode();
ProcessMethodBody(closureEntity, ns);
if (isExpression)
{
_keepOperator = true;
closureEntity.Method.Body = nodeToConvert.Body;
ProcessMethodBody(closureEntity, ns);
closureEntity.Method.Body = node.Body;
_keepOperator = false;
}
if (closureEntity.ReturnType is Unknown)
TryToResolveReturnType(closureEntity);
node.ExpressionType = closureEntity.Type;
node.Entity = closureEntity;
if (isExpression)
{
ConvertToExpressionTree(nodeToConvert, node);
}
}