From: Rico Tzschichholz Date: Thu, 4 Jun 2020 06:10:21 +0000 (+0200) Subject: codegen: Don't call get_ccode_finish_instance() with non-async methods X-Git-Tag: 0.49.1~113 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f6f73ee92cc9fc269a9b85b027e839c4ebcae627;p=thirdparty%2Fvala.git codegen: Don't call get_ccode_finish_instance() with non-async methods and restrict evaluation of CCode.finish_* attributes to async methods only --- diff --git a/codegen/valaccode.vala b/codegen/valaccode.vala index e39fdbecc..f10eb3f6d 100644 --- a/codegen/valaccode.vala +++ b/codegen/valaccode.vala @@ -220,8 +220,9 @@ namespace Vala { return get_ccode_free_function (sym) == "g_boxed_free"; } - public static bool get_ccode_finish_instance (CodeNode node) { - return get_ccode_attribute (node).finish_instance; + public static bool get_ccode_finish_instance (Method m) { + assert (m.coroutine); + return get_ccode_attribute (m).finish_instance; } public static string get_ccode_type_id (CodeNode node) { @@ -415,14 +416,17 @@ namespace Vala { } public static string get_ccode_finish_name (Method m) { + assert (m.coroutine); return get_ccode_attribute(m).finish_name; } public static string get_ccode_finish_vfunc_name (Method m) { + assert (m.coroutine); return get_ccode_attribute(m).finish_vfunc_name; } public static string get_ccode_finish_real_name (Method m) { + assert (m.coroutine); return get_ccode_attribute(m).finish_real_name; } diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index b4a65dd77..97c2617be 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -4991,7 +4991,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { } } - if (m != null && m.parent_symbol is Class) { + if (m != null && m.coroutine && m.parent_symbol is Class) { if (get_ccode_finish_instance (m)) { var tmp = new CCodeMemberAccess.pointer (new CCodeIdentifier ("_data_"), "_source_object_"); out_arg_map.set (get_param_pos (get_ccode_instance_pos (m)), tmp); diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala index 25effa396..9ffb8deb7 100644 --- a/codegen/valaccodemethodcallmodule.vala +++ b/codegen/valaccodemethodcallmodule.vala @@ -231,7 +231,9 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule { instance = new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_cvalue_ (instance_value)); } - if (expr.is_yield_expression) { + if (!m.coroutine) { + in_arg_map.set (get_param_pos (get_ccode_instance_pos (m)), instance); + } else if (expr.is_yield_expression) { in_arg_map.set (get_param_pos (get_ccode_instance_pos (m)), instance); if (get_ccode_finish_instance (m)) { out_arg_map.set (get_param_pos (get_ccode_instance_pos (m)), instance);