提交 846625d9 编写于 作者: L ljw1004

Rename from AsyncBuilderAttribute to AsyncMethodBuilderAttribute

上级 54e58b99
......@@ -1294,11 +1294,11 @@ internal static bool IsGenericTaskType(this TypeSymbol type, CSharpCompilation c
/// <summary>
/// Returns true if the type is generic or non-generic custom task-like type due to the
/// [AsyncBuilder(typeof(B))] attribute. It returns the "B".
/// [AsyncMethodBuilder(typeof(B))] attribute. It returns the "B".
/// </summary>
/// <remarks>
/// For the Task types themselves, this method might return true or false depending on mscorlib.
/// The definition of "custom task-like type" is one that has an [AsyncBuilder(typeof(B))] attribute,
/// The definition of "custom task-like type" is one that has an [AsyncMethodBuilder(typeof(B))] attribute,
/// no more, no less. Validation of builder type B is left for elsewhere. This method returns B
/// without validation of any kind.
/// </remarks>
......@@ -1313,7 +1313,7 @@ internal static bool IsCustomTaskType(this NamedTypeSymbol type, out object buil
// Find the AsyncBuilder attribute.
foreach (var attr in type.GetAttributes())
{
if (attr.IsTargetAttribute(type, AttributeDescription.AsyncBuilderAttribute)
if (attr.IsTargetAttribute(type, AttributeDescription.AsyncMethodBuilderAttribute)
&& attr.CommonConstructorArguments.Length == 1
&& attr.CommonConstructorArguments[0].Kind == TypedConstantKind.Type)
{
......
......@@ -3245,9 +3245,9 @@ class C
async ValueTask f() { await (Task)null; }
async ValueTask<int> g() { await (Task)null; return 1; }
}
[AsyncBuilder(typeof(ValueTaskMethodBuilder))]
[AsyncMethodBuilder(typeof(ValueTaskMethodBuilder))]
struct ValueTask { }
[AsyncBuilder(typeof(ValueTaskMethodBuilder<>))]
[AsyncMethodBuilder(typeof(ValueTaskMethodBuilder<>))]
struct ValueTask<T> { }
class ValueTaskMethodBuilder
{
......@@ -3271,7 +3271,7 @@ class ValueTaskMethodBuilder<T>
public void SetStateMachine(IAsyncStateMachine stateMachine) { }
public void Start<TStateMachine>(ref TStateMachine stateMachine) where TStateMachine : IAsyncStateMachine { }
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var v = CompileAndVerify(source, null, options: TestOptions.ReleaseDll);
v.VerifyIL("C.g",
......@@ -3328,12 +3328,12 @@ class N
class BN { }
class BG<U> { }
[AsyncBuilder(typeof(N.BG<int>))] class T_NIT<V> { }
[AsyncBuilder(typeof(N.BG<int>))] class T_NIN { }
[AsyncBuilder(typeof(N.BG<>))] class T_NOT<V> { }
[AsyncBuilder(typeof(N.BG<>))] class T_NON { }
[AsyncBuilder(typeof(N.BN))] class T_NNT<V> { }
[AsyncBuilder(typeof(N.BN))] class T_NNN { }
[AsyncMethodBuilder(typeof(N.BG<int>))] class T_NIT<V> { }
[AsyncMethodBuilder(typeof(N.BG<int>))] class T_NIN { }
[AsyncMethodBuilder(typeof(N.BG<>))] class T_NOT<V> { }
[AsyncMethodBuilder(typeof(N.BG<>))] class T_NON { }
[AsyncMethodBuilder(typeof(N.BN))] class T_NNT<V> { }
[AsyncMethodBuilder(typeof(N.BN))] class T_NNN { }
async T_NIT<int> f1() => await Task.FromResult(1);
async T_NIN f2() => await Task.FromResult(1);
......@@ -3348,14 +3348,14 @@ class G<T>
class BN { }
class BG<U> { }
[AsyncBuilder(typeof(G<int>.BG<int>))] class T_IIT<V> { }
[AsyncBuilder(typeof(G<int>.BG<int>))] class T_IIN { }
[AsyncBuilder(typeof(G<int>.BN))] class T_INT<V> { }
[AsyncBuilder(typeof(G<int>.BN))] class T_INN { }
[AsyncBuilder(typeof(G<>.BG<>))] class T_OOT<V> { }
[AsyncBuilder(typeof(G<>.BG<>))] class T_OON { }
[AsyncBuilder(typeof(G<>.BN))] class T_ONT<V> { }
[AsyncBuilder(typeof(G<>.BN))] class T_ONN { }
[AsyncMethodBuilder(typeof(G<int>.BG<int>))] class T_IIT<V> { }
[AsyncMethodBuilder(typeof(G<int>.BG<int>))] class T_IIN { }
[AsyncMethodBuilder(typeof(G<int>.BN))] class T_INT<V> { }
[AsyncMethodBuilder(typeof(G<int>.BN))] class T_INN { }
[AsyncMethodBuilder(typeof(G<>.BG<>))] class T_OOT<V> { }
[AsyncMethodBuilder(typeof(G<>.BG<>))] class T_OON { }
[AsyncMethodBuilder(typeof(G<>.BN))] class T_ONT<V> { }
[AsyncMethodBuilder(typeof(G<>.BN))] class T_ONN { }
async T_IIT<int> g1() => await Task.FromResult(1);
async T_IIN g2() => await Task.FromResult(1);
......@@ -3369,7 +3369,7 @@ class BG<U> { }
class Program { static void Main() { } }
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var comp = CreateCompilation(source, options: TestOptions.DebugExe);
comp.VerifyEmitDiagnostics(
......@@ -3432,14 +3432,14 @@ public void AsyncTasklikeBadAttributeArgument1()
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
[AsyncBuilder(typeof(void))] class T { }
[AsyncMethodBuilder(typeof(void))] class T { }
class Program {
static void Main() { }
async T f() => await Task.Delay(1);
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var comp = CreateCompilation(source, options: TestOptions.DebugExe);
......@@ -3458,21 +3458,21 @@ public void AsyncTasklikeBadAttributeArgument2()
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
[AsyncBuilder(""hello"")] class T { }
[AsyncMethodBuilder(""hello"")] class T { }
class Program {
static void Main() { }
async T f() => await Task.Delay(1);
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var comp = CreateCompilation(source, options: TestOptions.DebugExe);
comp.VerifyEmitDiagnostics(
// (5,15): error CS1503: Argument 1: cannot convert from 'string' to 'System.Type'
// [AsyncBuilder("hello")] class T { }
Diagnostic(ErrorCode.ERR_BadArgType, @"""hello""").WithArguments("1", "string", "System.Type").WithLocation(5, 15),
// [AsyncMethodBuilder("hello")] class T { }
Diagnostic(ErrorCode.ERR_BadArgType, @"""hello""").WithArguments("1", "string", "System.Type").WithLocation(5, 21),
// (9,13): error CS1983: The return type of an async method must be void, Task or Task<T>
// async T f() => await Task.Delay(1);
Diagnostic(ErrorCode.ERR_BadAsyncReturn, "f").WithLocation(9, 13)
......@@ -3486,21 +3486,21 @@ public void AsyncTasklikeBadAttributeArgument3()
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
[AsyncBuilder(typeof(Nonexistent))] class T { }
[AsyncMethodBuilder(typeof(Nonexistent))] class T { }
class Program {
static void Main() { }
async T f() => await Task.Delay(1);
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var comp = CreateCompilation(source, options: TestOptions.DebugExe);
comp.VerifyEmitDiagnostics(
// (5,22): error CS0246: The type or namespace name 'Nonexistent' could not be found (are you missing a using directive or an assembly reference?)
// [AsyncBuilder(typeof(Nonexistent))] class T { }
Diagnostic(ErrorCode.ERR_SingleTypeNameNotFound, "Nonexistent").WithArguments("Nonexistent").WithLocation(5, 22)
// [AsyncMethodBuilder(typeof(Nonexistent))] class T { }
Diagnostic(ErrorCode.ERR_SingleTypeNameNotFound, "Nonexistent").WithArguments("Nonexistent").WithLocation(5, 28)
);
}
......@@ -3510,14 +3510,14 @@ public void AsyncTasklikeBadAttributeArgument4()
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
[AsyncBuilder(null)] class T { }
[AsyncMethodBuilder(null)] class T { }
class Program {
static void Main() { }
async T f() => await Task.Delay(1);
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var comp = CreateCompilation(source, options: TestOptions.DebugExe);
......@@ -3540,9 +3540,9 @@ public void AsyncTasklikeMissingBuilderType()
var libT = @"
using System.Runtime.CompilerServices;
[AsyncBuilder(typeof(B))] public class T { }
[AsyncMethodBuilder(typeof(B))] public class T { }
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var cT = CreateCompilationWithMscorlib45(libT, references: new[] { rB });
var rT = cT.EmitToImageReference();
......@@ -3585,15 +3585,15 @@ class Program {{
async T8 f8() => await Task.Delay(8);
}}
[AsyncBuilder(typeof(B0))] public class T0 {{ }}
[AsyncBuilder(typeof(B1))] public class T1 {{ }}
[AsyncBuilder(typeof(B2))] public class T2 {{ }}
[AsyncBuilder(typeof(B3))] public class T3 {{ }}
[AsyncBuilder(typeof(B4))] public class T4 {{ }}
[AsyncBuilder(typeof(B5))] public class T5 {{ }}
[AsyncBuilder(typeof(B6))] public class T6 {{ }}
[AsyncBuilder(typeof(B7))] public class T7 {{ }}
[AsyncBuilder(typeof(B8))] public class T8 {{ }}
[AsyncMethodBuilder(typeof(B0))] public class T0 {{ }}
[AsyncMethodBuilder(typeof(B1))] public class T1 {{ }}
[AsyncMethodBuilder(typeof(B2))] public class T2 {{ }}
[AsyncMethodBuilder(typeof(B3))] public class T3 {{ }}
[AsyncMethodBuilder(typeof(B4))] public class T4 {{ }}
[AsyncMethodBuilder(typeof(B5))] public class T5 {{ }}
[AsyncMethodBuilder(typeof(B6))] public class T6 {{ }}
[AsyncMethodBuilder(typeof(B7))] public class T7 {{ }}
[AsyncMethodBuilder(typeof(B8))] public class T8 {{ }}
{AsyncBuilderCode("B0", "T0").Replace("public static B0 Create()", "public static B0 Create()")}
{AsyncBuilderCode("B1", "T1").Replace("public static B1 Create()", "private static B1 Create()")}
......@@ -3605,7 +3605,7 @@ class Program {{
{AsyncBuilderCode("B7", "T7").Replace("public static B7 Create()", "public static B7 Create(params object[] arg)")}
{AsyncBuilderCode("B8", "T8").Replace("public static B8 Create()", "public B8 Create()")}
namespace System.Runtime.CompilerServices {{ class AsyncBuilderAttribute : System.Attribute {{ public AsyncBuilderAttribute(System.Type t) {{ }} }} }}
namespace System.Runtime.CompilerServices {{ class AsyncMethodBuilderAttribute : System.Attribute {{ public AsyncMethodBuilderAttribute(System.Type t) {{ }} }} }}
";
var comp = CreateCompilation(source, options: TestOptions.DebugExe);
......@@ -3650,13 +3650,13 @@ class Program {{
async I1<int> f1() {{ await Task.Delay(1); return 1; }}
}}
[AsyncBuilder(typeof(B0))] public interface I0 {{ }}
[AsyncBuilder(typeof(B1<>))] public interface I1<T> {{ }}
[AsyncMethodBuilder(typeof(B0))] public interface I0 {{ }}
[AsyncMethodBuilder(typeof(B1<>))] public interface I1<T> {{ }}
{AsyncBuilderCode("B0", "I0", genericTypeParameter: null)}
{AsyncBuilderCode("B1", "I1", genericTypeParameter: "T")}
namespace System.Runtime.CompilerServices {{ class AsyncBuilderAttribute : System.Attribute {{ public AsyncBuilderAttribute(System.Type t) {{ }} }} }}
namespace System.Runtime.CompilerServices {{ class AsyncMethodBuilderAttribute : System.Attribute {{ public AsyncMethodBuilderAttribute(System.Type t) {{ }} }} }}
";
var comp = CreateCompilation(source, options: TestOptions.DebugExe);
......@@ -3672,10 +3672,10 @@ public void AsyncTasklikeBuilderAccessibility()
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
[AsyncBuilder(typeof(B1))] public class T1 {{ }}
[AsyncBuilder(typeof(B2))] public class T2 {{ }}
[AsyncBuilder(typeof(B3))] internal class T3 {{ }}
[AsyncBuilder(typeof(B4))] internal class T4 {{ }}
[AsyncMethodBuilder(typeof(B1))] public class T1 {{ }}
[AsyncMethodBuilder(typeof(B2))] public class T2 {{ }}
[AsyncMethodBuilder(typeof(B3))] internal class T3 {{ }}
[AsyncMethodBuilder(typeof(B4))] internal class T4 {{ }}
{AsyncBuilderCode("B1", "T1").Replace("public class B1", "public class B1")}
{AsyncBuilderCode("B2", "T2").Replace("public class B2", "internal class B2")}
......@@ -3690,7 +3690,7 @@ class Program {{
async T4 f4() => await Task.Delay(4);
}}
namespace System.Runtime.CompilerServices {{ class AsyncBuilderAttribute : System.Attribute {{ public AsyncBuilderAttribute(System.Type t) {{ }} }} }}
namespace System.Runtime.CompilerServices {{ class AsyncMethodBuilderAttribute : System.Attribute {{ public AsyncMethodBuilderAttribute(System.Type t) {{ }} }} }}
";
var comp = CreateCompilation(source, options: TestOptions.DebugExe);
......@@ -3725,7 +3725,7 @@ static void Main()
static void g(Func<Task> lambda) { }
static void k<T>(Func<T> lambda) { }
}
[AsyncBuilder(typeof(MyTaskBuilder))]
[AsyncMethodBuilder(typeof(MyTaskBuilder))]
class MyTask { }
class MyTaskBuilder
{
......@@ -3738,7 +3738,7 @@ class MyTaskBuilder
public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : INotifyCompletion where TStateMachine : IAsyncStateMachine { }
public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine { }
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var v = CompileAndVerify(source, null, options: TestOptions.ReleaseDll);
v.VerifyIL("C.Main", @"
......@@ -3792,11 +3792,11 @@ class C
async ValueTask1 g() { await Task.Delay(0); }
async ValueTask2 h() { await Task.Delay(0); }
}
[AsyncBuilder(typeof(ValueTaskMethodBuilder0))]
[AsyncMethodBuilder(typeof(ValueTaskMethodBuilder0))]
struct ValueTask0 { }
[AsyncBuilder(typeof(ValueTaskMethodBuilder1))]
[AsyncMethodBuilder(typeof(ValueTaskMethodBuilder1))]
struct ValueTask1 { }
[AsyncBuilder(typeof(ValueTaskMethodBuilder2))]
[AsyncMethodBuilder(typeof(ValueTaskMethodBuilder2))]
struct ValueTask2 { }
class ValueTaskMethodBuilder0
{
......@@ -3815,7 +3815,7 @@ class ValueTaskMethodBuilder2
public ValueTask2 Task => default(ValueTask2);
public void SetException(System.Exception ex) { } public void SetResult() { }
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var comp = CreateCompilation(source, options: TestOptions.DebugExe);
......@@ -3842,9 +3842,9 @@ class C {
async Mismatch1<int> f() { await (Task)null; return 1; }
async Mismatch2 g() { await (Task)null; return 1; }
}
[AsyncBuilder(typeof(Mismatch1MethodBuilder))]
[AsyncMethodBuilder(typeof(Mismatch1MethodBuilder))]
struct Mismatch1<T> { }
[AsyncBuilder(typeof(Mismatch2MethodBuilder<>))]
[AsyncMethodBuilder(typeof(Mismatch2MethodBuilder<>))]
struct Mismatch2 { }
class Mismatch1MethodBuilder
{
......@@ -3854,7 +3854,7 @@ class Mismatch2MethodBuilder<T>
{
public static Mismatch2MethodBuilder<T> Create() => null;
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var comp = CreateCompilationWithMscorlib45(source);
comp.VerifyEmitDiagnostics(
......@@ -3881,7 +3881,7 @@ class C
async MyTask f() { await (Task)null; }
}
[AsyncBuilder(typeof(MyTaskBuilder))]
[AsyncMethodBuilder(typeof(MyTaskBuilder))]
class MyTask { }
interface I { }
......@@ -3898,7 +3898,7 @@ class MyTaskBuilder
public MyTask Task => null;
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var comp1 = CreateCompilation(source1, options: TestOptions.DebugExe);
......@@ -3918,7 +3918,7 @@ class C
async MyTask f() { await (Task)null; }
}
[AsyncBuilder(typeof(MyTaskBuilder))]
[AsyncMethodBuilder(typeof(MyTaskBuilder))]
class MyTask { }
class MyTaskBuilder
......@@ -3933,7 +3933,7 @@ class MyTaskBuilder
public MyTask Task => null;
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var comp2 = CreateCompilation(source2, options: TestOptions.DebugExe);
......
......@@ -31,7 +31,7 @@ static void Main()
Console.WriteLine(i);
}
}
[AsyncBuilder(typeof(MyTaskMethodBuilder))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder))]
struct MyTask
{
internal Awaiter GetAwaiter() => new Awaiter();
......@@ -42,7 +42,7 @@ internal class Awaiter : INotifyCompletion
internal void GetResult() { }
}
}
[AsyncBuilder(typeof(MyTaskMethodBuilder<>))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder<>))]
struct MyTask<T>
{
internal T _result;
......@@ -96,7 +96,7 @@ internal MyTaskMethodBuilder(MyTask<T> task)
public MyTask<T> Task => _task;
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source, options: TestOptions.DebugExe);
var verifier = CompileAndVerify(compilation, expectedOutput: "3");
......@@ -175,9 +175,9 @@ class C
static async MyTask F() { await (Task)null; }
static async MyTask<T> G<T>(T t) { await (Task)null; return t; }
}
[AsyncBuilder(typeof(MyTaskMethodBuilder))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder))]
struct MyTask { }
[AsyncBuilder(typeof(MyTaskMethodBuilder<>))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder<>))]
struct MyTask<T> { }
struct MyTaskMethodBuilder
{
......@@ -195,7 +195,7 @@ struct MyTaskMethodBuilder<T>
public MyTask<T> Task { get { return default(MyTask<T>); } }
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source);
compilation.VerifyEmitDiagnostics(
......@@ -219,9 +219,9 @@ class C
static async MyTask F() { }
static async MyTask<int> G() { return 3; }
#pragma warning restore CS1998
[AsyncBuilder(typeof(MyTaskMethodBuilder))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder))]
private class MyTask { }
[AsyncBuilder(typeof(MyTaskMethodBuilder<>))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder<>))]
private class MyTask<T> { }
private class MyTaskMethodBuilder
{
......@@ -247,7 +247,7 @@ private class MyTaskMethodBuilder<T>
}
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source);
var verifier = CompileAndVerify(compilation);
......@@ -283,7 +283,7 @@ static void M()
#pragma warning restore CS1998
}
}
[AsyncBuilder(typeof(MyTaskMethodBuilder))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder))]
class MyTask
{
internal Awaiter GetAwaiter() => null;
......@@ -294,7 +294,7 @@ internal class Awaiter : INotifyCompletion
internal void GetResult() { }
}
}
[AsyncBuilder(typeof(MyTaskMethodBuilder<>))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder<>))]
class MyTask<T>
{
internal Awaiter GetAwaiter() => null;
......@@ -328,7 +328,7 @@ class MyTaskMethodBuilder<T>
public MyTask<T> Task => default(MyTask<T>);
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source);
var verifier = CompileAndVerify(compilation);
......@@ -362,7 +362,7 @@ static async void M()
#pragma warning restore CS1998
}
}
[AsyncBuilder(typeof(MyTaskMethodBuilder))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder))]
struct MyTask
{
internal Awaiter GetAwaiter() => null;
......@@ -373,7 +373,7 @@ internal class Awaiter : INotifyCompletion
internal void GetResult() { }
}
}
[AsyncBuilder(typeof(MyTaskMethodBuilder<>))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder<>))]
struct MyTask<T>
{
internal Awaiter GetAwaiter() => null;
......@@ -407,7 +407,7 @@ class MyTaskMethodBuilder<T>
public MyTask<T> Task => default(MyTask<T>);
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source);
var verifier = CompileAndVerify(compilation);
......@@ -442,7 +442,7 @@ static void M(object o)
#pragma warning restore CS1998
}
}
[AsyncBuilder(typeof(MyTaskMethodBuilder<>))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder<>))]
class MyTask<T>
{
internal Awaiter GetAwaiter() => null;
......@@ -465,7 +465,7 @@ class MyTaskMethodBuilder<T>
public MyTask<T> Task => default(MyTask<T>);
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source, references: new MetadataReference[] { CSharpRef, SystemCoreRef });
var verifier = CompileAndVerify(
......@@ -504,7 +504,7 @@ static async void M()
#pragma warning restore CS1998
}
}
[AsyncBuilder(typeof(string))]
[AsyncMethodBuilder(typeof(string))]
public struct MyTask
{
internal Awaiter GetAwaiter() => null;
......@@ -516,7 +516,7 @@ internal class Awaiter : INotifyCompletion
}
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source);
compilation.VerifyEmitDiagnostics(
......@@ -544,7 +544,7 @@ static async void M()
#pragma warning restore CS1998
}
}
[AsyncBuilder(typeof(IEquatable<>))]
[AsyncMethodBuilder(typeof(IEquatable<>))]
public struct MyTask<T>
{
internal Awaiter GetAwaiter() => null;
......@@ -556,7 +556,7 @@ internal class Awaiter : INotifyCompletion
}
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source);
compilation.VerifyEmitDiagnostics(
......@@ -584,7 +584,7 @@ static async void M()
#pragma warning restore CS1998
}
}
[AsyncBuilder(typeof(object[]))]
[AsyncMethodBuilder(typeof(object[]))]
struct MyTask
{
internal Awaiter GetAwaiter() => null;
......@@ -596,7 +596,7 @@ internal class Awaiter : INotifyCompletion
}
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source);
compilation.VerifyEmitDiagnostics(
......@@ -606,16 +606,16 @@ namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System
}
[Fact]
static void AsyncBuilderAttributeMultipleParameters()
static void AsyncMethodBuilderAttributeMultipleParameters()
{
var source = @"
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
[AsyncBuilder(typeof(B1),1)] class T1 { }
[AsyncMethodBuilder(typeof(B1),1)] class T1 { }
class B1 { }
[AsyncBuilder(typeof(B2))] class T2 { }
[AsyncMethodBuilder(typeof(B2))] class T2 { }
class B2 { }
class Program {
......@@ -624,13 +624,13 @@ class Program {
async T2 f2() => await Task.Delay(1);
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t, int i) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t, int i) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source);
compilation.VerifyEmitDiagnostics(
// (8,2): error CS7036: There is no argument given that corresponds to the required formal parameter 'i' of 'AsyncBuilderAttribute.AsyncBuilderAttribute(Type, int)'
// [AsyncBuilder(typeof(B2))] class T2 { }
Diagnostic(ErrorCode.ERR_NoCorrespondingArgument, "AsyncBuilder(typeof(B2))").WithArguments("i", "System.Runtime.CompilerServices.AsyncBuilderAttribute.AsyncBuilderAttribute(System.Type, int)").WithLocation(8, 2),
// (8,2): error CS7036: There is no argument given that corresponds to the required formal parameter 'i' of 'AsyncMethodBuilderAttribute.AsyncMethodBuilderAttribute(Type, int)'
// [AsyncMethodBuilder(typeof(B2))] class T2 { }
Diagnostic(ErrorCode.ERR_NoCorrespondingArgument, "AsyncMethodBuilder(typeof(B2))").WithArguments("i", "System.Runtime.CompilerServices.AsyncMethodBuilderAttribute.AsyncMethodBuilderAttribute(System.Type, int)").WithLocation(8, 2),
// (13,14): error CS1983: The return type of an async method must be void, Task or Task<T>
// async T1 f1() => await Task.Delay(1);
Diagnostic(ErrorCode.ERR_BadAsyncReturn, "f1").WithLocation(13, 14),
......@@ -642,20 +642,20 @@ namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System
[Fact]
static void AsyncBuilderAttributeSingleParameterWrong()
static void AsyncMethodBuilderAttributeSingleParameterWrong()
{
var source = @"
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
[AsyncBuilder(1)] class T { }
[AsyncMethodBuilder(1)] class T { }
class Program {
static void Main() { }
async T f() => await Task.Delay(1);
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(int i) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(int i) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source);
compilation.VerifyEmitDiagnostics(
......
......@@ -18,12 +18,12 @@ class C {
async ValueTask f() { await (Task)null; }
async ValueTask<int> g() { await (Task)null; return 1; }
}
[AsyncBuilder(typeof(string))]
[AsyncMethodBuilder(typeof(string))]
struct ValueTask { }
[AsyncBuilder(typeof(Task<>))]
[AsyncMethodBuilder(typeof(Task<>))]
struct ValueTask<T> { }
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source).VerifyDiagnostics();
......@@ -69,7 +69,7 @@ class Unawaitable
public Func<TaskAwaiter> GetAwaiter = () => (Task.FromResult(1) as Task).GetAwaiter();
}
[AsyncBuilder(typeof(TasklikeMethodBuilder))]
[AsyncMethodBuilder(typeof(TasklikeMethodBuilder))]
public class Tasklike { }
public class TasklikeMethodBuilder
......@@ -85,7 +85,7 @@ public class TasklikeMethodBuilder
public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine { }
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
CreateCompilationWithMscorlib45(source).VerifyDiagnostics(
// (15,9): error CS0118: 'GetAwaiter' is a field but is used like a method
......@@ -111,7 +111,7 @@ static void Main()
<<betterOverload>>
<<worseOverload>>
}
[AsyncBuilder(typeof(ValueTaskMethodBuilder))]
[AsyncMethodBuilder(typeof(ValueTaskMethodBuilder))]
struct ValueTask
{
<<implicitConversionToTask>>
......@@ -123,7 +123,7 @@ internal class Awaiter : INotifyCompletion
internal void GetResult() { }
}
}
[AsyncBuilder(typeof(ValueTaskMethodBuilder<>))]
[AsyncMethodBuilder(typeof(ValueTaskMethodBuilder<>))]
struct ValueTask<T>
{
internal T _result;
......@@ -170,7 +170,7 @@ sealed class ValueTaskMethodBuilder<T>
public ValueTask<T> Task => _task;
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
source = source.Replace("<<arg>>", arg);
source = source.Replace("<<betterOverload>>", (betterOverload != null) ? "static string " + betterOverload + " => \"better\";" : "");
......@@ -292,14 +292,14 @@ class C {
async ValueTask f() { await Task.Delay(0); }
async ValueTask<int> g() { await Task.Delay(0); return 1; }
}
[AsyncBuilder(typeof(ValueTaskMethodBuilder))]
[AsyncMethodBuilder(typeof(ValueTaskMethodBuilder))]
struct ValueTask { }
[AsyncBuilder(typeof(ValueTaskMethodBuilder<>))]
[AsyncMethodBuilder(typeof(ValueTaskMethodBuilder<>))]
struct ValueTask<T> { }
class ValueTaskMethodBuilder {}
class ValueTaskMethodBuilder<T> {}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source).VerifyDiagnostics();
var methodf = compilation.GetMember<MethodSymbol>("C.f");
......@@ -355,14 +355,14 @@ class C
static void Main() { }
async MyTask f() { await (Task)null; }
}
[AsyncBuilder(typeof(MyTaskBuilder))]
[AsyncMethodBuilder(typeof(MyTaskBuilder))]
public class MyTask { }
public class MyTaskBuilder
{
public static MyTaskBuilder Create() => null;
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
CreateCompilationWithMscorlib45(source3).VerifyDiagnostics();
}
......@@ -387,7 +387,7 @@ class C {
static void h(Func<Task> lambda) { }
}
[AsyncBuilder(typeof(MyTaskBuilder<>))]
[AsyncMethodBuilder(typeof(MyTaskBuilder<>))]
public class MyTask<T> { }
public class MyTaskBuilder<T> {
public static MyTaskBuilder<T> Create() => null;
......@@ -400,7 +400,7 @@ public class MyTaskBuilder<T> {
public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine { }
}
[AsyncBuilder(typeof(MyTaskBuilder))]
[AsyncMethodBuilder(typeof(MyTaskBuilder))]
public class MyTask { }
public class MyTaskBuilder
{
......@@ -414,7 +414,7 @@ public class MyTaskBuilder
public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine { }
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
CreateCompilationWithMscorlib45(source).VerifyDiagnostics(
// (8,9): error CS0121: The call is ambiguous between the following methods or properties: 'C.h(Func<MyTask>)' and 'C.h(Func<Task>)'
......@@ -432,11 +432,11 @@ public void AsyncTasklikeInadmissibleArity()
class C {
async Mismatch2<int,int> g() { await Task.Delay(0); return 1; }
}
[AsyncBuilder(typeof(Mismatch2MethodBuilder<>))]
[AsyncMethodBuilder(typeof(Mismatch2MethodBuilder<>))]
struct Mismatch2<T,U> { }
class Mismatch2MethodBuilder<T> {}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var comp = CreateCompilationWithMscorlib45(source);
comp.VerifyEmitDiagnostics(
......@@ -469,13 +469,13 @@ static void Main()
}
}
[AsyncBuilder(typeof(ValueTaskBuilder<>))]
[AsyncMethodBuilder(typeof(ValueTaskBuilder<>))]
class ValueTask<T>
{
public static implicit operator ValueTask<T>(Task<T> task) => null;
}
[AsyncBuilder(typeof(MyTaskBuilder<>))]
[AsyncMethodBuilder(typeof(MyTaskBuilder<>))]
class MyTask<T>
{
public static implicit operator MyTask<T>(Task<T> task) => null;
......@@ -506,7 +506,7 @@ class MyTaskBuilder<T>
public void AwaitUnsafeOnCompleted<TA, TSM>(ref TA a, ref TSM sm) where TA : ICriticalNotifyCompletion where TSM : IAsyncStateMachine { }
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
CompileAndVerify(source, additionalRefs: new[] { MscorlibRef_v4_0_30316_17626 }, expectedOutput: "1");
}
......@@ -542,7 +542,7 @@ static void Main()
}
}
[AsyncBuilder(typeof(ValueTaskBuilder<>))]
[AsyncMethodBuilder(typeof(ValueTaskBuilder<>))]
public class ValueTask<T> { }
public class ValueTaskBuilder<T>
......@@ -557,7 +557,7 @@ public class ValueTaskBuilder<T>
public ValueTask<T> Task => null;
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
CompileAndVerify(source, additionalRefs: new[] { MscorlibRef_v4_0_30316_17626 }, expectedOutput: "bbbb");
}
......
......@@ -487,7 +487,7 @@ static void Main()
static void h<T>(Func<Task<T>> lambda) { }
static void h<T>(Func<MyTask<T>> lambda) { }
}
[AsyncBuilder(typeof(MyTaskBuilder<>))]
[AsyncMethodBuilder(typeof(MyTaskBuilder<>))]
public class MyTask<T> { }
public class MyTaskBuilder<T>
{
......@@ -501,7 +501,7 @@ public class MyTaskBuilder<T>
public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine { }
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
CreateCompilationWithMscorlib45(source1).VerifyDiagnostics(
// (9,9): error CS0121: The call is ambiguous between the following methods or properties: 'C.h<T>(Func<Task<T>>)' and 'C.h<T>(Func<MyTask<T>>)'
......@@ -522,7 +522,7 @@ static void Main()
static void k<T>(Func<YourTask<T>> lambda) { }
static void k<T>(Func<MyTask<T>> lambda) { }
}
[AsyncBuilder(typeof(MyTaskBuilder<>))]
[AsyncMethodBuilder(typeof(MyTaskBuilder<>))]
public class MyTask<T> { }
public class MyTaskBuilder<T>
{
......@@ -536,7 +536,7 @@ public class MyTaskBuilder<T>
public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine { }
}
[AsyncBuilder(typeof(YourTask<>))]
[AsyncMethodBuilder(typeof(YourTask<>))]
public class YourTask<T> { }
public class YourTaskBuilder<T>
{
......@@ -550,7 +550,7 @@ public class YourTaskBuilder<T>
public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine { }
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
CreateCompilationWithMscorlib45(source2).VerifyDiagnostics(
// (9,9): error CS0121: The call is ambiguous between the following methods or properties: 'C.k<T>(Func<YourTask<T>>)' and 'C.k<T>(Func<MyTask<T>>)'
......@@ -579,9 +579,9 @@ unsafe class C<T, U>
static int* F4;
#pragma warning restore CS0169
}
[AsyncBuilder(typeof(MyTaskMethodBuilder))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder))]
struct MyTask { }
[AsyncBuilder(typeof(MyTaskMethodBuilder<>))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder<>))]
struct MyTask<T> { }
struct MyTaskMethodBuilder
{
......@@ -592,7 +592,7 @@ struct MyTaskMethodBuilder<T>
public static MyTaskMethodBuilder<T> Create() => new MyTaskMethodBuilder<T>();
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source, options: TestOptions.UnsafeDebugDll);
compilation.VerifyDiagnostics();
......@@ -639,9 +639,9 @@ class C<T, U>
static (MyTask, char, byte, short, ushort, int, uint, long, ulong, char, byte, short, ushort, int, uint, long, MyTask<T>) F3;
#pragma warning restore CS0169
}
[AsyncBuilder(typeof(MyTaskMethodBuilder))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder))]
struct MyTask { }
[AsyncBuilder(typeof(MyTaskMethodBuilder<>))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder<>))]
struct MyTask<T> { }
struct MyTaskMethodBuilder
{
......@@ -672,7 +672,7 @@ class TupleElementNamesAttribute : Attribute
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source);
compilation.VerifyDiagnostics();
......@@ -731,12 +731,12 @@ public void NormalizeTaskTypes_TypeArgumentCustomModifiers()
}
.class public MyTask
{
.custom instance void System.Runtime.CompilerServices.AsyncBuilderAttribute::.ctor(class [mscorlib]System.Type) = { type(MyTaskMethodBuilder) }
.custom instance void System.Runtime.CompilerServices.AsyncMethodBuilderAttribute::.ctor(class [mscorlib]System.Type) = { type(MyTaskMethodBuilder) }
.method public hidebysig specialname rtspecialname instance void .ctor() cil managed { ret }
}
.class public MyTask`1<T>
{
.custom instance void System.Runtime.CompilerServices.AsyncBuilderAttribute::.ctor(class [mscorlib]System.Type) = { type(MyTaskMethodBuilder`1) }
.custom instance void System.Runtime.CompilerServices.AsyncMethodBuilderAttribute::.ctor(class [mscorlib]System.Type) = { type(MyTaskMethodBuilder`1) }
.method public hidebysig specialname rtspecialname instance void .ctor() cil managed { ret }
}
.class public MyTaskMethodBuilder
......@@ -749,7 +749,7 @@ public void NormalizeTaskTypes_TypeArgumentCustomModifiers()
}
.namespace System.Runtime.CompilerServices
{
.class public AsyncBuilderAttribute extends [mscorlib]System.Attribute
.class public AsyncMethodBuilderAttribute extends [mscorlib]System.Attribute
{
.method public hidebysig specialname rtspecialname instance void .ctor(class [mscorlib]System.Type t) cil managed { ret }
}
......@@ -779,14 +779,14 @@ unsafe class C<T>
static C<MyTask<int>>* F0;
#pragma warning restore CS0169
}
[AsyncBuilder(typeof(MyTaskMethodBuilder<>))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder<>))]
struct MyTask<T> { }
struct MyTaskMethodBuilder<T>
{
public static MyTaskMethodBuilder<T> Create() => new MyTaskMethodBuilder<T>();
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source, options: TestOptions.UnsafeDebugDll);
compilation.VerifyDiagnostics(
......@@ -811,7 +811,7 @@ public void NormalizeTaskTypes_PointersCustomModifiers()
}
.class public MyTask
{
.custom instance void System.Runtime.CompilerServices.AsyncBuilderAttribute::.ctor(class [mscorlib]System.Type) = { type(MyTaskMethodBuilder) }
.custom instance void System.Runtime.CompilerServices.AsyncMethodBuilderAttribute::.ctor(class [mscorlib]System.Type) = { type(MyTaskMethodBuilder) }
.method public hidebysig specialname rtspecialname instance void .ctor() cil managed { ret }
}
.class public MyTaskMethodBuilder
......@@ -820,7 +820,7 @@ public void NormalizeTaskTypes_PointersCustomModifiers()
}
.namespace System.Runtime.CompilerServices
{
.class public AsyncBuilderAttribute extends [mscorlib]System.Attribute
.class public AsyncMethodBuilderAttribute extends [mscorlib]System.Attribute
{
.method public hidebysig specialname rtspecialname instance void .ctor(class [mscorlib]System.Type t) cil managed { ret }
}
......@@ -851,9 +851,9 @@ class C
static MyTask<B> F1;
#pragma warning restore CS0169
}
[AsyncBuilder(typeof(MyTaskMethodBuilder))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder))]
struct MyTask { }
[AsyncBuilder(typeof(MyTaskMethodBuilder<>))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder<>))]
struct MyTask<T> { }
struct MyTaskMethodBuilder
{
......@@ -864,7 +864,7 @@ struct MyTaskMethodBuilder<T>
public static MyTaskMethodBuilder<T> Create() => new MyTaskMethodBuilder<T>();
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source);
compilation.VerifyDiagnostics(
......@@ -904,9 +904,9 @@ class C<T, U>
class Inner
{
}
[AsyncBuilder(typeof(C<,>.MyTaskMethodBuilder))]
[AsyncMethodBuilder(typeof(C<,>.MyTaskMethodBuilder))]
class MyTask { }
[AsyncBuilder(typeof(C<,>.MyTaskMethodBuilder<>))]
[AsyncMethodBuilder(typeof(C<,>.MyTaskMethodBuilder<>))]
class MyTask<V> { }
class MyTaskMethodBuilder
{
......@@ -918,7 +918,7 @@ class MyTaskMethodBuilder<V>
}
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source);
compilation.VerifyDiagnostics();
......@@ -952,12 +952,12 @@ class C
static MyTask<MyTask<object>>.B F1;
#pragma warning restore CS0169
}
[AsyncBuilder(typeof(MyTaskMethodBuilder))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder))]
class MyTask
{
internal class A { }
}
[AsyncBuilder(typeof(MyTaskMethodBuilder<>))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder<>))]
class MyTask<V>
{
internal class B { }
......@@ -971,7 +971,7 @@ class MyTaskMethodBuilder<V>
public static MyTaskMethodBuilder<V> Create() => null;
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilationWithMscorlib45(source);
compilation.VerifyDiagnostics();
......@@ -1003,9 +1003,9 @@ class C
static MyTask<MyTask> F;
#pragma warning restore CS0169
}
[AsyncBuilder(typeof(MyTaskMethodBuilder))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder))]
struct MyTask { }
[AsyncBuilder(typeof(MyTaskMethodBuilder<>))]
[AsyncMethodBuilder(typeof(MyTaskMethodBuilder<>))]
struct MyTask<T> { }
struct MyTaskMethodBuilder
{
......@@ -1016,7 +1016,7 @@ struct MyTaskMethodBuilder<T>
public MyTaskMethodBuilder<T> Create() => new MyTaskMethodBuilder<T>();
}
namespace System.Runtime.CompilerServices { class AsyncBuilderAttribute : System.Attribute { public AsyncBuilderAttribute(System.Type t) { } } }
namespace System.Runtime.CompilerServices { class AsyncMethodBuilderAttribute : System.Attribute { public AsyncMethodBuilderAttribute(System.Type t) { } } }
";
var compilation = CreateCompilation(source, references: new[] { MscorlibRef_v20 });
compilation.VerifyDiagnostics();
......
......@@ -344,7 +344,7 @@ static AttributeDescription()
private static readonly byte[][] s_signaturesOfWindowsRuntimeImportAttribute = { s_signature_HasThis_Void };
private static readonly byte[][] s_signaturesOfDynamicSecurityMethodAttribute = { s_signature_HasThis_Void };
private static readonly byte[][] s_signaturesOfRequiredAttributeAttribute = { s_signature_HasThis_Void_Type };
private static readonly byte[][] s_signaturesOfAsyncBuilderAttribute = { s_signature_HasThis_Void_Type };
private static readonly byte[][] s_signaturesOfAsyncMethodBuilderAttribute = { s_signature_HasThis_Void_Type };
private static readonly byte[][] s_signaturesOfAsyncStateMachineAttribute = { s_signature_HasThis_Void_Type };
private static readonly byte[][] s_signaturesOfIteratorStateMachineAttribute = { s_signature_HasThis_Void_Type };
private static readonly byte[][] s_signaturesOfRuntimeCompatibilityAttribute = { s_signature_HasThis_Void };
......@@ -468,7 +468,7 @@ static AttributeDescription()
internal static readonly AttributeDescription WindowsRuntimeImportAttribute = new AttributeDescription("System.Runtime.InteropServices.WindowsRuntime", "WindowsRuntimeImportAttribute", s_signaturesOfWindowsRuntimeImportAttribute);
internal static readonly AttributeDescription DynamicSecurityMethodAttribute = new AttributeDescription("System.Security", "DynamicSecurityMethodAttribute", s_signaturesOfDynamicSecurityMethodAttribute);
internal static readonly AttributeDescription RequiredAttributeAttribute = new AttributeDescription("System.Runtime.CompilerServices", "RequiredAttributeAttribute", s_signaturesOfRequiredAttributeAttribute);
internal static readonly AttributeDescription AsyncBuilderAttribute = new AttributeDescription("System.Runtime.CompilerServices", "AsyncBuilderAttribute", s_signaturesOfAsyncBuilderAttribute);
internal static readonly AttributeDescription AsyncMethodBuilderAttribute = new AttributeDescription("System.Runtime.CompilerServices", "AsyncMethodBuilderAttribute", s_signaturesOfAsyncMethodBuilderAttribute);
internal static readonly AttributeDescription AsyncStateMachineAttribute = new AttributeDescription("System.Runtime.CompilerServices", "AsyncStateMachineAttribute", s_signaturesOfAsyncStateMachineAttribute);
internal static readonly AttributeDescription IteratorStateMachineAttribute = new AttributeDescription("System.Runtime.CompilerServices", "IteratorStateMachineAttribute", s_signaturesOfIteratorStateMachineAttribute);
internal static readonly AttributeDescription CompilationRelaxationsAttribute = new AttributeDescription("System.Runtime.CompilerServices", "CompilationRelaxationsAttribute", s_signaturesOfCompilationRelaxationsAttribute);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册