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


C# BlockExpression.CloneNode方法代码示例

本文整理汇总了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);
            }
        }
开发者ID:BITechnologies,项目名称:boo,代码行数:57,代码来源:ProcessMethodBodies.cs


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