[vala/0.40] codegen: Fix default of CCode.pos for parameters in async methods



commit 8ba15ac39c470ad65695acae95ac4786792e090a
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Sun Apr 19 18:20:41 2020 +0200

    codegen: Fix default of CCode.pos for parameters in async methods

 codegen/valaccodeattribute.vala | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)
---
diff --git a/codegen/valaccodeattribute.vala b/codegen/valaccodeattribute.vala
index 8e31924bc..5014a1ae1 100644
--- a/codegen/valaccodeattribute.vala
+++ b/codegen/valaccodeattribute.vala
@@ -417,10 +417,20 @@ public class Vala.CCodeAttribute : AttributeCache {
                                if (ccode != null && ccode.has_argument ("pos")) {
                                        _pos = ccode.get_double ("pos");
                                } else {
-                                       var param = (Parameter) node;
-                                       var sym = param.parent_symbol;
-                                       if (sym is Callable) {
-                                               _pos = ((Callable) sym).get_parameters ().index_of (param) + 
1.0;
+                                       unowned Parameter param = (Parameter) node;
+                                       unowned Callable? callable = param.parent_symbol as Callable;
+                                       unowned Method? method = param.parent_symbol as Method;
+                                       if (method != null && method.coroutine) {
+                                               int index = method.get_async_begin_parameters ().index_of 
(param);
+                                               if (index < 0) {
+                                                       index = method.get_async_end_parameters ().index_of 
(param);
+                                               }
+                                               if (index < 0) {
+                                                       Report.error (param.source_reference, "internal: 
Parameter `%s' not found in `%s'".printf (param.name, method.get_full_name ()));
+                                               }
+                                               _pos = index + 1.0;
+                                       } else if (callable != null) {
+                                               _pos = callable.get_parameters ().index_of (param) + 1.0;
                                        } else {
                                                _pos = 0.0;
                                        }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]