【发布时间】:2016-09-13 10:59:03
【问题描述】:
在 Roslyn 中引入操作时,其中一个目标是提供低级操作(我认为是在设计评审会议视频中),据我所知,它应该为高级操作上的隐式编译器操作提供显式操作。我在 Roslyn 看到了降低目录,但类是内部的。现在可以降低操作还是没有可用的公共 API?
在下面的示例中,操作已经删除了一些隐式部分 - 为表达式主体添加返回语句并为重载运算符公开符号。但前后增量仅在种类上有所不同。
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Semantics;
using System.Linq;
namespace so39468373
{
internal static class Program
{
private static void Main()
{
var tree = CSharpSyntaxTree.ParseText(@"
public class c
{
public static c operator ++(c o) { return o; }
static c pre(c o) => ++o;
static c post(c o) => o++;
public static void Main() {}
}");
var mscorlib = MetadataReference.CreateFromFile(typeof(object).Assembly.Location);
var compilation = CSharpCompilation.Create(null, new[] { tree }, new[] { mscorlib });
var model = compilation.GetSemanticModel(tree);
foreach (var node in tree.GetRoot().DescendantNodes().OfType<ArrowExpressionClauseSyntax>())
{
var operation = model.GetOperation(node);
var block = (IBlockStatement)operation;
var statement = (IReturnStatement)block.Statements.First();
var increment = (IIncrementExpression)statement.ReturnedValue;
// How to get lowered operations for increment here?
}
}
}
}
github上的代码-https://github.com/isanych/so-39468373
【问题讨论】:
-
据我所知,关于这个话题有很多问题悬而未决,你可以在这里跟踪:github.com/dotnet/roslyn/…