Enable await expressions to work with dynamic binder
[mono.git] / mcs / mcs / typemanager.cs
index 0e98e11cdc00f20ff43582619ee653c81c29f942..708cace79dc4871ea6c17f7ba2d34bead19e2218 100644 (file)
@@ -300,7 +300,8 @@ namespace Mono.CSharp
                                ExpressionGeneric.TypeSpec.IsExpressionTreeType = true;
 
                        Task.Define ();
-                       TaskGeneric.Define ();
+                       if (TaskGeneric.Define ())
+                               TaskGeneric.TypeSpec.IsGenericTask = true;
                }
        }
 
@@ -309,9 +310,11 @@ namespace Mono.CSharp
                public readonly PredefinedMember<MethodSpec> ActivatorCreateInstance;
                public readonly PredefinedMember<MethodSpec> AsyncTaskMethodBuilderCreate;
                public readonly PredefinedMember<MethodSpec> AsyncTaskMethodBuilderSetResult;
+               public readonly PredefinedMember<MethodSpec> AsyncTaskMethodBuilderSetException;
                public readonly PredefinedMember<PropertySpec> AsyncTaskMethodBuilderTask;
                public readonly PredefinedMember<MethodSpec> AsyncTaskMethodBuilderGenericCreate;
                public readonly PredefinedMember<MethodSpec> AsyncTaskMethodBuilderGenericSetResult;
+               public readonly PredefinedMember<MethodSpec> AsyncTaskMethodBuilderGenericSetException;
                public readonly PredefinedMember<PropertySpec> AsyncTaskMethodBuilderGenericTask;
                public readonly PredefinedMember<MethodSpec> AsyncVoidMethodBuilderCreate;
                public readonly PredefinedMember<MethodSpec> AsyncVoidMethodBuilderSetException;
@@ -365,6 +368,10 @@ namespace Mono.CSharp
                        AsyncTaskMethodBuilderSetResult = new PredefinedMember<MethodSpec> (module, types.AsyncTaskMethodBuilder,
                                MemberFilter.Method ("SetResult", 0, ParametersCompiled.EmptyReadOnlyParameters, btypes.Void));
 
+                       AsyncTaskMethodBuilderSetException = new PredefinedMember<MethodSpec> (module, types.AsyncTaskMethodBuilder,
+                               MemberFilter.Method ("SetException", 0,
+                               ParametersCompiled.CreateFullyResolved (btypes.Exception), btypes.Void));
+
                        AsyncTaskMethodBuilderTask = new PredefinedMember<PropertySpec> (module, types.AsyncTaskMethodBuilder,
                                MemberFilter.Property ("Task", null));
 
@@ -381,6 +388,10 @@ namespace Mono.CSharp
                                                                new TypeParameterSpec (0, null, SpecialConstraint.None, Variance.None, null)
                                                        }, false), btypes.Void));
 
+                       AsyncTaskMethodBuilderGenericSetException = new PredefinedMember<MethodSpec> (module, types.AsyncTaskMethodBuilderGeneric,
+                               MemberFilter.Method ("SetException", 0,
+                               ParametersCompiled.CreateFullyResolved (btypes.Exception), btypes.Void));
+
                        AsyncTaskMethodBuilderGenericTask = new PredefinedMember<PropertySpec> (module, types.AsyncTaskMethodBuilderGeneric,
                                MemberFilter.Property ("Task", null));