Report error about missing async support types
authorMarek Safar <marek.safar@gmail.com>
Mon, 19 Sep 2011 15:20:57 +0000 (16:20 +0100)
committerMarek Safar <marek.safar@gmail.com>
Mon, 19 Sep 2011 18:34:26 +0000 (19:34 +0100)
mcs/errors/cs1993.cs [new file with mode: 0644]
mcs/mcs/async.cs

diff --git a/mcs/errors/cs1993.cs b/mcs/errors/cs1993.cs
new file mode 100644 (file)
index 0000000..633e198
--- /dev/null
@@ -0,0 +1,43 @@
+// CS1993: Cannot find compiler required types for asynchronous functions support. Are you targeting the wrong framework version?
+// Line: 38
+// Compiler options: -langversion:future -sdk:2
+
+using System.Threading.Tasks;
+
+namespace System.Threading.Tasks
+{
+       class Task<T>
+       {
+       }
+}
+
+static class S
+{
+       public static A GetAwaiter (this int i)
+       {
+               return new A ();
+       }
+}
+
+class A
+{
+       bool IsCompleted {
+               get {
+                       return true;
+               }
+       }
+       
+       void OnCompleted (System.Action a)
+       {
+       }
+       
+       int GetResult ()
+       {
+               return 3;
+       }
+       
+       static async Task<int> Test ()
+       {
+               return await 2;
+       }
+}
index a6aecc75c1b4baa8fd9d86edb77f835244d354c2..8fd3fe24d527db12e5a85058f84ea1e003fdcf34 100644 (file)
@@ -645,22 +645,26 @@ namespace Mono.CSharp
                                bf = pred_members.AsyncTaskMethodBuilderCreate;
                                sr = pred_members.AsyncTaskMethodBuilderSetResult;
                                se = pred_members.AsyncTaskMethodBuilderSetException;
-                               task = pred_members.AsyncTaskMethodBuilderTask.Resolve (Location);
+                               task = pred_members.AsyncTaskMethodBuilderTask.Get ();
                        } else {
                                builder_type = Module.PredefinedTypes.AsyncTaskMethodBuilderGeneric;
                                bf = pred_members.AsyncTaskMethodBuilderGenericCreate;
                                sr = pred_members.AsyncTaskMethodBuilderGenericSetResult;
                                se = pred_members.AsyncTaskMethodBuilderGenericSetException;
-                               task = pred_members.AsyncTaskMethodBuilderGenericTask.Resolve (Location);
+                               task = pred_members.AsyncTaskMethodBuilderGenericTask.Get ();
                                has_task_return_type = true;
                        }
 
-                       set_result = sr.Resolve (Location);
-                       set_exception = se.Resolve (Location);
-                       var builder_factory = bf.Resolve (Location);
-                       var bt = builder_type.Resolve ();
-                       if (bt == null || set_result == null || builder_factory == null || set_exception == null)
-                               return false;
+                       set_result = sr.Get ();
+                       set_exception = se.Get ();
+                       var builder_factory = bf.Get ();
+                       if (!builder_type.Define () || set_result == null || builder_factory == null || set_exception == null) {
+                               Report.Error (1993, Location,
+                                       "Cannot find compiler required types for asynchronous functions support. Are you targeting the wrong framework version?");
+                               return base.DoDefineMembers ();
+                       }
+
+                       var bt = builder_type.TypeSpec;
 
                        //
                        // Inflate generic Task types