diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2022-08-01 14:32:06 +0200 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2022-08-09 08:44:28 +0200 |
commit | 661f08ea4d92c37a566b388c543240ac71cef6dd (patch) | |
tree | 4528bc32d0f5a5588fae909131f66680cb78b037 /vala | |
parent | e74724d2646b0cda103984f1d6c4045db2262726 (diff) | |
download | vala-661f08ea4d92c37a566b388c543240ac71cef6dd.tar.gz |
vala: Enforce required type-arguments on parameter/return types of callables
This stricter check applies to delegate types in source files only.
Fixes https://gitlab.gnome.org/GNOME/vala/issues/1342
Diffstat (limited to 'vala')
-rw-r--r-- | vala/valadelegate.vala | 6 | ||||
-rw-r--r-- | vala/valamethod.vala | 3 | ||||
-rw-r--r-- | vala/valaparameter.vala | 3 | ||||
-rw-r--r-- | vala/valasignal.vala | 6 |
4 files changed, 18 insertions, 0 deletions
diff --git a/vala/valadelegate.vala b/vala/valadelegate.vala index eeaabcb69..cb53d2e91 100644 --- a/vala/valadelegate.vala +++ b/vala/valadelegate.vala @@ -319,6 +319,12 @@ public class Vala.Delegate : TypeSymbol, Callable { } return_type.check (context); + if (!external_package) { + context.analyzer.check_type (return_type); + if (return_type is DelegateType) { + return_type.check_type_arguments (context); + } + } if (return_type.type_symbol == context.analyzer.va_list_type.type_symbol) { error = true; diff --git a/vala/valamethod.vala b/vala/valamethod.vala index 2794cd48e..8c5c3af56 100644 --- a/vala/valamethod.vala +++ b/vala/valamethod.vala @@ -866,6 +866,9 @@ public class Vala.Method : Subroutine, Callable { return_type.check (context); if (!external_package) { context.analyzer.check_type (return_type); + if (return_type is DelegateType) { + return_type.check_type_arguments (context); + } } if (return_type.type_symbol == context.analyzer.va_list_type.type_symbol) { diff --git a/vala/valaparameter.vala b/vala/valaparameter.vala index 656188848..fb68ab069 100644 --- a/vala/valaparameter.vala +++ b/vala/valaparameter.vala @@ -208,6 +208,9 @@ public class Vala.Parameter : Variable { if (!ellipsis) { if (!external_package) { context.analyzer.check_type (variable_type); + if (variable_type is DelegateType) { + variable_type.check_type_arguments (context); + } // check symbol availability if ((parent_symbol == null || !parent_symbol.external_package) && variable_type.type_symbol != null) { diff --git a/vala/valasignal.vala b/vala/valasignal.vala index ffd5a760a..2b5005e3b 100644 --- a/vala/valasignal.vala +++ b/vala/valasignal.vala @@ -206,6 +206,12 @@ public class Vala.Signal : Symbol, Callable { } return_type.check (context); + if (!external_package) { + context.analyzer.check_type (return_type); + if (return_type is DelegateType) { + return_type.check_type_arguments (context); + } + } if (return_type.type_symbol == context.analyzer.va_list_type.type_symbol) { error = true; |