gpt4 book ai didi

yield - Roslyn 是否将编译器生成的 yield 转换暴露给语法树?

转载 作者:行者123 更新时间:2023-12-04 20:08:57 27 4
gpt4 key购买 nike

yield操作符是由编译器在底层实现的,该编译器生成一个实现符合 IEnumerable 的状态机的类。和 IEnumerator .

给定一个罗斯林 MethodDeclarationSyntax ,可以创建 ClassDeclarationSyntax并生成 MoveNext编译器通常使用的方法。如果要编写支持 yield 的交叉编译器,则此转换是必要的。运算符——首先要重写 C# 代码以不使用 yield 运算符,然后让交叉编译器从那里获取它。

然而,很明显,由于 Roslyn 可以端到端编译 C# 代码,它必须具有以某种方式执行这种转换的逻辑,并且我自己实现这个算法非常重要。

我的问题:逻辑是否以这样一种方式暴露,可以利用它来转换给定的 MethodDeclarationSyntax进入对应的ClassDeclarationSyntax迭代器声明?或者它是在 Emit 上烘烤的吗?阶段,因此在 SyntaxNode 之间工作时不可用年代?

最佳答案

当前的 Roslyn 位将迭代器方法作为代码生成阶段的一部分进行处理。不幸的是,这个阶段大多是不透明的,并且使用了不暴露给公共(public) API 的内部表示。 Roslyn.Compilers.CSharp.IteratorRewriter内部类是实现它的地方,如果你想深入研究的话。

现在,您必须自己实现它。然而,Roslyn 团队已经暗示在不久的将来对公共(public) CTP 进行更新,其中包含大量 API 更改,所以请您放心,也许下一个版本将具有此功能。

关于yield - Roslyn 是否将编译器生成的 yield 转换暴露给语法树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21079903/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com